ETH Price: $3,826.97 (+4.89%)

Token

ERC-20: DBLend Line (DBL)
 

Overview

Max Total Supply

1,140,791.18911949 DBL

Holders

197

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
13.91364827 DBL

Value
$0.00
0x56ee0cfbe9ccf932638812a928ee4d9ccd3e058f
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:
DBLendToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-12
*/

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: 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;
    }
}





            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

/**
 * @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);
}





            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

////import "../utils/Context.sol";
/**
 * @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;
    }
}





            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity ^0.8.0;

////import "./IERC20.sol";
////import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overloaded;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}




////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
pragma solidity ^0.8.0;

////import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
////import "@openzeppelin/contracts/access/Ownable.sol";
// ////import './libraries/Strings.sol';

contract DBLendToken is ERC20,Ownable {

    // using Strings for *;
    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;
    address public miner;
    address public timelock;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint256 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint256) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint256) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);
    
    constructor() ERC20("DBLend Line","DBL"){
        _mint(msg.sender, 2100000*1e8);//Total 2100000 DBL
        // timelock = _timelock;

        //_delegate(address(this), address(this));
        //numCheckpoints[address(this)] = 2100000*1e8;
    }

    function decimals() public pure override returns (uint8) {
        return 8;
    }

    function totalSupply() public view override returns (uint256) {
        return 2100000*1e8 - balanceOf(address(this));
    }

    ///@dev init miner and approve miner transfer dbl
    function initMiner(address _minerAddress) external onlyOwner returns (uint256){
        require(miner == address(0), "DBL: INIT ONLY ONCE");
        require(_minerAddress != address(0), "DBL: NOT VALID MINER");
        return approveMiner(_minerAddress);
    }

    ///@dev update timelock,if timelock has been set, only timelock can be call. Otherwise the owner can call.
    function updateTimelock(address _timelock) external {
        require((timelock == address(0) && msg.sender == owner()) || msg.sender == timelock, "NO PERMISSION");
        require(_timelock != address(0),"INVALID ADDRESS");
        timelock = _timelock;
    }

    ///@dev replace miner through governance voting,if timelock is not set, the owner can operate.
    function _setMiner(address _minerAddress) external {
        require(msg.sender == timelock || (timelock == address(0) && msg.sender == owner()), "DBL: NEED TIMELOCK OR OWNER");
        approveMiner(_minerAddress);
    }

    ///@dev DBLToken contract approve Miner Contract to spend all dbl
    function approveMiner(address _minerAddress) internal returns (uint256){
        //////importance,prevent delegatecall attack
        if(!isContract(_minerAddress)) return 0;
        uint256 balance = balanceOf(address(this));
        _approve(address(this), _minerAddress, 2100000 * 1e8);
        miner = _minerAddress;
        return balance;
    }

    ///@dev Miner mint,actually transfer from address(this) to _account
    function mint(address _account, uint256 _amount) public returns (bool){
        require(msg.sender == miner, "DEL:ONLY MINER");
        return transferFrom(address(this), _account, _amount);
    }

    ///@dev DBL token can be transferred through governance voting
    // function govTransfer(address _receipt, uint256 _amount) public returns (bool){
    //     require(msg.sender == timelock, "DBL:ONLY TIMELOCK");
    //     uint256 balance = balanceOf(address(this));
    //     if(_amount > balance) _amount = balance;
    //     return transferFrom(address(this), _account, _amount);
    // }

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        if(recipient == address(this)){
            recipient = address(0);
        }
        _moveDelegates(delegates[_msgSender()], delegates[recipient], amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = allowance(sender,_msgSender());
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        //如果是挖矿铸币,则src为0,不需要记录本地的投票数据
        if(sender == address(this)){
            sender = address(0);
        }       
        _moveDelegates(delegates[sender], delegates[recipient], amount);
        return true;
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public returns (address){
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "DBL::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "DBL::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "DBL::delegateBySig: signature expired");
        _delegate(signatory, delegatee);
        return signatory;
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint256) {
        uint256 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint256 blockNumber) public view returns (uint256) {
        require(blockNumber < block.number, "DBL::getPriorVotes: not yet determined");

        uint256 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint256 lower = 0;
        uint256 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint256 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator);
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    // function _transferTokens(address src, address dst, uint96 amount) internal {
    //     require(src != address(0), "DBL::_transferTokens: cannot transfer from the zero address");
    //     require(dst != address(0), "DBL::_transferTokens: cannot transfer to the zero address");

    //     balances[src] = sub96(balances[src], amount, "DBL::_transferTokens: transfer amount exceeds balance");
    //     balances[dst] = add96(balances[dst], amount, "DBL::_transferTokens: transfer amount overflows");
    //     emit Transfer(src, dst, amount);

    //     _moveDelegates(delegates[src], delegates[dst], amount);
    // }

    //转移投票权,减少原代理地址的票数,增加到新代理地址的票数,票数跟balance相关
    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {                
                uint256 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;                
                uint256 srcRepNew = srcRepOld - amount;            
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint256 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint256 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "DBL::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

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

    function getChainId() internal view returns (uint256) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minerAddress","type":"address"}],"name":"_setMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minerAddress","type":"address"}],"name":"initMiner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"miner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"updateTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f44424c656e64204c696e650000000000000000000000000000000000000000008152506040518060400160405280600381526020017f44424c0000000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620002f3565b508060049080519060200190620000af929190620002f3565b5050506000620000c46200018160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200017b3365befe6f6720006200018960201b60201c565b6200054f565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f390620003db565b60405180910390fd5b6200021060008383620002ee60201b60201c565b80600260008282546200022491906200042b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200027b91906200042b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002e29190620003fd565b60405180910390a35050565b505050565b828054620003019062000492565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b6000620003b2601f836200041a565b9150620003bf8262000526565b602082019050919050565b620003d58162000488565b82525050565b60006020820190508181036000830152620003f681620003a3565b9050919050565b6000602082019050620004146000830184620003ca565b92915050565b600082825260208201905092915050565b6000620004388262000488565b9150620004458362000488565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200047d576200047c620004c8565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620004ab57607f821691505b60208210811415620004c257620004c1620004f7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613ae9806200055f6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a890c910116100a2578063d33219b411610071578063d33219b4146105e0578063dd62ed3e146105fe578063e7a324dc1461062e578063f2fde38b1461064c576101da565b8063a890c91014610534578063a9059cbb14610550578063b4b5ea5714610580578063c3cda520146105b0576101da565b80639258bddd116100de5780639258bddd1461049a57806395d89b41146104b6578063a457c2d7146104d4578063a82009e014610504576101da565b8063782d6fe11461041c5780637ecebe001461044c5780638da5cb5b1461047c576101da565b8063349dc3291161017c5780635c19a95c1161014b5780635c19a95c146103965780636fcfff45146103b257806370a08231146103e2578063715018a614610412576101da565b8063349dc329146102e8578063395093511461030657806340c10f1914610336578063587cde1e14610366576101da565b806318160ddd116101b857806318160ddd1461025e57806320606b701461027c57806323b872dd1461029a578063313ce567146102ca576101da565b806306fdde03146101df578063095ea7b3146101fd5780630cdfebfa1461022d575b600080fd5b6101e7610668565b6040516101f49190612f77565b60405180910390f35b610217600480360381019061021291906129f5565b6106fa565b6040516102249190612e72565b60405180910390f35b610247600480360381019061024291906129f5565b610718565b60405161025592919061323d565b60405180910390f35b610266610759565b60405161027391906131f9565b60405180910390f35b61028461077a565b6040516102919190612e8d565b60405180910390f35b6102b460048036038101906102af91906129a6565b61079e565b6040516102c19190612e72565b60405180910390f35b6102d261092e565b6040516102df9190613266565b60405180910390f35b6102f0610937565b6040516102fd9190612e57565b60405180910390f35b610320600480360381019061031b91906129f5565b61095d565b60405161032d9190612e72565b60405180910390f35b610350600480360381019061034b91906129f5565b610a09565b60405161035d9190612e72565b60405180910390f35b610380600480360381019061037b9190612941565b610aae565b60405161038d9190612e57565b60405180910390f35b6103b060048036038101906103ab9190612941565b610ae1565b005b6103cc60048036038101906103c79190612941565b610aee565b6040516103d991906131f9565b60405180910390f35b6103fc60048036038101906103f79190612941565b610b06565b60405161040991906131f9565b60405180910390f35b61041a610b4e565b005b610436600480360381019061043191906129f5565b610c8b565b60405161044391906131f9565b60405180910390f35b61046660048036038101906104619190612941565b61100a565b60405161047391906131f9565b60405180910390f35b610484611022565b6040516104919190612e57565b60405180910390f35b6104b460048036038101906104af9190612941565b61104c565b005b6104be611180565b6040516104cb9190612f77565b60405180910390f35b6104ee60048036038101906104e991906129f5565b611212565b6040516104fb9190612e72565b60405180910390f35b61051e60048036038101906105199190612941565b611306565b60405161052b91906131f9565b60405180910390f35b61054e60048036038101906105499190612941565b611495565b005b61056a600480360381019061056591906129f5565b611670565b6040516105779190612e72565b60405180910390f35b61059a60048036038101906105959190612941565b611797565b6040516105a791906131f9565b60405180910390f35b6105ca60048036038101906105c59190612a31565b611854565b6040516105d79190612e57565b60405180910390f35b6105e8611aef565b6040516105f59190612e57565b60405180910390f35b6106186004803603810190610613919061296a565b611b15565b60405161062591906131f9565b60405180910390f35b610636611b9c565b6040516106439190612e8d565b60405180910390f35b61066660048036038101906106619190612941565b611bc0565b005b60606003805461067790613405565b80601f01602080910402602001604051908101604052809291908181526020018280546106a390613405565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e610707611d6c565b8484611d74565b6001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b600061076430610b06565b65befe6f672000610775919061332f565b905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006107ab848484611f3f565b60006107be856107b9611d6c565b611b15565b905082811015610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa906130b9565b60405180910390fd5b6108208561080f611d6c565b858461081b919061332f565b611d74565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561085957600094505b610922600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856121be565b60019150509392505050565b60006008905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ff61096a611d6c565b848460016000610978611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109fa91906132a8565b611d74565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613179565b60405180910390fd5b610aa630848461079e565b905092915050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aeb338261241b565b50565b600a6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b56611d6c565b73ffffffffffffffffffffffffffffffffffffffff16610b74611022565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc1906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613119565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610d26576000915050611004565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610d75919061332f565b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610e0a57600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610df0919061332f565b815260200190815260200160002060010154915050611004565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610e85576000915050611004565b600080600183610e95919061332f565b90505b81811115610faa57600060028383610eb0919061332f565b610eba91906132fe565b82610ec5919061332f565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610f7957806020015195505050505050611004565b86816000015163ffffffff161015610f9357819350610fa3565b600182610fa0919061332f565b92505b5050610e98565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111345750600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156111335750611104611022565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b5b611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613039565b60405180910390fd5b61117c8161258c565b5050565b60606004805461118f90613405565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb90613405565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b5050505050905090565b60008060016000611221611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d5906131d9565b60405180910390fd5b6112fb6112e9611d6c565b8585846112f6919061332f565b611d74565b600191505092915050565b6000611310611d6c565b73ffffffffffffffffffffffffffffffffffffffff1661132e611022565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613099565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613079565b60405180910390fd5b61148e8261258c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561152557506114f6611022565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061157d5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390613199565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613159565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061168461167d611d6c565b8484611f3f565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116bd57600092505b61178d600660006116cc611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121be565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116117eb57600061184c565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183611839919061332f565b8152602001908152602001600020600101545b915050919050565b6000807f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611880610668565b8051906020012061188f61260d565b306040516020016118a39493929190612eed565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016118f49493929190612ea8565b60405160208183030381529060405280519060200120905060008282604051602001611921929190612e20565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161195e9493929190612f32565b6020604051602081039080840390855afa158015611980573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613059565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a4c90613437565b919050558a14611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612fb9565b60405180910390fd5b88421115611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb906131b9565b60405180910390fd5b611ade818c61241b565b809450505050509695505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b611bc8611d6c565b73ffffffffffffffffffffffffffffffffffffffff16611be6611022565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390612fd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613139565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90612ff9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3291906131f9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906130f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690612f99565b60405180910390fd5b61202a83838361261a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613019565b60405180910390fd5b81816120bc919061332f565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214c91906132a8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b091906131f9565b60405180910390a350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121fa5750600081115b1561241657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461230a576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116122875760006122e8565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122d5919061332f565b8152602001908152602001600020600101545b9050600083826122f8919061332f565b90506123068684848461261f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612415576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116123925760006123f3565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846123e0919061332f565b8152602001908152602001600020600101545b90506000838261240391906132a8565b90506124118584848461261f565b5050505b5b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061248a84610b06565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46125868284836121be565b50505050565b600061259782612884565b6125a45760009050612608565b60006125af30610b06565b90506125c2308465befe6f672000611d74565b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809150505b919050565b6000804690508091505090565b505050565b600061264343604051806060016040528060338152602001613a8160339139612897565b90506000841180156126cf57508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876126a5919061332f565b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561273d5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612723919061332f565b81526020019081526020016000206001018190555061282d565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050506001846127e991906132a8565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612875929190613214565b60405180910390a25050505050565b600080823b905060008111915050919050565b6000640100000000831082906128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9190612f77565b60405180910390fd5b5082905092915050565b6000813590506128fc81613a24565b92915050565b60008135905061291181613a3b565b92915050565b60008135905061292681613a52565b92915050565b60008135905061293b81613a69565b92915050565b60006020828403121561295357600080fd5b6000612961848285016128ed565b91505092915050565b6000806040838503121561297d57600080fd5b600061298b858286016128ed565b925050602061299c858286016128ed565b9150509250929050565b6000806000606084860312156129bb57600080fd5b60006129c9868287016128ed565b93505060206129da868287016128ed565b92505060406129eb86828701612917565b9150509250925092565b60008060408385031215612a0857600080fd5b6000612a16858286016128ed565b9250506020612a2785828601612917565b9150509250929050565b60008060008060008060c08789031215612a4a57600080fd5b6000612a5889828a016128ed565b9650506020612a6989828a01612917565b9550506040612a7a89828a01612917565b9450506060612a8b89828a0161292c565b9350506080612a9c89828a01612902565b92505060a0612aad89828a01612902565b9150509295509295509295565b612ac381613363565b82525050565b612ad281613375565b82525050565b612ae181613381565b82525050565b612af8612af382613381565b613480565b82525050565b6000612b0982613281565b612b13818561328c565b9350612b238185602086016133d2565b612b2c81613517565b840191505092915050565b6000612b4460238361328c565b9150612b4f82613528565b604082019050919050565b6000612b6760218361328c565b9150612b7282613577565b604082019050919050565b6000612b8a60268361328c565b9150612b95826135c6565b604082019050919050565b6000612bad60228361328c565b9150612bb882613615565b604082019050919050565b6000612bd060028361329d565b9150612bdb82613664565b600282019050919050565b6000612bf360268361328c565b9150612bfe8261368d565b604082019050919050565b6000612c16601b8361328c565b9150612c21826136dc565b602082019050919050565b6000612c3960258361328c565b9150612c4482613705565b604082019050919050565b6000612c5c60148361328c565b9150612c6782613754565b602082019050919050565b6000612c7f60138361328c565b9150612c8a8261377d565b602082019050919050565b6000612ca260288361328c565b9150612cad826137a6565b604082019050919050565b6000612cc560208361328c565b9150612cd0826137f5565b602082019050919050565b6000612ce860258361328c565b9150612cf38261381e565b604082019050919050565b6000612d0b60268361328c565b9150612d168261386d565b604082019050919050565b6000612d2e60248361328c565b9150612d39826138bc565b604082019050919050565b6000612d51600f8361328c565b9150612d5c8261390b565b602082019050919050565b6000612d74600e8361328c565b9150612d7f82613934565b602082019050919050565b6000612d97600d8361328c565b9150612da28261395d565b602082019050919050565b6000612dba60258361328c565b9150612dc582613986565b604082019050919050565b6000612ddd60258361328c565b9150612de8826139d5565b604082019050919050565b612dfc816133ab565b82525050565b612e0b816133b5565b82525050565b612e1a816133c5565b82525050565b6000612e2b82612bc3565b9150612e378285612ae7565b602082019150612e478284612ae7565b6020820191508190509392505050565b6000602082019050612e6c6000830184612aba565b92915050565b6000602082019050612e876000830184612ac9565b92915050565b6000602082019050612ea26000830184612ad8565b92915050565b6000608082019050612ebd6000830187612ad8565b612eca6020830186612aba565b612ed76040830185612df3565b612ee46060830184612df3565b95945050505050565b6000608082019050612f026000830187612ad8565b612f0f6020830186612ad8565b612f1c6040830185612df3565b612f296060830184612aba565b95945050505050565b6000608082019050612f476000830187612ad8565b612f546020830186612e11565b612f616040830185612ad8565b612f6e6060830184612ad8565b95945050505050565b60006020820190508181036000830152612f918184612afe565b905092915050565b60006020820190508181036000830152612fb281612b37565b9050919050565b60006020820190508181036000830152612fd281612b5a565b9050919050565b60006020820190508181036000830152612ff281612b7d565b9050919050565b6000602082019050818103600083015261301281612ba0565b9050919050565b6000602082019050818103600083015261303281612be6565b9050919050565b6000602082019050818103600083015261305281612c09565b9050919050565b6000602082019050818103600083015261307281612c2c565b9050919050565b6000602082019050818103600083015261309281612c4f565b9050919050565b600060208201905081810360008301526130b281612c72565b9050919050565b600060208201905081810360008301526130d281612c95565b9050919050565b600060208201905081810360008301526130f281612cb8565b9050919050565b6000602082019050818103600083015261311281612cdb565b9050919050565b6000602082019050818103600083015261313281612cfe565b9050919050565b6000602082019050818103600083015261315281612d21565b9050919050565b6000602082019050818103600083015261317281612d44565b9050919050565b6000602082019050818103600083015261319281612d67565b9050919050565b600060208201905081810360008301526131b281612d8a565b9050919050565b600060208201905081810360008301526131d281612dad565b9050919050565b600060208201905081810360008301526131f281612dd0565b9050919050565b600060208201905061320e6000830184612df3565b92915050565b60006040820190506132296000830185612df3565b6132366020830184612df3565b9392505050565b60006040820190506132526000830185612e02565b61325f6020830184612df3565b9392505050565b600060208201905061327b6000830184612e11565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006132b3826133ab565b91506132be836133ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132f3576132f261348a565b5b828201905092915050565b6000613309826133ab565b9150613314836133ab565b925082613324576133236134b9565b5b828204905092915050565b600061333a826133ab565b9150613345836133ab565b9250828210156133585761335761348a565b5b828203905092915050565b600061336e8261338b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156133f05780820151818401526020810190506133d5565b838111156133ff576000848401525b50505050565b6000600282049050600182168061341d57607f821691505b60208210811415613431576134306134e8565b5b50919050565b6000613442826133ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134755761347461348a565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a204e4545442054494d454c4f434b204f52204f574e45520000000000600082015250565b7f44424c3a3a64656c656761746542795369673a20696e76616c6964207369676e60008201527f6174757265000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a204e4f542056414c4944204d494e4552000000000000000000000000600082015250565b7f44424c3a20494e4954204f4e4c59204f4e434500000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a3a6765745072696f72566f7465733a206e6f7420796574206465746560008201527f726d696e65640000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c494420414444524553530000000000000000000000000000000000600082015250565b7f44454c3a4f4e4c59204d494e4552000000000000000000000000000000000000600082015250565b7f4e4f205045524d495353494f4e00000000000000000000000000000000000000600082015250565b7f44424c3a3a64656c656761746542795369673a207369676e617475726520657860008201527f7069726564000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613a2d81613363565b8114613a3857600080fd5b50565b613a4481613381565b8114613a4f57600080fd5b50565b613a5b816133ab565b8114613a6657600080fd5b50565b613a72816133c5565b8114613a7d57600080fd5b5056fe44424c3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a264697066735822122014d7616cd2d6622934f4dcb582da0c930de082d8968540769dcb7bd97de78a6464736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a890c910116100a2578063d33219b411610071578063d33219b4146105e0578063dd62ed3e146105fe578063e7a324dc1461062e578063f2fde38b1461064c576101da565b8063a890c91014610534578063a9059cbb14610550578063b4b5ea5714610580578063c3cda520146105b0576101da565b80639258bddd116100de5780639258bddd1461049a57806395d89b41146104b6578063a457c2d7146104d4578063a82009e014610504576101da565b8063782d6fe11461041c5780637ecebe001461044c5780638da5cb5b1461047c576101da565b8063349dc3291161017c5780635c19a95c1161014b5780635c19a95c146103965780636fcfff45146103b257806370a08231146103e2578063715018a614610412576101da565b8063349dc329146102e8578063395093511461030657806340c10f1914610336578063587cde1e14610366576101da565b806318160ddd116101b857806318160ddd1461025e57806320606b701461027c57806323b872dd1461029a578063313ce567146102ca576101da565b806306fdde03146101df578063095ea7b3146101fd5780630cdfebfa1461022d575b600080fd5b6101e7610668565b6040516101f49190612f77565b60405180910390f35b610217600480360381019061021291906129f5565b6106fa565b6040516102249190612e72565b60405180910390f35b610247600480360381019061024291906129f5565b610718565b60405161025592919061323d565b60405180910390f35b610266610759565b60405161027391906131f9565b60405180910390f35b61028461077a565b6040516102919190612e8d565b60405180910390f35b6102b460048036038101906102af91906129a6565b61079e565b6040516102c19190612e72565b60405180910390f35b6102d261092e565b6040516102df9190613266565b60405180910390f35b6102f0610937565b6040516102fd9190612e57565b60405180910390f35b610320600480360381019061031b91906129f5565b61095d565b60405161032d9190612e72565b60405180910390f35b610350600480360381019061034b91906129f5565b610a09565b60405161035d9190612e72565b60405180910390f35b610380600480360381019061037b9190612941565b610aae565b60405161038d9190612e57565b60405180910390f35b6103b060048036038101906103ab9190612941565b610ae1565b005b6103cc60048036038101906103c79190612941565b610aee565b6040516103d991906131f9565b60405180910390f35b6103fc60048036038101906103f79190612941565b610b06565b60405161040991906131f9565b60405180910390f35b61041a610b4e565b005b610436600480360381019061043191906129f5565b610c8b565b60405161044391906131f9565b60405180910390f35b61046660048036038101906104619190612941565b61100a565b60405161047391906131f9565b60405180910390f35b610484611022565b6040516104919190612e57565b60405180910390f35b6104b460048036038101906104af9190612941565b61104c565b005b6104be611180565b6040516104cb9190612f77565b60405180910390f35b6104ee60048036038101906104e991906129f5565b611212565b6040516104fb9190612e72565b60405180910390f35b61051e60048036038101906105199190612941565b611306565b60405161052b91906131f9565b60405180910390f35b61054e60048036038101906105499190612941565b611495565b005b61056a600480360381019061056591906129f5565b611670565b6040516105779190612e72565b60405180910390f35b61059a60048036038101906105959190612941565b611797565b6040516105a791906131f9565b60405180910390f35b6105ca60048036038101906105c59190612a31565b611854565b6040516105d79190612e57565b60405180910390f35b6105e8611aef565b6040516105f59190612e57565b60405180910390f35b6106186004803603810190610613919061296a565b611b15565b60405161062591906131f9565b60405180910390f35b610636611b9c565b6040516106439190612e8d565b60405180910390f35b61066660048036038101906106619190612941565b611bc0565b005b60606003805461067790613405565b80601f01602080910402602001604051908101604052809291908181526020018280546106a390613405565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e610707611d6c565b8484611d74565b6001905092915050565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b600061076430610b06565b65befe6f672000610775919061332f565b905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006107ab848484611f3f565b60006107be856107b9611d6c565b611b15565b905082811015610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa906130b9565b60405180910390fd5b6108208561080f611d6c565b858461081b919061332f565b611d74565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561085957600094505b610922600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856121be565b60019150509392505050565b60006008905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ff61096a611d6c565b848460016000610978611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109fa91906132a8565b611d74565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613179565b60405180910390fd5b610aa630848461079e565b905092915050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aeb338261241b565b50565b600a6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b56611d6c565b73ffffffffffffffffffffffffffffffffffffffff16610b74611022565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc1906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613119565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610d26576000915050611004565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610d75919061332f565b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610e0a57600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610df0919061332f565b815260200190815260200160002060010154915050611004565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610e85576000915050611004565b600080600183610e95919061332f565b90505b81811115610faa57600060028383610eb0919061332f565b610eba91906132fe565b82610ec5919061332f565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610f7957806020015195505050505050611004565b86816000015163ffffffff161015610f9357819350610fa3565b600182610fa0919061332f565b92505b5050610e98565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111345750600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156111335750611104611022565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b5b611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613039565b60405180910390fd5b61117c8161258c565b5050565b60606004805461118f90613405565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb90613405565b80156112085780601f106111dd57610100808354040283529160200191611208565b820191906000526020600020905b8154815290600101906020018083116111eb57829003601f168201915b5050505050905090565b60008060016000611221611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d5906131d9565b60405180910390fd5b6112fb6112e9611d6c565b8585846112f6919061332f565b611d74565b600191505092915050565b6000611310611d6c565b73ffffffffffffffffffffffffffffffffffffffff1661132e611022565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613099565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613079565b60405180910390fd5b61148e8261258c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561152557506114f6611022565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061157d5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390613199565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613159565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061168461167d611d6c565b8484611f3f565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116bd57600092505b61178d600660006116cc611d6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121be565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116117eb57600061184c565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183611839919061332f565b8152602001908152602001600020600101545b915050919050565b6000807f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611880610668565b8051906020012061188f61260d565b306040516020016118a39493929190612eed565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016118f49493929190612ea8565b60405160208183030381529060405280519060200120905060008282604051602001611921929190612e20565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161195e9493929190612f32565b6020604051602081039080840390855afa158015611980573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613059565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a4c90613437565b919050558a14611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612fb9565b60405180910390fd5b88421115611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb906131b9565b60405180910390fd5b611ade818c61241b565b809450505050509695505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b611bc8611d6c565b73ffffffffffffffffffffffffffffffffffffffff16611be6611022565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca390612fd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613139565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90612ff9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3291906131f9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906130f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690612f99565b60405180910390fd5b61202a83838361261a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613019565b60405180910390fd5b81816120bc919061332f565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461214c91906132a8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b091906131f9565b60405180910390a350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121fa5750600081115b1561241657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461230a576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116122875760006122e8565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846122d5919061332f565b8152602001908152602001600020600101545b9050600083826122f8919061332f565b90506123068684848461261f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612415576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008082116123925760006123f3565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846123e0919061332f565b8152602001908152602001600020600101545b90506000838261240391906132a8565b90506124118584848461261f565b5050505b5b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061248a84610b06565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46125868284836121be565b50505050565b600061259782612884565b6125a45760009050612608565b60006125af30610b06565b90506125c2308465befe6f672000611d74565b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809150505b919050565b6000804690508091505090565b505050565b600061264343604051806060016040528060338152602001613a8160339139612897565b90506000841180156126cf57508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876126a5919061332f565b815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b1561273d5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612723919061332f565b81526020019081526020016000206001018190555061282d565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050506001846127e991906132a8565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612875929190613214565b60405180910390a25050505050565b600080823b905060008111915050919050565b6000640100000000831082906128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9190612f77565b60405180910390fd5b5082905092915050565b6000813590506128fc81613a24565b92915050565b60008135905061291181613a3b565b92915050565b60008135905061292681613a52565b92915050565b60008135905061293b81613a69565b92915050565b60006020828403121561295357600080fd5b6000612961848285016128ed565b91505092915050565b6000806040838503121561297d57600080fd5b600061298b858286016128ed565b925050602061299c858286016128ed565b9150509250929050565b6000806000606084860312156129bb57600080fd5b60006129c9868287016128ed565b93505060206129da868287016128ed565b92505060406129eb86828701612917565b9150509250925092565b60008060408385031215612a0857600080fd5b6000612a16858286016128ed565b9250506020612a2785828601612917565b9150509250929050565b60008060008060008060c08789031215612a4a57600080fd5b6000612a5889828a016128ed565b9650506020612a6989828a01612917565b9550506040612a7a89828a01612917565b9450506060612a8b89828a0161292c565b9350506080612a9c89828a01612902565b92505060a0612aad89828a01612902565b9150509295509295509295565b612ac381613363565b82525050565b612ad281613375565b82525050565b612ae181613381565b82525050565b612af8612af382613381565b613480565b82525050565b6000612b0982613281565b612b13818561328c565b9350612b238185602086016133d2565b612b2c81613517565b840191505092915050565b6000612b4460238361328c565b9150612b4f82613528565b604082019050919050565b6000612b6760218361328c565b9150612b7282613577565b604082019050919050565b6000612b8a60268361328c565b9150612b95826135c6565b604082019050919050565b6000612bad60228361328c565b9150612bb882613615565b604082019050919050565b6000612bd060028361329d565b9150612bdb82613664565b600282019050919050565b6000612bf360268361328c565b9150612bfe8261368d565b604082019050919050565b6000612c16601b8361328c565b9150612c21826136dc565b602082019050919050565b6000612c3960258361328c565b9150612c4482613705565b604082019050919050565b6000612c5c60148361328c565b9150612c6782613754565b602082019050919050565b6000612c7f60138361328c565b9150612c8a8261377d565b602082019050919050565b6000612ca260288361328c565b9150612cad826137a6565b604082019050919050565b6000612cc560208361328c565b9150612cd0826137f5565b602082019050919050565b6000612ce860258361328c565b9150612cf38261381e565b604082019050919050565b6000612d0b60268361328c565b9150612d168261386d565b604082019050919050565b6000612d2e60248361328c565b9150612d39826138bc565b604082019050919050565b6000612d51600f8361328c565b9150612d5c8261390b565b602082019050919050565b6000612d74600e8361328c565b9150612d7f82613934565b602082019050919050565b6000612d97600d8361328c565b9150612da28261395d565b602082019050919050565b6000612dba60258361328c565b9150612dc582613986565b604082019050919050565b6000612ddd60258361328c565b9150612de8826139d5565b604082019050919050565b612dfc816133ab565b82525050565b612e0b816133b5565b82525050565b612e1a816133c5565b82525050565b6000612e2b82612bc3565b9150612e378285612ae7565b602082019150612e478284612ae7565b6020820191508190509392505050565b6000602082019050612e6c6000830184612aba565b92915050565b6000602082019050612e876000830184612ac9565b92915050565b6000602082019050612ea26000830184612ad8565b92915050565b6000608082019050612ebd6000830187612ad8565b612eca6020830186612aba565b612ed76040830185612df3565b612ee46060830184612df3565b95945050505050565b6000608082019050612f026000830187612ad8565b612f0f6020830186612ad8565b612f1c6040830185612df3565b612f296060830184612aba565b95945050505050565b6000608082019050612f476000830187612ad8565b612f546020830186612e11565b612f616040830185612ad8565b612f6e6060830184612ad8565b95945050505050565b60006020820190508181036000830152612f918184612afe565b905092915050565b60006020820190508181036000830152612fb281612b37565b9050919050565b60006020820190508181036000830152612fd281612b5a565b9050919050565b60006020820190508181036000830152612ff281612b7d565b9050919050565b6000602082019050818103600083015261301281612ba0565b9050919050565b6000602082019050818103600083015261303281612be6565b9050919050565b6000602082019050818103600083015261305281612c09565b9050919050565b6000602082019050818103600083015261307281612c2c565b9050919050565b6000602082019050818103600083015261309281612c4f565b9050919050565b600060208201905081810360008301526130b281612c72565b9050919050565b600060208201905081810360008301526130d281612c95565b9050919050565b600060208201905081810360008301526130f281612cb8565b9050919050565b6000602082019050818103600083015261311281612cdb565b9050919050565b6000602082019050818103600083015261313281612cfe565b9050919050565b6000602082019050818103600083015261315281612d21565b9050919050565b6000602082019050818103600083015261317281612d44565b9050919050565b6000602082019050818103600083015261319281612d67565b9050919050565b600060208201905081810360008301526131b281612d8a565b9050919050565b600060208201905081810360008301526131d281612dad565b9050919050565b600060208201905081810360008301526131f281612dd0565b9050919050565b600060208201905061320e6000830184612df3565b92915050565b60006040820190506132296000830185612df3565b6132366020830184612df3565b9392505050565b60006040820190506132526000830185612e02565b61325f6020830184612df3565b9392505050565b600060208201905061327b6000830184612e11565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006132b3826133ab565b91506132be836133ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132f3576132f261348a565b5b828201905092915050565b6000613309826133ab565b9150613314836133ab565b925082613324576133236134b9565b5b828204905092915050565b600061333a826133ab565b9150613345836133ab565b9250828210156133585761335761348a565b5b828203905092915050565b600061336e8261338b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156133f05780820151818401526020810190506133d5565b838111156133ff576000848401525b50505050565b6000600282049050600182168061341d57607f821691505b60208210811415613431576134306134e8565b5b50919050565b6000613442826133ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134755761347461348a565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a204e4545442054494d454c4f434b204f52204f574e45520000000000600082015250565b7f44424c3a3a64656c656761746542795369673a20696e76616c6964207369676e60008201527f6174757265000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a204e4f542056414c4944204d494e4552000000000000000000000000600082015250565b7f44424c3a20494e4954204f4e4c59204f4e434500000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f44424c3a3a6765745072696f72566f7465733a206e6f7420796574206465746560008201527f726d696e65640000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c494420414444524553530000000000000000000000000000000000600082015250565b7f44454c3a4f4e4c59204d494e4552000000000000000000000000000000000000600082015250565b7f4e4f205045524d495353494f4e00000000000000000000000000000000000000600082015250565b7f44424c3a3a64656c656761746542795369673a207369676e617475726520657860008201527f7069726564000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613a2d81613363565b8114613a3857600080fd5b50565b613a4481613381565b8114613a4f57600080fd5b50565b613a5b816133ab565b8114613a6657600080fd5b50565b613a72816133c5565b8114613a7d57600080fd5b5056fe44424c3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a264697066735822122014d7616cd2d6622934f4dcb582da0c930de082d8968540769dcb7bd97de78a6464736f6c63430008040033

Deployed Bytecode Sourcemap

17310:12839:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10448:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17785:71;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;19254:126;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18048:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22331:660;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19162:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17490:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11930:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20941:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17438:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23139:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17925:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9572:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5616:148;;;:::i;:::-;;25368:1225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18462:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4965:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20199:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8518:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12648:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19443:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19827;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21987:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24713:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23675:837;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17517:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10150:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18264:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5919:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8308:91;8353:13;8386:5;8379:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:91;:::o;10448:169::-;10531:4;10548:39;10557:12;:10;:12::i;:::-;10571:7;10580:6;10548:8;:39::i;:::-;10605:4;10598:11;;10448:169;;;;:::o;17785:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19254:126::-;19307:7;19348:24;19366:4;19348:9;:24::i;:::-;19334:11;:38;;;;:::i;:::-;19327:45;;19254:126;:::o;18048:122::-;18090:80;18048:122;:::o;22331:660::-;22429:4;22446:36;22456:6;22464:9;22475:6;22446:9;:36::i;:::-;22495:24;22522:30;22532:6;22539:12;:10;:12::i;:::-;22522:9;:30::i;:::-;22495:57;;22591:6;22571:16;:26;;22563:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22653:57;22662:6;22670:12;:10;:12::i;:::-;22703:6;22684:16;:25;;;;:::i;:::-;22653:8;:57::i;:::-;22829:4;22811:23;;:6;:23;;;22808:73;;;22867:1;22850:19;;22808:73;22898:63;22913:9;:17;22923:6;22913:17;;;;;;;;;;;;;;;;;;;;;;;;;22932:9;:20;22942:9;22932:20;;;;;;;;;;;;;;;;;;;;;;;;;22954:6;22898:14;:63::i;:::-;22979:4;22972:11;;;22331:660;;;;;:::o;19162:84::-;19212:5;19237:1;19230:8;;19162:84;:::o;17490:20::-;;;;;;;;;;;;;:::o;11930:215::-;12018:4;12035:80;12044:12;:10;:12::i;:::-;12058:7;12104:10;12067:11;:25;12079:12;:10;:12::i;:::-;12067:25;;;;;;;;;;;;;;;:34;12093:7;12067:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12035:8;:80::i;:::-;12133:4;12126:11;;11930:215;;;;:::o;20941:199::-;21006:4;21044:5;;;;;;;;;;;21030:19;;:10;:19;;;21022:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;21086;21107:4;21114:8;21124:7;21086:12;:46::i;:::-;21079:53;;20941:199;;;;:::o;17438:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;23139:102::-;23201:32;23211:10;23223:9;23201;:32::i;:::-;23139:102;:::o;17925:50::-;;;;;;;;;;;;;;;;;:::o;9572:127::-;9646:7;9673:9;:18;9683:7;9673:18;;;;;;;;;;;;;;;;9666:25;;9572:127;;;:::o;5616:148::-;5196:12;:10;:12::i;:::-;5185:23;;:7;:5;:7::i;:::-;:23;;;5177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5723:1:::1;5686:40;;5707:6;;;;;;;;;;;5686:40;;;;;;;;;;;;5754:1;5737:6;;:19;;;;;;;;;;;;;;;;;;5616:148::o:0;25368:1225::-;25450:7;25492:12;25478:11;:26;25470:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25560:20;25583:14;:23;25598:7;25583:23;;;;;;;;;;;;;;;;25560:46;;25637:1;25621:12;:17;25617:58;;;25662:1;25655:8;;;;;25617:58;25787:11;25735;:20;25747:7;25735:20;;;;;;;;;;;;;;;:38;25771:1;25756:12;:16;;;;:::i;:::-;25735:38;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;25731:147;;25822:11;:20;25834:7;25822:20;;;;;;;;;;;;;;;:38;25858:1;25843:12;:16;;;;:::i;:::-;25822:38;;;;;;;;;;;:44;;;25815:51;;;;;25731:147;25975:11;25939;:20;25951:7;25939:20;;;;;;;;;;;;;;;:23;25960:1;25939:23;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;25935:88;;;26010:1;26003:8;;;;;25935:88;26035:13;26063;26094:1;26079:12;:16;;;;:::i;:::-;26063:32;;26106:429;26121:5;26113;:13;26106:429;;;26143:14;26186:1;26177:5;26169;:13;;;;:::i;:::-;26168:19;;;;:::i;:::-;26160:5;:27;;;;:::i;:::-;26143:44;;26229:20;26252:11;:20;26264:7;26252:20;;;;;;;;;;;;;;;:28;26273:6;26252:28;;;;;;;;;;;26229:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26315:11;26299:2;:12;;;:27;;;26295:229;;;26354:2;:8;;;26347:15;;;;;;;;;26295:229;26403:11;26388:2;:12;;;:26;;;26384:140;;;26443:6;26435:14;;26384:140;;;26507:1;26498:6;:10;;;;:::i;:::-;26490:18;;26384:140;26106:429;;;;;26552:11;:20;26564:7;26552:20;;;;;;;;;;;;;;;:27;26573:5;26552:27;;;;;;;;;;;:33;;;26545:40;;;;;25368:1225;;;;;:::o;18462:42::-;;;;;;;;;;;;;;;;;:::o;4965:87::-;5011:7;5038:6;;;;;;;;;;;5031:13;;4965:87;:::o;20199:223::-;20283:8;;;;;;;;;;;20269:22;;:10;:22;;;:75;;;;20316:1;20296:22;;:8;;;;;;;;;;;:22;;;:47;;;;;20336:7;:5;:7::i;:::-;20322:21;;:10;:21;;;20296:47;20269:75;20261:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;20387:27;20400:13;20387:12;:27::i;:::-;;20199:223;:::o;8518:95::-;8565:13;8598:7;8591:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8518:95;:::o;12648:377::-;12741:4;12758:24;12785:11;:25;12797:12;:10;:12::i;:::-;12785:25;;;;;;;;;;;;;;;:34;12811:7;12785:34;;;;;;;;;;;;;;;;12758:61;;12858:15;12838:16;:35;;12830:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12926:67;12935:12;:10;:12::i;:::-;12949:7;12977:15;12958:16;:34;;;;:::i;:::-;12926:8;:67::i;:::-;13013:4;13006:11;;;12648:377;;;;:::o;19443:264::-;19513:7;5196:12;:10;:12::i;:::-;5185:23;;:7;:5;:7::i;:::-;:23;;;5177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19557:1:::1;19540:19;;:5;;;;;;;;;;;:19;;;19532:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;19627:1;19602:27;;:13;:27;;;;19594:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19672:27;19685:13;19672:12;:27::i;:::-;19665:34;;19443:264:::0;;;:::o;19827:::-;19919:1;19899:22;;:8;;;;;;;;;;;:22;;;:47;;;;;19939:7;:5;:7::i;:::-;19925:21;;:10;:21;;;19899:47;19898:75;;;;19965:8;;;;;;;;;;;19951:22;;:10;:22;;;19898:75;19890:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;20031:1;20010:23;;:9;:23;;;;20002:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20074:9;20063:8;;:20;;;;;;;;;;;;;;;;;;19827:264;:::o;21987:336::-;22065:4;22082:42;22092:12;:10;:12::i;:::-;22106:9;22117:6;22082:9;:42::i;:::-;22159:4;22138:26;;:9;:26;;;22135:79;;;22200:1;22180:22;;22135:79;22224:69;22239:9;:23;22249:12;:10;:12::i;:::-;22239:23;;;;;;;;;;;;;;;;;;;;;;;;;22264:9;:20;22274:9;22264:20;;;;;;;;;;;;;;;;;;;;;;;;;22286:6;22224:14;:69::i;:::-;22311:4;22304:11;;21987:336;;;;:::o;24713:224::-;24778:7;24798:20;24821:14;:23;24836:7;24821:23;;;;;;;;;;;;;;;;24798:46;;24877:1;24862:12;:16;:67;;24928:1;24862:67;;;24881:11;:20;24893:7;24881:20;;;;;;;;;;;;;;;:38;24917:1;24902:12;:16;;;;:::i;:::-;24881:38;;;;;;;;;;;:44;;;24862:67;24855:74;;;24713:224;;;:::o;23675:837::-;23789:7;23808:23;18090:80;23888:6;:4;:6::i;:::-;23872:24;;;;;;23898:12;:10;:12::i;:::-;23920:4;23844:82;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23834:93;;;;;;23808:119;;23938:18;18310:71;24001:9;24012:5;24019:6;23969:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23959:68;;;;;;23938:89;;24038:14;24094:15;24111:10;24065:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24055:68;;;;;;24038:85;;24134:17;24154:26;24164:6;24172:1;24175;24178;24154:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24134:46;;24220:1;24199:23;;:9;:23;;;;24191:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:6;:17;24299:9;24292:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;24283:5;:28;24275:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24387:6;24368:15;:25;;24360:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24446:31;24456:9;24467;24446;:31::i;:::-;24495:9;24488:16;;;;;;23675:837;;;;;;;;:::o;17517:23::-;;;;;;;;;;;;;:::o;10150:151::-;10239:7;10266:11;:18;10278:5;10266:18;;;;;;;;;;;;;;;:27;10285:7;10266:27;;;;;;;;;;;;;;;;10259:34;;10150:151;;;;:::o;18264:117::-;18310:71;18264:117;:::o;5919:244::-;5196:12;:10;:12::i;:::-;5185:23;;:7;:5;:7::i;:::-;:23;;;5177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6028:1:::1;6008:22;;:8;:22;;;;6000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6118:8;6089:38;;6110:6;;;;;;;;;;;6089:38;;;;;;;;;;;;6147:8;6138:6;;:17;;;;;;;;;;;;;;;;;;5919:244:::0;:::o;630:98::-;683:7;710:10;703:17;;630:98;:::o;16004:346::-;16123:1;16106:19;;:5;:19;;;;16098:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16204:1;16185:21;;:7;:21;;;;16177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16288:6;16258:11;:18;16270:5;16258:18;;;;;;;;;;;;;;;:27;16277:7;16258:27;;;;;;;;;;;;;;;:36;;;;16326:7;16310:32;;16319:5;16310:32;;;16335:6;16310:32;;;;;;:::i;:::-;;;;;;;;16004:346;;;:::o;13515:604::-;13639:1;13621:20;;:6;:20;;;;13613:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13723:1;13702:23;;:9;:23;;;;13694:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13778:47;13799:6;13807:9;13818:6;13778:20;:47::i;:::-;13838:21;13862:9;:17;13872:6;13862:17;;;;;;;;;;;;;;;;13838:41;;13915:6;13898:13;:23;;13890:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14011:6;13995:13;:22;;;;:::i;:::-;13975:9;:17;13985:6;13975:17;;;;;;;;;;;;;;;:42;;;;14052:6;14028:9;:20;14038:9;14028:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14093:9;14076:35;;14085:6;14076:35;;;14104:6;14076:35;;;;;;:::i;:::-;;;;;;;;13515:604;;;;:::o;27745:891::-;27851:6;27841:16;;:6;:16;;;;:30;;;;;27870:1;27861:6;:10;27841:30;27837:792;;;27910:1;27892:20;;:6;:20;;;27888:379;;27949:17;27969:14;:22;27984:6;27969:22;;;;;;;;;;;;;;;;27949:42;;28010:17;28042:1;28030:9;:13;:60;;28089:1;28030:60;;;28046:11;:19;28058:6;28046:19;;;;;;;;;;;;;;;:34;28078:1;28066:9;:13;;;;:::i;:::-;28046:34;;;;;;;;;;;:40;;;28030:60;28010:80;;28125:17;28157:6;28145:9;:18;;;;:::i;:::-;28125:38;;28194:57;28211:6;28219:9;28230;28241;28194:16;:57::i;:::-;27888:379;;;;28305:1;28287:20;;:6;:20;;;28283:335;;28328:17;28348:14;:22;28363:6;28348:22;;;;;;;;;;;;;;;;28328:42;;28389:17;28421:1;28409:9;:13;:60;;28468:1;28409:60;;;28425:11;:19;28437:6;28425:19;;;;;;;;;;;;;;;:34;28457:1;28445:9;:13;;;;:::i;:::-;28425:34;;;;;;;;;;;:40;;;28409:60;28389:80;;28488:17;28520:6;28508:9;:18;;;;:::i;:::-;28488:38;;28545:57;28562:6;28570:9;28581;28592;28545:16;:57::i;:::-;28283:335;;;;27837:792;27745:891;;;:::o;26601:377::-;26678:23;26704:9;:20;26714:9;26704:20;;;;;;;;;;;;;;;;;;;;;;;;;26678:46;;26735:24;26762:20;26772:9;26762;:20::i;:::-;26735:47;;26816:9;26793;:20;26803:9;26793:20;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26887:9;26843:54;;26870:15;26843:54;;26859:9;26843:54;;;;;;;;;;;;26910:60;26925:15;26942:9;26953:16;26910:14;:60::i;:::-;26601:377;;;;:::o;20501:357::-;20564:7;20641:25;20652:13;20641:10;:25::i;:::-;20637:39;;20675:1;20668:8;;;;20637:39;20687:15;20705:24;20723:4;20705:9;:24::i;:::-;20687:42;;20740:53;20757:4;20764:13;20779;20740:8;:53::i;:::-;20812:13;20804:5;;:21;;;;;;;;;;;;;;;;;;20843:7;20836:14;;;20501:357;;;;:::o;29990:156::-;30035:7;30055:15;30103:9;30092:20;;30131:7;30124:14;;;29990:156;:::o;16953:92::-;;;;:::o;28644:631::-;28765:18;28786:75;28793:12;28786:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;28765:96;;28891:1;28876:12;:16;:85;;;;;28950:11;28896:65;;:11;:22;28908:9;28896:22;;;;;;;;;;;;;;;:40;28934:1;28919:12;:16;;;;:::i;:::-;28896:40;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;28876:85;28872:329;;;29025:8;28976:11;:22;28988:9;28976:22;;;;;;;;;;;;;;;:40;29014:1;28999:12;:16;;;;:::i;:::-;28976:40;;;;;;;;;;;:46;;:57;;;;28872:329;;;29101:33;;;;;;;;29112:11;29101:33;;;;;;29125:8;29101:33;;;29062:11;:22;29074:9;29062:22;;;;;;;;;;;;;;;:36;29085:12;29062:36;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29190:1;29175:12;:16;;;;:::i;:::-;29147:14;:25;29162:9;29147:25;;;;;;;;;;;;;;;:44;;;;28872:329;29237:9;29216:51;;;29248:8;29258;29216:51;;;;;;;:::i;:::-;;;;;;;;28644:631;;;;;:::o;21557:422::-;21617:4;21825:12;21936:7;21924:20;21916:28;;21970:1;21963:4;:8;21956:15;;;21557:422;;;:::o;29283:161::-;29358:6;29389:5;29385:1;:9;29396:12;29377:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29434:1;29420:16;;29283:161;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;343:5;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:135::-;486:5;524:6;511:20;502:29;;540:31;565:5;540:31;:::i;:::-;492:85;;;;:::o;583:262::-;642:6;691:2;679:9;670:7;666:23;662:32;659:2;;;707:1;704;697:12;659:2;750:1;775:53;820:7;811:6;800:9;796:22;775:53;:::i;:::-;765:63;;721:117;649:196;;;;:::o;851:407::-;919:6;927;976:2;964:9;955:7;951:23;947:32;944:2;;;992:1;989;982:12;944:2;1035:1;1060:53;1105:7;1096:6;1085:9;1081:22;1060:53;:::i;:::-;1050:63;;1006:117;1162:2;1188:53;1233:7;1224:6;1213:9;1209:22;1188:53;:::i;:::-;1178:63;;1133:118;934:324;;;;;:::o;1264:552::-;1341:6;1349;1357;1406:2;1394:9;1385:7;1381:23;1377:32;1374:2;;;1422:1;1419;1412:12;1374:2;1465:1;1490:53;1535:7;1526:6;1515:9;1511:22;1490:53;:::i;:::-;1480:63;;1436:117;1592:2;1618:53;1663:7;1654:6;1643:9;1639:22;1618:53;:::i;:::-;1608:63;;1563:118;1720:2;1746:53;1791:7;1782:6;1771:9;1767:22;1746:53;:::i;:::-;1736:63;;1691:118;1364:452;;;;;:::o;1822:407::-;1890:6;1898;1947:2;1935:9;1926:7;1922:23;1918:32;1915:2;;;1963:1;1960;1953:12;1915:2;2006:1;2031:53;2076:7;2067:6;2056:9;2052:22;2031:53;:::i;:::-;2021:63;;1977:117;2133:2;2159:53;2204:7;2195:6;2184:9;2180:22;2159:53;:::i;:::-;2149:63;;2104:118;1905:324;;;;;:::o;2235:986::-;2337:6;2345;2353;2361;2369;2377;2426:3;2414:9;2405:7;2401:23;2397:33;2394:2;;;2443:1;2440;2433:12;2394:2;2486:1;2511:53;2556:7;2547:6;2536:9;2532:22;2511:53;:::i;:::-;2501:63;;2457:117;2613:2;2639:53;2684:7;2675:6;2664:9;2660:22;2639:53;:::i;:::-;2629:63;;2584:118;2741:2;2767:53;2812:7;2803:6;2792:9;2788:22;2767:53;:::i;:::-;2757:63;;2712:118;2869:2;2895:51;2938:7;2929:6;2918:9;2914:22;2895:51;:::i;:::-;2885:61;;2840:116;2995:3;3022:53;3067:7;3058:6;3047:9;3043:22;3022:53;:::i;:::-;3012:63;;2966:119;3124:3;3151:53;3196:7;3187:6;3176:9;3172:22;3151:53;:::i;:::-;3141:63;;3095:119;2384:837;;;;;;;;:::o;3227:118::-;3314:24;3332:5;3314:24;:::i;:::-;3309:3;3302:37;3292:53;;:::o;3351:109::-;3432:21;3447:5;3432:21;:::i;:::-;3427:3;3420:34;3410:50;;:::o;3466:118::-;3553:24;3571:5;3553:24;:::i;:::-;3548:3;3541:37;3531:53;;:::o;3590:157::-;3695:45;3715:24;3733:5;3715:24;:::i;:::-;3695:45;:::i;:::-;3690:3;3683:58;3673:74;;:::o;3753:364::-;3841:3;3869:39;3902:5;3869:39;:::i;:::-;3924:71;3988:6;3983:3;3924:71;:::i;:::-;3917:78;;4004:52;4049:6;4044:3;4037:4;4030:5;4026:16;4004:52;:::i;:::-;4081:29;4103:6;4081:29;:::i;:::-;4076:3;4072:39;4065:46;;3845:272;;;;;:::o;4123:366::-;4265:3;4286:67;4350:2;4345:3;4286:67;:::i;:::-;4279:74;;4362:93;4451:3;4362:93;:::i;:::-;4480:2;4475:3;4471:12;4464:19;;4269:220;;;:::o;4495:366::-;4637:3;4658:67;4722:2;4717:3;4658:67;:::i;:::-;4651:74;;4734:93;4823:3;4734:93;:::i;:::-;4852:2;4847:3;4843:12;4836:19;;4641:220;;;:::o;4867:366::-;5009:3;5030:67;5094:2;5089:3;5030:67;:::i;:::-;5023:74;;5106:93;5195:3;5106:93;:::i;:::-;5224:2;5219:3;5215:12;5208:19;;5013:220;;;:::o;5239:366::-;5381:3;5402:67;5466:2;5461:3;5402:67;:::i;:::-;5395:74;;5478:93;5567:3;5478:93;:::i;:::-;5596:2;5591:3;5587:12;5580:19;;5385:220;;;:::o;5611:400::-;5771:3;5792:84;5874:1;5869:3;5792:84;:::i;:::-;5785:91;;5885:93;5974:3;5885:93;:::i;:::-;6003:1;5998:3;5994:11;5987:18;;5775:236;;;:::o;6017:366::-;6159:3;6180:67;6244:2;6239:3;6180:67;:::i;:::-;6173:74;;6256:93;6345:3;6256:93;:::i;:::-;6374:2;6369:3;6365:12;6358:19;;6163:220;;;:::o;6389:366::-;6531:3;6552:67;6616:2;6611:3;6552:67;:::i;:::-;6545:74;;6628:93;6717:3;6628:93;:::i;:::-;6746:2;6741:3;6737:12;6730:19;;6535:220;;;:::o;6761:366::-;6903:3;6924:67;6988:2;6983:3;6924:67;:::i;:::-;6917:74;;7000:93;7089:3;7000:93;:::i;:::-;7118:2;7113:3;7109:12;7102:19;;6907:220;;;:::o;7133:366::-;7275:3;7296:67;7360:2;7355:3;7296:67;:::i;:::-;7289:74;;7372:93;7461:3;7372:93;:::i;:::-;7490:2;7485:3;7481:12;7474:19;;7279:220;;;:::o;7505:366::-;7647:3;7668:67;7732:2;7727:3;7668:67;:::i;:::-;7661:74;;7744:93;7833:3;7744:93;:::i;:::-;7862:2;7857:3;7853:12;7846:19;;7651:220;;;:::o;7877:366::-;8019:3;8040:67;8104:2;8099:3;8040:67;:::i;:::-;8033:74;;8116:93;8205:3;8116:93;:::i;:::-;8234:2;8229:3;8225:12;8218:19;;8023:220;;;:::o;8249:366::-;8391:3;8412:67;8476:2;8471:3;8412:67;:::i;:::-;8405:74;;8488:93;8577:3;8488:93;:::i;:::-;8606:2;8601:3;8597:12;8590:19;;8395:220;;;:::o;8621:366::-;8763:3;8784:67;8848:2;8843:3;8784:67;:::i;:::-;8777:74;;8860:93;8949:3;8860:93;:::i;:::-;8978:2;8973:3;8969:12;8962:19;;8767:220;;;:::o;8993:366::-;9135:3;9156:67;9220:2;9215:3;9156:67;:::i;:::-;9149:74;;9232:93;9321:3;9232:93;:::i;:::-;9350:2;9345:3;9341:12;9334:19;;9139:220;;;:::o;9365:366::-;9507:3;9528:67;9592:2;9587:3;9528:67;:::i;:::-;9521:74;;9604:93;9693:3;9604:93;:::i;:::-;9722:2;9717:3;9713:12;9706:19;;9511:220;;;:::o;9737:366::-;9879:3;9900:67;9964:2;9959:3;9900:67;:::i;:::-;9893:74;;9976:93;10065:3;9976:93;:::i;:::-;10094:2;10089:3;10085:12;10078:19;;9883:220;;;:::o;10109:366::-;10251:3;10272:67;10336:2;10331:3;10272:67;:::i;:::-;10265:74;;10348:93;10437:3;10348:93;:::i;:::-;10466:2;10461:3;10457:12;10450:19;;10255:220;;;:::o;10481:366::-;10623:3;10644:67;10708:2;10703:3;10644:67;:::i;:::-;10637:74;;10720:93;10809:3;10720:93;:::i;:::-;10838:2;10833:3;10829:12;10822:19;;10627:220;;;:::o;10853:366::-;10995:3;11016:67;11080:2;11075:3;11016:67;:::i;:::-;11009:74;;11092:93;11181:3;11092:93;:::i;:::-;11210:2;11205:3;11201:12;11194:19;;10999:220;;;:::o;11225:366::-;11367:3;11388:67;11452:2;11447:3;11388:67;:::i;:::-;11381:74;;11464:93;11553:3;11464:93;:::i;:::-;11582:2;11577:3;11573:12;11566:19;;11371:220;;;:::o;11597:118::-;11684:24;11702:5;11684:24;:::i;:::-;11679:3;11672:37;11662:53;;:::o;11721:115::-;11806:23;11823:5;11806:23;:::i;:::-;11801:3;11794:36;11784:52;;:::o;11842:112::-;11925:22;11941:5;11925:22;:::i;:::-;11920:3;11913:35;11903:51;;:::o;11960:663::-;12201:3;12223:148;12367:3;12223:148;:::i;:::-;12216:155;;12381:75;12452:3;12443:6;12381:75;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12494:75;12565:3;12556:6;12494:75;:::i;:::-;12594:2;12589:3;12585:12;12578:19;;12614:3;12607:10;;12205:418;;;;;:::o;12629:222::-;12722:4;12760:2;12749:9;12745:18;12737:26;;12773:71;12841:1;12830:9;12826:17;12817:6;12773:71;:::i;:::-;12727:124;;;;:::o;12857:210::-;12944:4;12982:2;12971:9;12967:18;12959:26;;12995:65;13057:1;13046:9;13042:17;13033:6;12995:65;:::i;:::-;12949:118;;;;:::o;13073:222::-;13166:4;13204:2;13193:9;13189:18;13181:26;;13217:71;13285:1;13274:9;13270:17;13261:6;13217:71;:::i;:::-;13171:124;;;;:::o;13301:553::-;13478:4;13516:3;13505:9;13501:19;13493:27;;13530:71;13598:1;13587:9;13583:17;13574:6;13530:71;:::i;:::-;13611:72;13679:2;13668:9;13664:18;13655:6;13611:72;:::i;:::-;13693;13761:2;13750:9;13746:18;13737:6;13693:72;:::i;:::-;13775;13843:2;13832:9;13828:18;13819:6;13775:72;:::i;:::-;13483:371;;;;;;;:::o;13860:553::-;14037:4;14075:3;14064:9;14060:19;14052:27;;14089:71;14157:1;14146:9;14142:17;14133:6;14089:71;:::i;:::-;14170:72;14238:2;14227:9;14223:18;14214:6;14170:72;:::i;:::-;14252;14320:2;14309:9;14305:18;14296:6;14252:72;:::i;:::-;14334;14402:2;14391:9;14387:18;14378:6;14334:72;:::i;:::-;14042:371;;;;;;;:::o;14419:545::-;14592:4;14630:3;14619:9;14615:19;14607:27;;14644:71;14712:1;14701:9;14697:17;14688:6;14644:71;:::i;:::-;14725:68;14789:2;14778:9;14774:18;14765:6;14725:68;:::i;:::-;14803:72;14871:2;14860:9;14856:18;14847:6;14803:72;:::i;:::-;14885;14953:2;14942:9;14938:18;14929:6;14885:72;:::i;:::-;14597:367;;;;;;;:::o;14970:313::-;15083:4;15121:2;15110:9;15106:18;15098:26;;15170:9;15164:4;15160:20;15156:1;15145:9;15141:17;15134:47;15198:78;15271:4;15262:6;15198:78;:::i;:::-;15190:86;;15088:195;;;;:::o;15289:419::-;15455:4;15493:2;15482:9;15478:18;15470:26;;15542:9;15536:4;15532:20;15528:1;15517:9;15513:17;15506:47;15570:131;15696:4;15570:131;:::i;:::-;15562:139;;15460:248;;;:::o;15714:419::-;15880:4;15918:2;15907:9;15903:18;15895:26;;15967:9;15961:4;15957:20;15953:1;15942:9;15938:17;15931:47;15995:131;16121:4;15995:131;:::i;:::-;15987:139;;15885:248;;;:::o;16139:419::-;16305:4;16343:2;16332:9;16328:18;16320:26;;16392:9;16386:4;16382:20;16378:1;16367:9;16363:17;16356:47;16420:131;16546:4;16420:131;:::i;:::-;16412:139;;16310:248;;;:::o;16564:419::-;16730:4;16768:2;16757:9;16753:18;16745:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16845:131;16971:4;16845:131;:::i;:::-;16837:139;;16735:248;;;:::o;16989:419::-;17155:4;17193:2;17182:9;17178:18;17170:26;;17242:9;17236:4;17232:20;17228:1;17217:9;17213:17;17206:47;17270:131;17396:4;17270:131;:::i;:::-;17262:139;;17160:248;;;:::o;17414:419::-;17580:4;17618:2;17607:9;17603:18;17595:26;;17667:9;17661:4;17657:20;17653:1;17642:9;17638:17;17631:47;17695:131;17821:4;17695:131;:::i;:::-;17687:139;;17585:248;;;:::o;17839:419::-;18005:4;18043:2;18032:9;18028:18;18020:26;;18092:9;18086:4;18082:20;18078:1;18067:9;18063:17;18056:47;18120:131;18246:4;18120:131;:::i;:::-;18112:139;;18010:248;;;:::o;18264:419::-;18430:4;18468:2;18457:9;18453:18;18445:26;;18517:9;18511:4;18507:20;18503:1;18492:9;18488:17;18481:47;18545:131;18671:4;18545:131;:::i;:::-;18537:139;;18435:248;;;:::o;18689:419::-;18855:4;18893:2;18882:9;18878:18;18870:26;;18942:9;18936:4;18932:20;18928:1;18917:9;18913:17;18906:47;18970:131;19096:4;18970:131;:::i;:::-;18962:139;;18860:248;;;:::o;19114:419::-;19280:4;19318:2;19307:9;19303:18;19295:26;;19367:9;19361:4;19357:20;19353:1;19342:9;19338:17;19331:47;19395:131;19521:4;19395:131;:::i;:::-;19387:139;;19285:248;;;:::o;19539:419::-;19705:4;19743:2;19732:9;19728:18;19720:26;;19792:9;19786:4;19782:20;19778:1;19767:9;19763:17;19756:47;19820:131;19946:4;19820:131;:::i;:::-;19812:139;;19710:248;;;:::o;19964:419::-;20130:4;20168:2;20157:9;20153:18;20145:26;;20217:9;20211:4;20207:20;20203:1;20192:9;20188:17;20181:47;20245:131;20371:4;20245:131;:::i;:::-;20237:139;;20135:248;;;:::o;20389:419::-;20555:4;20593:2;20582:9;20578:18;20570:26;;20642:9;20636:4;20632:20;20628:1;20617:9;20613:17;20606:47;20670:131;20796:4;20670:131;:::i;:::-;20662:139;;20560:248;;;:::o;20814:419::-;20980:4;21018:2;21007:9;21003:18;20995:26;;21067:9;21061:4;21057:20;21053:1;21042:9;21038:17;21031:47;21095:131;21221:4;21095:131;:::i;:::-;21087:139;;20985:248;;;:::o;21239:419::-;21405:4;21443:2;21432:9;21428:18;21420:26;;21492:9;21486:4;21482:20;21478:1;21467:9;21463:17;21456:47;21520:131;21646:4;21520:131;:::i;:::-;21512:139;;21410:248;;;:::o;21664:419::-;21830:4;21868:2;21857:9;21853:18;21845:26;;21917:9;21911:4;21907:20;21903:1;21892:9;21888:17;21881:47;21945:131;22071:4;21945:131;:::i;:::-;21937:139;;21835:248;;;:::o;22089:419::-;22255:4;22293:2;22282:9;22278:18;22270:26;;22342:9;22336:4;22332:20;22328:1;22317:9;22313:17;22306:47;22370:131;22496:4;22370:131;:::i;:::-;22362:139;;22260:248;;;:::o;22514:419::-;22680:4;22718:2;22707:9;22703:18;22695:26;;22767:9;22761:4;22757:20;22753:1;22742:9;22738:17;22731:47;22795:131;22921:4;22795:131;:::i;:::-;22787:139;;22685:248;;;:::o;22939:419::-;23105:4;23143:2;23132:9;23128:18;23120:26;;23192:9;23186:4;23182:20;23178:1;23167:9;23163:17;23156:47;23220:131;23346:4;23220:131;:::i;:::-;23212:139;;23110:248;;;:::o;23364:222::-;23457:4;23495:2;23484:9;23480:18;23472:26;;23508:71;23576:1;23565:9;23561:17;23552:6;23508:71;:::i;:::-;23462:124;;;;:::o;23592:332::-;23713:4;23751:2;23740:9;23736:18;23728:26;;23764:71;23832:1;23821:9;23817:17;23808:6;23764:71;:::i;:::-;23845:72;23913:2;23902:9;23898:18;23889:6;23845:72;:::i;:::-;23718:206;;;;;:::o;23930:328::-;24049:4;24087:2;24076:9;24072:18;24064:26;;24100:69;24166:1;24155:9;24151:17;24142:6;24100:69;:::i;:::-;24179:72;24247:2;24236:9;24232:18;24223:6;24179:72;:::i;:::-;24054:204;;;;;:::o;24264:214::-;24353:4;24391:2;24380:9;24376:18;24368:26;;24404:67;24468:1;24457:9;24453:17;24444:6;24404:67;:::i;:::-;24358:120;;;;:::o;24484:99::-;24536:6;24570:5;24564:12;24554:22;;24543:40;;;:::o;24589:169::-;24673:11;24707:6;24702:3;24695:19;24747:4;24742:3;24738:14;24723:29;;24685:73;;;;:::o;24764:148::-;24866:11;24903:3;24888:18;;24878:34;;;;:::o;24918:305::-;24958:3;24977:20;24995:1;24977:20;:::i;:::-;24972:25;;25011:20;25029:1;25011:20;:::i;:::-;25006:25;;25165:1;25097:66;25093:74;25090:1;25087:81;25084:2;;;25171:18;;:::i;:::-;25084:2;25215:1;25212;25208:9;25201:16;;24962:261;;;;:::o;25229:185::-;25269:1;25286:20;25304:1;25286:20;:::i;:::-;25281:25;;25320:20;25338:1;25320:20;:::i;:::-;25315:25;;25359:1;25349:2;;25364:18;;:::i;:::-;25349:2;25406:1;25403;25399:9;25394:14;;25271:143;;;;:::o;25420:191::-;25460:4;25480:20;25498:1;25480:20;:::i;:::-;25475:25;;25514:20;25532:1;25514:20;:::i;:::-;25509:25;;25553:1;25550;25547:8;25544:2;;;25558:18;;:::i;:::-;25544:2;25603:1;25600;25596:9;25588:17;;25465:146;;;;:::o;25617:96::-;25654:7;25683:24;25701:5;25683:24;:::i;:::-;25672:35;;25662:51;;;:::o;25719:90::-;25753:7;25796:5;25789:13;25782:21;25771:32;;25761:48;;;:::o;25815:77::-;25852:7;25881:5;25870:16;;25860:32;;;:::o;25898:126::-;25935:7;25975:42;25968:5;25964:54;25953:65;;25943:81;;;:::o;26030:77::-;26067:7;26096:5;26085:16;;26075:32;;;:::o;26113:93::-;26149:7;26189:10;26182:5;26178:22;26167:33;;26157:49;;;:::o;26212:86::-;26247:7;26287:4;26280:5;26276:16;26265:27;;26255:43;;;:::o;26304:307::-;26372:1;26382:113;26396:6;26393:1;26390:13;26382:113;;;26481:1;26476:3;26472:11;26466:18;26462:1;26457:3;26453:11;26446:39;26418:2;26415:1;26411:10;26406:15;;26382:113;;;26513:6;26510:1;26507:13;26504:2;;;26593:1;26584:6;26579:3;26575:16;26568:27;26504:2;26353:258;;;;:::o;26617:320::-;26661:6;26698:1;26692:4;26688:12;26678:22;;26745:1;26739:4;26735:12;26766:18;26756:2;;26822:4;26814:6;26810:17;26800:27;;26756:2;26884;26876:6;26873:14;26853:18;26850:38;26847:2;;;26903:18;;:::i;:::-;26847:2;26668:269;;;;:::o;26943:233::-;26982:3;27005:24;27023:5;27005:24;:::i;:::-;26996:33;;27051:66;27044:5;27041:77;27038:2;;;27121:18;;:::i;:::-;27038:2;27168:1;27161:5;27157:13;27150:20;;26986:190;;;:::o;27182:79::-;27221:7;27250:5;27239:16;;27229:32;;;:::o;27267:180::-;27315:77;27312:1;27305:88;27412:4;27409:1;27402:15;27436:4;27433:1;27426:15;27453:180;27501:77;27498:1;27491:88;27598:4;27595:1;27588:15;27622:4;27619:1;27612:15;27639:180;27687:77;27684:1;27677:88;27784:4;27781:1;27774:15;27808:4;27805:1;27798:15;27825:102;27866:6;27917:2;27913:7;27908:2;27901:5;27897:14;27893:28;27883:38;;27873:54;;;:::o;27933:222::-;28073:34;28069:1;28061:6;28057:14;28050:58;28142:5;28137:2;28129:6;28125:15;28118:30;28039:116;:::o;28161:220::-;28301:34;28297:1;28289:6;28285:14;28278:58;28370:3;28365:2;28357:6;28353:15;28346:28;28267:114;:::o;28387:225::-;28527:34;28523:1;28515:6;28511:14;28504:58;28596:8;28591:2;28583:6;28579:15;28572:33;28493:119;:::o;28618:221::-;28758:34;28754:1;28746:6;28742:14;28735:58;28827:4;28822:2;28814:6;28810:15;28803:29;28724:115;:::o;28845:214::-;28985:66;28981:1;28973:6;28969:14;28962:90;28951:108;:::o;29065:225::-;29205:34;29201:1;29193:6;29189:14;29182:58;29274:8;29269:2;29261:6;29257:15;29250:33;29171:119;:::o;29296:177::-;29436:29;29432:1;29424:6;29420:14;29413:53;29402:71;:::o;29479:224::-;29619:34;29615:1;29607:6;29603:14;29596:58;29688:7;29683:2;29675:6;29671:15;29664:32;29585:118;:::o;29709:170::-;29849:22;29845:1;29837:6;29833:14;29826:46;29815:64;:::o;29885:169::-;30025:21;30021:1;30013:6;30009:14;30002:45;29991:63;:::o;30060:227::-;30200:34;30196:1;30188:6;30184:14;30177:58;30269:10;30264:2;30256:6;30252:15;30245:35;30166:121;:::o;30293:182::-;30433:34;30429:1;30421:6;30417:14;30410:58;30399:76;:::o;30481:224::-;30621:34;30617:1;30609:6;30605:14;30598:58;30690:7;30685:2;30677:6;30673:15;30666:32;30587:118;:::o;30711:225::-;30851:34;30847:1;30839:6;30835:14;30828:58;30920:8;30915:2;30907:6;30903:15;30896:33;30817:119;:::o;30942:223::-;31082:34;31078:1;31070:6;31066:14;31059:58;31151:6;31146:2;31138:6;31134:15;31127:31;31048:117;:::o;31171:165::-;31311:17;31307:1;31299:6;31295:14;31288:41;31277:59;:::o;31342:164::-;31482:16;31478:1;31470:6;31466:14;31459:40;31448:58;:::o;31512:163::-;31652:15;31648:1;31640:6;31636:14;31629:39;31618:57;:::o;31681:224::-;31821:34;31817:1;31809:6;31805:14;31798:58;31890:7;31885:2;31877:6;31873:15;31866:32;31787:118;:::o;31911:224::-;32051:34;32047:1;32039:6;32035:14;32028:58;32120:7;32115:2;32107:6;32103:15;32096:32;32017:118;:::o;32141:122::-;32214:24;32232:5;32214:24;:::i;:::-;32207:5;32204:35;32194:2;;32253:1;32250;32243:12;32194:2;32184:79;:::o;32269:122::-;32342:24;32360:5;32342:24;:::i;:::-;32335:5;32332:35;32322:2;;32381:1;32378;32371:12;32322:2;32312:79;:::o;32397:122::-;32470:24;32488:5;32470:24;:::i;:::-;32463:5;32460:35;32450:2;;32509:1;32506;32499:12;32450:2;32440:79;:::o;32525:118::-;32596:22;32612:5;32596:22;:::i;:::-;32589:5;32586:33;32576:2;;32633:1;32630;32623:12;32576:2;32566:77;:::o

Swarm Source

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