Token XEND

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
700,308.858227 XEND

Holders:
99 addresses

Transfers:
-

Contract:
0x86775d0B80B3df266AF5377dB34Ba8f318d715ec0x86775d0B80B3df266AF5377dB34Ba8f318d715ec

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x515fa05c767309B93f6b41E282934f05c628CC75

Contract Name:
AnyswapV5ERC20

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at BscScan.com on 2021-08-25
*/

/**
 *Submitted for verification at BscScan.com on 2021-08-25
*/

/**
 *Submitted for verification at FtmScan.com on 2021-08-24
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.8.6;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);

    /// @dev Allow for CREATE2 and call `init` from a factory.
    function init(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault, bool _vaultOnly) external;
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV5ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8 public override decimals;

    address public underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool public vaultOnly;

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

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

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        vaultOnly = enabled;
    }

    function setMinter(address _auth) external onlyVault {
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function setVault(address _vault) external onlyVault {
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
        emit LogRevokeAuth(_auth, block.timestamp);
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }

    function getAllMintersLength() external view returns (uint) {
        return minters.length;
    }

    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeVault(vault, pendingVault, delayVault);
        return true;
    }

    function changeMPCOwner(address newVault) public onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeMPCOwner(vault, pendingVault, delayVault);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        require(!vaultOnly, "AnyswapV4ERC20: onlyAuth");
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    event LogAddAuth(address indexed auth, uint timestamp);
    event LogRevokeAuth(address indexed auth, uint timestamp);

    function init(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault, bool _vaultOnly) external override {
        require(vault == address(0x0), "AnyswapV3ERC20: already initialized");
        require(_vault != address(0x0), "AnyswapV3ERC20: zero vault address");

        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        vaultOnly = _vaultOnly;

        vault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
        IERC20(underlying).safeTransferFrom(target, address(this), value);
        return _deposit(value, to);
    }

    function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
        return _deposit(value, to);
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return 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 {
        require(account != address(0), "ERC20: mint to the zero address");

        uint256 newTotalSupply = _totalSupply + amount;
        require(newTotalSupply >= _totalSupply, "AnyswapV3ERC20: total supply overflow");

        _totalSupply = newTotalSupply;
        balanceOf[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 {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 balance = balanceOf[account];
        require(balance >= amount, "AnyswapV3ERC20: burn amount exceeds balance");

        balanceOf[account] = balance - amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hash));
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract Security Audit

Contract ABI

[{"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":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogRevokeAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMintersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"bool","name":"_vaultOnly","type":"bool"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040526202a30060075534801561001757600080fd5b50612e70806100276000396000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c806370a08231116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610730578063f954734e14610738578063fbfa77cf1461074b578063fca3b5aa1461075e57600080fd5b8063d93f2445146106ea578063dd62ed3e146106f2578063ec126c771461071d57600080fd5b8063cae9ca51116100de578063cae9ca51146106a9578063cfbd4885146106bc578063d0e30db0146106cf578063d505accf146106d757600080fd5b8063bebbf4d01461067a578063c30812401461068d578063c4b740f51461069657600080fd5b806391c5df4911610171578063a045442c1161014b578063a045442c1461061c578063a9059cbb14610631578063aa271e1a14610644578063b6b55f251461066757600080fd5b806391c5df49146105ee57806395d89b41146106015780639dc29fac1461060957600080fd5b806370a08231146105775780637ecebe001461059757806381a37c18146105b75780638623ec7b146105ca57806387689e28146105dd5780638da5cb5b146105e657600080fd5b80633644e51511610292578063605629d6116102305780636817031b1161020a5780636817031b146105305780636a42b8f8146105435780636e553f651461054c5780636f307dc31461055f57600080fd5b8063605629d6146104f757806360e232a91461050a578063628d6cba1461051d57600080fd5b806340c10f191161026c57806340c10f191461049e5780635165c892146104b157806352113ba7146104b95780635f9b105d146104e457600080fd5b80633644e5151461047a5780633ccfd60b146104835780634000aea01461048b57600080fd5b80630d707df8116102ff5780632e1a7d4d116102d95780632e1a7d4d1461040e57806330adf81f14610421578063313ce5671461044857806331edc10a1461046757600080fd5b80630d707df8146103e957806318160ddd146103f357806323b872dd146103fb57600080fd5b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306e0c52c146103a457806306fdde03146103c1578063095ea7b3146103d6575b600080fd5b61035761035236600461279d565b610771565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f366004612a08565b6107c7565b6006546103b19060ff1681565b6040519015158152602001610361565b6103c96107db565b6040516103619190612bd6565b6103b16103e4366004612773565b610869565b6103f16108c3565b005b600554610357565b6103b16104093660046126ca565b61097f565b61035761041c3660046129d6565b610b6a565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6002546104559060ff1681565b60405160ff9091168152602001610361565b6103f161047536600461292b565b610b7d565b61035760035481565b610357610e59565b6103b16104993660046127d9565b610e7a565b6103b16104ac366004612773565b610fd3565b600954610357565b600d546104cc906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103b16104f236600461267c565b611015565b6103b1610505366004612706565b6110ea565b6103b161051836600461267c565b6112fa565b6103b161052b366004612a08565b6113ce565b6103f161053e36600461267c565b61148c565b61035760075481565b61035761055a366004612a08565b6114f2565b6002546104cc9061010090046001600160a01b031681565b61035761058536600461267c565b60046020526000908152604090205481565b6103576105a536600461267c565b600f6020526000908152604090205481565b6103576105c5366004612860565b61151c565b6104cc6105d83660046129d6565b6115c4565b610357600e5481565b6104cc6115ee565b600b546104cc906001600160a01b031681565b6103c96115f8565b6103b1610617366004612773565b611605565b610624611664565b6040516103619190612b89565b6103b161063f366004612773565b6116c6565b6103b161065236600461267c565b60086020526000908152604090205460ff1681565b6103576106753660046129d6565b61179c565b610357610688366004612a08565b6117c6565b610357600c5481565b6103f16106a43660046128cc565b611800565b6103b16106b73660046127d9565b61184b565b6103f16106ca36600461267c565b611927565b6103576119bc565b6103f16106e5366004612706565b611a70565b6103f1611bde565b610357610700366004612697565b601060209081526000928352604080842090915290825290205481565b6103b161072b366004612906565b611c49565b6104cc611d0c565b610357610746366004612860565b611d37565b600a546104cc906001600160a01b031681565b6103f161076c36600461267c565b611dd6565b600061077b611d0c565b6001600160a01b0316336001600160a01b0316146107b45760405162461bcd60e51b81526004016107ab90612c09565b60405180910390fd5b6107bf848484611e3c565b949350505050565b60006107d4338484611e3c565b9392505050565b600080546107e890612d58565b80601f016020809104026020016040519081016040528092919081815260200182805461081490612d58565b80156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612e1b833981519152906108b29086815260200190565b60405180910390a350600192915050565b6108cb611d0c565b6001600160a01b0316336001600160a01b0316146108fb5760405162461bcd60e51b81526004016107ab90612c09565b600c5442101561090a57600080fd5b600b80546001600160a01b039081166000908152600860205260408120805460ff1916600190811790915592546009805494850181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b03191692909116919091179055565b60006001600160a01b0383161515806109a157506001600160a01b0383163014155b6109aa57600080fd5b6001600160a01b0384163314610aa4576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aa25782811015610a495760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ab565b6000610a558483612d15565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612e1b833981519152910160405180910390a3505b505b6001600160a01b03841660009081526004602052604090205482811015610add5760405162461bcd60e51b81526004016107ab90612c77565b610ae78382612d15565b6001600160a01b038087166000908152600460205260408082209390935590861681529081208054859290610b1d908490612cfd565b92505081905550836001600160a01b0316856001600160a01b0316600080516020612dfb83398151915285604051610b5791815260200190565b60405180910390a3506001949350505050565b6000610b77338333611e3c565b92915050565b600a546001600160a01b031615610be25760405162461bcd60e51b815260206004820152602360248201527f416e7973776170563345524332303a20616c726561647920696e697469616c696044820152621e995960ea1b60648201526084016107ab565b6001600160a01b038216610c435760405162461bcd60e51b815260206004820152602260248201527f416e7973776170563345524332303a207a65726f207661756c74206164647265604482015261737360f01b60648201526084016107ab565b8551610c5690600090602089019061253f565b508451610c6a90600190602088019061253f565b50600280546001600160a01b03851661010081026001600160a81b031990921660ff8816179190911790915515610d1d57826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd457600080fd5b505afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190612a2b565b60ff168460ff1614610d1d57600080fd5b6006805482151560ff1991821617909155600a80546001600160a01b0385166001600160a01b031991821681179092556000828152600860205260408082208054909516600190811790955560098054958601815582527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90940180549092169092179055905146917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f91610dd29190612a64565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060035550505050505050565b336000818152600460205260408120549091610e759181611e3c565b905090565b60006001600160a01b038516151580610e9c57506001600160a01b0385163014155b610ea557600080fd5b3360009081526004602052604090205484811015610ed55760405162461bcd60e51b81526004016107ab90612c77565b610edf8582612d15565b33600090815260046020526040808220929092556001600160a01b03881681529081208054879290610f12908490612cfd565b90915550506040518581526001600160a01b038716903390600080516020612dfb8339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610f77903390899089908990600401612b41565b602060405180830381600087803b158015610f9157600080fd5b505af1158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc991906128e9565b9695505050505050565b3360009081526008602052604081205460ff166110025760405162461bcd60e51b81526004016107ab90612cc6565b61100c8383611ea5565b50600192915050565b600061101f611d0c565b6001600160a01b0316336001600160a01b03161461104f5760405162461bcd60e51b81526004016107ab90612c09565b6001600160a01b0382166110755760405162461bcd60e51b81526004016107ab90612c40565b600d80546001600160a01b0319166001600160a01b03841617905560075461109d9042612cfd565b600e819055600d54600a546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a45060015b919050565b60008442111561113c5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ab565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b91908661118983612d93565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506111ea8982878787611fd4565b806111fd57506111fd89828787876120a9565b61120657600080fd5b6001600160a01b03881615158061122657506001600160a01b0388163014155b61122f57600080fd5b6001600160a01b038916600090815260046020526040902054878110156112685760405162461bcd60e51b81526004016107ab90612c77565b6112728882612d15565b6001600160a01b03808c1660009081526004602052604080822093909355908b16815290812080548a92906112a8908490612cfd565b92505081905550886001600160a01b03168a6001600160a01b0316600080516020612dfb8339815191528a6040516112e291815260200190565b60405180910390a35060019998505050505050505050565b6000611304611d0c565b6001600160a01b0316336001600160a01b0316146113345760405162461bcd60e51b81526004016107ab90612c09565b6001600160a01b03821661135a5760405162461bcd60e51b81526004016107ab90612c40565b600d80546001600160a01b0319166001600160a01b0384161790556007546113829042612cfd565b600e819055600d54600a546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b60065460009060ff161561141f5760405162461bcd60e51b8152602060048201526018602482015277082dcf2e6eec2e0ac688aa48664607440dedcd8f282eae8d60431b60448201526064016107ab565b6001600160a01b0382166114455760405162461bcd60e51b81526004016107ab90612c40565b61144f3384612149565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108b2565b611494611d0c565b6001600160a01b0316336001600160a01b0316146114c45760405162461bcd60e51b81526004016107ab90612c09565b600d80546001600160a01b0319166001600160a01b0383161790556007546114ec9042612cfd565b600e5550565b6002546000906115129061010090046001600160a01b031633308661228f565b6107d48383612300565b60025460405163d505accf60e01b815260009161010090046001600160a01b03169063d505accf9061155e908b9030908c908c908c908c908c90600401612b00565b600060405180830381600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b50506002546115ae925061010090046001600160a01b0316905089308a61228f565b6115b88783612300565b98975050505050505050565b600981815481106115d457600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610e75611d0c565b600180546107e890612d58565b3360009081526008602052604081205460ff166116345760405162461bcd60e51b81526004016107ab90612cc6565b6001600160a01b03831661165a5760405162461bcd60e51b81526004016107ab90612c40565b61100c8383612149565b606060098054806020026020016040519081016040528092919081815260200182805480156116bc57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161169e575b5050505050905090565b60006001600160a01b0383161515806116e857506001600160a01b0383163014155b6116f157600080fd5b33600090815260046020526040902054828110156117215760405162461bcd60e51b81526004016107ab90612c77565b61172b8382612d15565b33600090815260046020526040808220929092556001600160a01b0386168152908120805485929061175e908490612cfd565b90915550506040518381526001600160a01b038516903390600080516020612dfb833981519152906020015b60405180910390a35060019392505050565b6002546000906117bc9061010090046001600160a01b031633308561228f565b610b778233612300565b60006117d0611d0c565b6001600160a01b0316336001600160a01b0316146115125760405162461bcd60e51b81526004016107ab90612c09565b611808611d0c565b6001600160a01b0316336001600160a01b0316146118385760405162461bcd60e51b81526004016107ab90612c09565b6006805460ff1916911515919091179055565b3360008181526010602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612e1b833981519152906118949088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f906118cc903390889088908890600401612b41565b602060405180830381600087803b1580156118e657600080fd5b505af11580156118fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191e91906128e9565b95945050505050565b61192f611d0c565b6001600160a01b0316336001600160a01b03161461195f5760405162461bcd60e51b81526004016107ab90612c09565b6001600160a01b03811660008181526008602052604090819020805460ff19169055517f2d18a9f09e02bcffa2cd59b9cd214083ac22b7ba635e56c3260b87737f04a1c7906119b19042815260200190565b60405180910390a250565b6002546040516370a0823160e01b815233600482015260009182916101009091046001600160a01b0316906370a082319060240160206040518083038186803b158015611a0857600080fd5b505afa158015611a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4091906129ef565b600254909150611a609061010090046001600160a01b031633308461228f565b611a6a8133612300565b91505090565b83421115611ac05760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ab565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611b0d83612d93565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611b6e8882868686611fd4565b80611b815750611b8188828686866120a9565b611b8a57600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612e1b833981519152910160405180910390a35050505050505050565b611be6611d0c565b6001600160a01b0316336001600160a01b031614611c165760405162461bcd60e51b81526004016107ab90612c09565b600e54421015611c2557600080fd5b600d54600a80546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526008602052604081205460ff16611c785760405162461bcd60e51b81526004016107ab90612cc6565b60065460ff1615611cc65760405162461bcd60e51b8152602060048201526018602482015277082dcf2e6eec2e0ac688aa48664607440dedcd8f282eae8d60431b60448201526064016107ab565b611cd08383611ea5565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161178a91815260200190565b6000600e544210611d275750600d546001600160a01b031690565b50600a546001600160a01b031690565b60025460405163302b14eb60e11b815260009161010090046001600160a01b03169063605629d690611d79908b9030908c908c908c908c908c90600401612b00565b602060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcb91906128e9565b506115b88783612300565b611dde611d0c565b6001600160a01b0316336001600160a01b031614611e0e5760405162461bcd60e51b81526004016107ab90612c09565b600b80546001600160a01b0319166001600160a01b038316179055600754611e369042612cfd565b600c5550565b60025460009061010090046001600160a01b031615801590611e6e575060025461010090046001600160a01b03163014155b611e7757600080fd5b611e818484612149565b600254611e9d9061010090046001600160a01b0316838561234c565b509092915050565b6001600160a01b038216611efb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ab565b600081600554611f0b9190612cfd565b9050600554811015611f6d5760405162461bcd60e51b815260206004820152602560248201527f416e7973776170563345524332303a20746f74616c20737570706c79206f766560448201526472666c6f7760d81b60648201526084016107ab565b60058190556001600160a01b03831660009081526004602052604081208054849290611f9a908490612cfd565b90915550506040518281526001600160a01b03841690600090600080516020612dfb833981519152906020015b60405180910390a3505050565b60035460405161190160f01b6020820152602281019190915260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015612068573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906115b85750876001600160a01b0316816001600160a01b03161498975050505050505050565b60008061210e866003546040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c810191909152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001612046565b6001600160a01b0382166121a95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ab565b6001600160a01b038216600090815260046020526040902054818110156122265760405162461bcd60e51b815260206004820152602b60248201527f416e7973776170563345524332303a206275726e20616d6f756e74206578636560448201526a6564732062616c616e636560a81b60648201526084016107ab565b6122308282612d15565b6001600160a01b0384166000908152600460205260408120919091556005805484929061225e908490612d15565b90915550506040518281526000906001600160a01b03851690600080516020612dfb83398151915290602001611fc7565b6040516001600160a01b03808516602483015283166044820152606481018290526122fa9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612381565b50505050565b60025460009061010090046001600160a01b031615801590612332575060025461010090046001600160a01b03163014155b61233b57600080fd5b6123458284611ea5565b5090919050565b6040516001600160a01b03831660248201526044810182905261237c90849063a9059cbb60e01b906064016122c3565b505050565b612393826001600160a01b0316612508565b6123df5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ab565b600080836001600160a01b0316836040516123fa9190612a48565b6000604051808303816000865af19150503d8060008114612437576040519150601f19603f3d011682016040523d82523d6000602084013e61243c565b606091505b50915091508161248e5760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ab565b8051156122fa57808060200190518101906124a991906128e9565b6122fa5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ab565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906107bf5750141592915050565b82805461254b90612d58565b90600052602060002090601f01602090048101928261256d57600085556125b3565b82601f1061258657805160ff19168380011785556125b3565b828001600101855582156125b3579182015b828111156125b3578251825591602001919060010190612598565b506125bf9291506125c3565b5090565b5b808211156125bf57600081556001016125c4565b80356001600160a01b03811681146110e557600080fd5b600082601f83011261260057600080fd5b813567ffffffffffffffff8082111561261b5761261b612dc4565b604051601f8301601f19908116603f0116810190828211818310171561264357612643612dc4565b8160405283815286602085880101111561265c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561268e57600080fd5b6107d4826125d8565b600080604083850312156126aa57600080fd5b6126b3836125d8565b91506126c1602084016125d8565b90509250929050565b6000806000606084860312156126df57600080fd5b6126e8846125d8565b92506126f6602085016125d8565b9150604084013590509250925092565b600080600080600080600060e0888a03121561272157600080fd5b61272a886125d8565b9650612738602089016125d8565b95506040880135945060608801359350608088013561275681612deb565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561278657600080fd5b61278f836125d8565b946020939093013593505050565b6000806000606084860312156127b257600080fd5b6127bb846125d8565b9250602084013591506127d0604085016125d8565b90509250925092565b600080600080606085870312156127ef57600080fd5b6127f8856125d8565b935060208501359250604085013567ffffffffffffffff8082111561281c57600080fd5b818701915087601f83011261283057600080fd5b81358181111561283f57600080fd5b88602082850101111561285157600080fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561287b57600080fd5b612884886125d8565b9650602088013595506040880135945060608801356128a281612deb565b93506080880135925060a088013591506128be60c089016125d8565b905092959891949750929550565b6000602082840312156128de57600080fd5b81356107d481612dda565b6000602082840312156128fb57600080fd5b81516107d481612dda565b60008060006060848603121561291b57600080fd5b833592506126f6602085016125d8565b60008060008060008060c0878903121561294457600080fd5b863567ffffffffffffffff8082111561295c57600080fd5b6129688a838b016125ef565b9750602089013591508082111561297e57600080fd5b5061298b89828a016125ef565b955050604087013561299c81612deb565b93506129aa606088016125d8565b92506129b8608088016125d8565b915060a08701356129c881612dda565b809150509295509295509295565b6000602082840312156129e857600080fd5b5035919050565b600060208284031215612a0157600080fd5b5051919050565b60008060408385031215612a1b57600080fd5b823591506126c1602084016125d8565b600060208284031215612a3d57600080fd5b81516107d481612deb565b60008251612a5a818460208701612d2c565b9190910192915050565b600080835481600182811c915080831680612a8057607f831692505b6020808410821415612aa057634e487b7160e01b86526022600452602486fd5b818015612ab45760018114612ac557612af2565b60ff19861689528489019650612af2565b60008a81526020902060005b86811015612aea5781548b820152908501908301612ad1565b505084890196505b509498975050505050505050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b81811015612bca5783516001600160a01b031683529284019291840191600101612ba5565b50909695505050505050565b6020815260008251806020840152612bf5816040850160208701612d2c565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b60008219821115612d1057612d10612dae565b500190565b600082821015612d2757612d27612dae565b500390565b60005b83811015612d47578181015183820152602001612d2f565b838111156122fa5750506000910152565b600181811c90821680612d6c57607f821691505b60208210811415612d8d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612da757612da7612dae565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114612de857600080fd5b50565b60ff81168114612de857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212209a27b266cb7feeaede1024473263c644eae80bb16defe705c1541f17cd0f382164736f6c63430008060033

Deployed ByteCode Sourcemap

6150:19456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15186:149;;;;;;:::i;:::-;;:::i;:::-;;;12394:25:1;;;12382:2;12367:18;15186:149:0;;;;;;;;6502:136;;6546:92;6502:136;;15052:126;;;;;;:::i;:::-;;:::i;6940:21::-;;;;;;;;;;;;12221:14:1;;12214:22;12196:41;;12184:2;12169:18;6940:21:0;12151:92:1;6233:18:0;;;:::i;:::-;;;;;;;:::i;17285:265::-;;;;;;:::i;:::-;;:::i;8440:179::-;;;:::i;:::-;;13021:102;13103:12;;13021:102;;23526:927;;;;;;:::i;:::-;;:::i;14922:122::-;;;;;;:::i;:::-;;:::i;6358:137::-;;6400:95;6358:137;;6285:30;;;;;;;;;;;;20787:4:1;20775:17;;;20757:36;;20745:2;20730:18;6285:30:0;20712:87:1;11770:1146:0;;;;;;:::i;:::-;;:::i;6645:31::-;;;;;;14788:126;;;:::i;25080:523::-;;;;;;:::i;:::-;;:::i;9718:133::-;;;;;;:::i;:::-;;:::i;8948:100::-;9026:7;:14;8948:100;;7345:27;;;;;-1:-1:-1;;;;;7345:27:0;;;;;;-1:-1:-1;;;;;9451:32:1;;;9433:51;;9421:2;9406:18;7345:27:0;9388:102:1;9385:325:0;;;;;;:::i;:::-;;:::i;19883:938::-;;;;;;:::i;:::-;;:::i;9056:321::-;;;;;;:::i;:::-;;:::i;10349:327::-;;;;;;:::i;:::-;;:::i;8155:140::-;;;;;;:::i;:::-;;:::i;7020:29::-;;;;;;14240:193;;;;;;:::i;:::-;;:::i;6324:25::-;;;;;;;;-1:-1:-1;;;;;6324:25:0;;;6756:54;;;;;;:::i;:::-;;;;;;;;;;;;;;10948:51;;;;;;:::i;:::-;;;;;;;;;;;;;;13131:349;;;;;;:::i;:::-;;:::i;7167:24::-;;;;;;:::i;:::-;;:::i;7379:22::-;;;;;;7644:78;;;:::i;7278:28::-;;;;;-1:-1:-1;;;;;7278:28:0;;;6258:20;;;:::i;9859:207::-;;;;;;:::i;:::-;;:::i;8841:99::-;;;:::i;:::-;;;;;;;:::i;22199:438::-;;;;;;:::i;:::-;;:::i;7120:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14043:189;;;;;;:::i;:::-;;:::i;14441:127::-;;;;;;:::i;:::-;;:::i;7313:23::-;;;;;;7905:93;;;;;;:::i;:::-;;:::i;17971:356::-;;;;;;:::i;:::-;;:::i;8682:151::-;;;;;;:::i;:::-;;:::i;13789:246::-;;;:::i;19160:715::-;;;;;;:::i;:::-;;:::i;8303:129::-;;;:::i;11169:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10074:267;;;;;;:::i;:::-;;:::i;7730:167::-;;;:::i;13488:293::-;;;;;;:::i;:::-;;:::i;7249:20::-;;;;;-1:-1:-1;;;;;7249:20:0;;;8006:141;;;;;;:::i;:::-;;:::i;15186:149::-;15276:4;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;;;;;;;;;15300:27:::1;15310:4;15316:6;15324:2;15300:9;:27::i;:::-;15293:34:::0;15186:149;-1:-1:-1;;;;15186:149:0:o;15052:126::-;15113:4;15137:33;15147:10;15159:6;15167:2;15137:9;:33::i;:::-;15130:40;15052:126;-1:-1:-1;;;15052:126:0:o;6233:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17285:265::-;17438:10;17361:4;17428:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17428:30:0;;;;;;;;;;:38;;;17482:36;17361:4;;17428:30;;-1:-1:-1;;;;;;;;;;;17482:36:0;;;17461:5;12394:25:1;;12382:2;12367:18;;12349:76;17482:36:0;;;;;;;;-1:-1:-1;17538:4:0;17285:265;;;;:::o;8440:179::-;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;8520:11:::1;;8501:15;:30;;8493:39;;;::::0;::::1;;8552:13;::::0;;-1:-1:-1;;;;;8552:13:0;;::::1;8543:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8543:30:0::1;8569:4;8543:30:::0;;::::1;::::0;;;8597:13;;8584:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8584:27:0::1;8597:13:::0;;;::::1;8584:27:::0;;;::::1;::::0;;8440:179::o;23526:927::-;23616:4;-1:-1:-1;;;;;23641:16:0;;;;;:39;;-1:-1:-1;;;;;;23661:19:0;;23675:4;23661:19;;23641:39;23633:48;;;;;;-1:-1:-1;;;;;23696:18:0;;23704:10;23696:18;23692:477;;-1:-1:-1;;;;;23810:15:0;;23792;23810;;;:9;:15;;;;;;;;23826:10;23810:27;;;;;;;;-1:-1:-1;;23856:28:0;;23852:306;;23924:5;23913:7;:16;;23905:70;;;;-1:-1:-1;;;23905:70:0;;19094:2:1;23905:70:0;;;19076:21:1;19133:2;19113:18;;;19106:30;19172:34;19152:18;;;19145:62;-1:-1:-1;;;19223:18:1;;;19216:39;19272:19;;23905:70:0;19066:231:1;23905:70:0;23994:15;24012;24022:5;24012:7;:15;:::i;:::-;-1:-1:-1;;;;;24046:15:0;;;;;;:9;:15;;;;;;;;24062:10;24046:27;;;;;;;;;;:37;;;24107:35;12394:25:1;;;24046:37:0;;-1:-1:-1;24062:10:0;;-1:-1:-1;;;;;;;;;;;24107:35:0;12367:18:1;24107:35:0;;;;;;;23886:272;23852:306;23716:453;23692:477;-1:-1:-1;;;;;24199:15:0;;24181;24199;;;:9;:15;;;;;;24233:16;;;;24225:76;;;;-1:-1:-1;;;24225:76:0;;;;;;;:::i;:::-;24332:15;24342:5;24332:7;:15;:::i;:::-;-1:-1:-1;;;;;24314:15:0;;;;;;;:9;:15;;;;;;:33;;;;24358:13;;;;;;;;:22;;24375:5;;24314:15;24358:22;;24375:5;;24358:22;:::i;:::-;;;;;;;;24411:2;-1:-1:-1;;;;;24396:25:0;24405:4;-1:-1:-1;;;;;24396:25:0;-1:-1:-1;;;;;;;;;;;24415:5:0;24396:25;;;;12394::1;;12382:2;12367:18;;12349:76;24396:25:0;;;;;;;;-1:-1:-1;24441:4:0;;23526:927;-1:-1:-1;;;;23526:927:0:o;14922:122::-;14971:4;14995:41;15005:10;15017:6;15025:10;14995:9;:41::i;:::-;14988:48;14922:122;-1:-1:-1;;14922:122:0:o;11770:1146::-;11936:5;;-1:-1:-1;;;;;11936:5:0;:21;11928:69;;;;-1:-1:-1;;;11928:69:0;;15636:2:1;11928:69:0;;;15618:21:1;15675:2;15655:18;;;15648:30;15714:34;15694:18;;;15687:62;-1:-1:-1;;;15765:18:1;;;15758:33;15808:19;;11928:69:0;15608:225:1;11928:69:0;-1:-1:-1;;;;;12016:22:0;;12008:69;;;;-1:-1:-1;;;12008:69:0;;18691:2:1;12008:69:0;;;18673:21:1;18730:2;18710:18;;;18703:30;18769:34;18749:18;;;18742:62;-1:-1:-1;;;18820:18:1;;;18813:32;18862:19;;12008:69:0;18663:224:1;12008:69:0;12090:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;12113:16:0;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;12140:8:0;:20;;-1:-1:-1;;;;;12171:24:0;;12140:20;12171:24;;-1:-1:-1;;;;;;12171:24:0;;;12140:20;;;12171:24;;;;;;;;12210:27;12206:112;;12282:11;-1:-1:-1;;;;;12275:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12262:43;;:9;:43;;;12254:52;;;;;;12406:9;:22;;;;;-1:-1:-1;;12406:22:0;;;;;;;12441:5;:14;;-1:-1:-1;;;;;12441:14:0;;-1:-1:-1;;;;;;12441:14:0;;;;;;;;12406:9;12466:16;;;:8;:16;;;;;;:23;;;;;12406:22;12466:23;;;;;;12500:7;:20;;;;;;;;;;;;;;;;;;;;;;;12786:22;;12580:9;;12672:95;;12786:22;;12406:9;12786:22;:::i;:::-;;;;;;;;;;12837:10;;;;;;;;-1:-1:-1;;;12837:10:0;;;;;12643:264;;;;;13285:25:1;;;;13326:18;;13319:34;;;;12827:21:0;13369:18:1;;;13362:34;13412:18;;;13405:34;;;12901:4:0;13455:19:1;;;13448:61;13257:19;;12643:264:0;;;-1:-1:-1;;12643:264:0;;;;;;;;;12619:289;;12643:264;12619:289;;;;12600:16;:308;-1:-1:-1;;;;;;;11770:1146:0:o;14788:126::-;14860:10;14826:4;14872:21;;;:9;:21;;;;;;14826:4;;14850:56;;14860:10;14850:9;:56::i;:::-;14843:63;;14788:126;:::o;25080:523::-;25177:4;-1:-1:-1;;;;;25202:16:0;;;;;:39;;-1:-1:-1;;;;;;25222:19:0;;25236:4;25222:19;;25202:39;25194:48;;;;;;25283:10;25255:15;25273:21;;;:9;:21;;;;;;25313:16;;;;25305:76;;;;-1:-1:-1;;;25305:76:0;;;;;;;:::i;:::-;25418:15;25428:5;25418:7;:15;:::i;:::-;25404:10;25394:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;25444:13:0;;;;;;;:22;;25461:5;;25394:21;25444:22;;25461:5;;25444:22;:::i;:::-;;;;-1:-1:-1;;25482:31:0;;12394:25:1;;;-1:-1:-1;;;;;25482:31:0;;;25491:10;;-1:-1:-1;;;;;;;;;;;25482:31:0;12382:2:1;12367:18;25482:31:0;;;;;;;25533:62;;-1:-1:-1;;;25533:62:0;;-1:-1:-1;;;;;25533:37:0;;;;;:62;;25571:10;;25583:5;;25590:4;;;;25533:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25526:69;25080:523;-1:-1:-1;;;;;;25080:523:0:o;9718:133::-;7458:10;9787:4;7449:20;;;:8;:20;;;;;;;;7441:58;;;;-1:-1:-1;;;7441:58:0;;;;;;;:::i;:::-;9804:17:::1;9810:2;9814:6;9804:5;:17::i;:::-;-1:-1:-1::0;9839:4:0::1;9718:133:::0;;;;:::o;9385:325::-;9453:4;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9478:22:0;::::1;9470:63;;;;-1:-1:-1::0;;;9470:63:0::1;;;;;;;:::i;:::-;9544:12;:23:::0;;-1:-1:-1;;;;;;9544:23:0::1;-1:-1:-1::0;;;;;9544:23:0;::::1;;::::0;;9609:5:::1;::::0;9591:23:::1;::::0;:15:::1;:23;:::i;:::-;9578:10;:36:::0;;;9655:12:::1;::::0;9648:5:::1;::::0;9630:50:::1;::::0;-1:-1:-1;;;;;9655:12:0;;::::1;::::0;9648:5;;::::1;::::0;9630:50:::1;::::0;9655:12:::1;::::0;9630:50:::1;-1:-1:-1::0;9698:4:0::1;7627:1;9385:325:::0;;;:::o;19883:938::-;20030:4;20074:8;20055:15;:27;;20047:70;;;;-1:-1:-1;;;20047:70:0;;16817:2:1;20047:70:0;;;16799:21:1;16856:2;16836:18;;;16829:30;16895:32;16875:18;;;16868:60;16945:18;;20047:70:0;16789:180:1;20047:70:0;-1:-1:-1;;;;;20310:14:0;;20130:18;20310:14;;;:6;:14;;;;;:16;;6546:92;;20240:6;;20265:2;;20286:5;;20310:16;20130:18;20310:16;;;:::i;:::-;;;;-1:-1:-1;20175:179:0;;;;;;12717:25:1;;;;-1:-1:-1;;;;;12816:15:1;;;12796:18;;;12789:43;12868:15;;;;12848:18;;;12841:43;12900:18;;;12893:34;12943:19;;;12936:35;12987:19;;;12980:35;;;12689:19;;20175:179:0;;;;;;;;;;;;20151:204;;;;;;20130:225;;20376:41;20389:6;20397:10;20409:1;20412;20415;20376:12;:41::i;:::-;:92;;;;20421:47;20440:6;20448:10;20460:1;20463;20466;20421:18;:47::i;:::-;20368:101;;;;;;-1:-1:-1;;;;;20490:16:0;;;;;:39;;-1:-1:-1;;;;;;20510:19:0;;20524:4;20510:19;;20490:39;20482:48;;;;;;-1:-1:-1;;;;;20561:17:0;;20543:15;20561:17;;;:9;:17;;;;;;20597:16;;;;20589:76;;;;-1:-1:-1;;;20589:76:0;;;;;;;:::i;:::-;20698:15;20708:5;20698:7;:15;:::i;:::-;-1:-1:-1;;;;;20678:17:0;;;;;;;:9;:17;;;;;;:35;;;;20724:13;;;;;;;;:22;;20741:5;;20678:17;20724:22;;20741:5;;20724:22;:::i;:::-;;;;;;;;20779:2;-1:-1:-1;;;;;20762:27:0;20771:6;-1:-1:-1;;;;;20762:27:0;-1:-1:-1;;;;;;;;;;;20783:5:0;20762:27;;;;12394:25:1;;12382:2;12367:18;;12349:76;20762:27:0;;;;;;;;-1:-1:-1;20809:4:0;;19883:938;-1:-1:-1;;;;;;;;;19883:938:0:o;9056:321::-;9123:4;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9148:22:0;::::1;9140:63;;;;-1:-1:-1::0;;;9140:63:0::1;;;;;;;:::i;:::-;9214:12;:23:::0;;-1:-1:-1;;;;;;9214:23:0::1;-1:-1:-1::0;;;;;9214:23:0;::::1;;::::0;;9279:5:::1;::::0;9261:23:::1;::::0;:15:::1;:23;:::i;:::-;9248:10;:36:::0;;;9322:12:::1;::::0;9315:5:::1;::::0;9300:47:::1;::::0;-1:-1:-1;;;;;9322:12:0;;::::1;::::0;9315:5;;::::1;::::0;9300:47:::1;::::0;9322:12:::1;::::0;9300:47:::1;-1:-1:-1::0;9365:4:0::1;9056:321:::0;;;:::o;10349:327::-;10442:9;;10416:4;;10442:9;;10441:10;10433:47;;;;-1:-1:-1;;;10433:47:0;;17582:2:1;10433:47:0;;;17564:21:1;17621:2;17601:18;;;17594:30;-1:-1:-1;;;17640:18:1;;;17633:54;17704:18;;10433:47:0;17554:174:1;10433:47:0;-1:-1:-1;;;;;10499:22:0;;10491:63;;;;-1:-1:-1;;;10491:63:0;;;;;;;:::i;:::-;10565:25;10571:10;10583:6;10565:5;:25::i;:::-;10606:40;;12394:25:1;;;-1:-1:-1;;;;;10606:40:0;;;10617:10;;10606:40;;12382:2:1;12367:18;10606:40:0;12349:76:1;8155:140:0;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;8219:12:::1;:21:::0;;-1:-1:-1;;;;;;8219:21:0::1;-1:-1:-1::0;;;;;8219:21:0;::::1;;::::0;;8282:5:::1;::::0;8264:23:::1;::::0;:15:::1;:23;:::i;:::-;8251:10;:36:::0;-1:-1:-1;8155:140:0:o;14240:193::-;14324:10;;14300:4;;14317:70;;14324:10;;;-1:-1:-1;;;;;14324:10:0;14353;14373:4;14380:6;14317:35;:70::i;:::-;14405:20;14414:6;14422:2;14405:8;:20::i;13131:349::-;13292:10;;13285:74;;-1:-1:-1;;;13285:74:0;;13268:4;;13292:10;;;-1:-1:-1;;;;;13292:10:0;;13285:25;;:74;;13311:6;;13327:4;;13334:5;;13341:8;;13351:1;;13354;;13357;;13285:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13377:10:0;;13370:65;;-1:-1:-1;13377:10:0;;;-1:-1:-1;;;;;13377:10:0;;-1:-1:-1;13406:6:0;13422:4;13429:5;13370:35;:65::i;:::-;13453:19;13462:5;13469:2;13453:8;:19::i;:::-;13446:26;13131:349;-1:-1:-1;;;;;;;;13131:349:0:o;7167:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7167:24:0;;-1:-1:-1;7167:24:0;:::o;7644:78::-;7682:7;7709:5;:3;:5::i;6258:20::-;;;;;;;:::i;9859:207::-;7458:10;9930:4;7449:20;;;:8;:20;;;;;;;;7441:58;;;;-1:-1:-1;;;7441:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9955:18:0;::::1;9947:59;;;;-1:-1:-1::0;;;9947:59:0::1;;;;;;;:::i;:::-;10017:19;10023:4;10029:6;10017:5;:19::i;8841:99::-:0;8889:16;8925:7;8918:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8918:14:0;;;;;;;;;;;;;;;;;;;;;;;8841:99;:::o;22199:438::-;22271:4;-1:-1:-1;;;;;22296:16:0;;;;;:39;;-1:-1:-1;;;;;;22316:19:0;;22330:4;22316:19;;22296:39;22288:48;;;;;;22375:10;22347:15;22365:21;;;:9;:21;;;;;;22405:16;;;;22397:76;;;;-1:-1:-1;;;22397:76:0;;;;;;;:::i;:::-;22510:15;22520:5;22510:7;:15;:::i;:::-;22496:10;22486:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;22536:13:0;;;;;;;:22;;22553:5;;22486:21;22536:22;;22553:5;;22536:22;:::i;:::-;;;;-1:-1:-1;;22574:31:0;;12394:25:1;;;-1:-1:-1;;;;;22574:31:0;;;22583:10;;-1:-1:-1;;;;;;;;;;;22574:31:0;12382:2:1;12367:18;22574:31:0;;;;;;;;-1:-1:-1;22625:4:0;;22199:438;-1:-1:-1;;;22199:438:0:o;14043:189::-;14115:10;;14091:4;;14108:70;;14115:10;;;-1:-1:-1;;;;;14115:10:0;14144;14164:4;14171:6;14108:35;:70::i;:::-;14196:28;14205:6;14213:10;14196:8;:28::i;14441:127::-;14516:4;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;7905:93::-;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;7971:9:::1;:19:::0;;-1:-1:-1;;7971:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7905:93::o;17971:356::-;18152:10;18075:4;18142:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;18142:30:0;;;;;;;;;;:38;;;18196:36;18075:4;;18142:30;;-1:-1:-1;;;;;;;;;;;18196:36:0;;;18175:5;12394:25:1;;12382:2;12367:18;;12349:76;18196:36:0;;;;;;;;18252:67;;-1:-1:-1;;;18252:67:0;;-1:-1:-1;;;;;18252:42:0;;;;;:67;;18295:10;;18307:5;;18314:4;;;;18252:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18245:74;17971:356;-1:-1:-1;;;;;17971:356:0:o;8682:151::-;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8749:15:0;::::1;8767:5;8749:15:::0;;;:8:::1;:15;::::0;;;;;;:23;;-1:-1:-1;;8749:23:0::1;::::0;;8788:37;::::1;::::0;::::1;::::0;8809:15:::1;12394:25:1::0;;12382:2;12367:18;;12349:76;8788:37:0::1;;;;;;;;8682:151:::0;:::o;13789:246::-;13865:10;;13858:40;;-1:-1:-1;;;13858:40:0;;13887:10;13858:40;;;9433:51:1;13826:4:0;;;;13865:10;;;;-1:-1:-1;;;;;13865:10:0;;13858:28;;9406:18:1;;13858:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13916:10;;13843:55;;-1:-1:-1;13909:71:0;;13916:10;;;-1:-1:-1;;;;;13916:10:0;13945;13965:4;13843:55;13909:35;:71::i;:::-;13998:29;14007:7;14016:10;13998:8;:29::i;:::-;13991:36;;;13789:246;:::o;19160:715::-;19329:8;19310:15;:27;;19302:70;;;;-1:-1:-1;;;19302:70:0;;16817:2:1;19302:70:0;;;16799:21:1;16856:2;16836:18;;;16829:30;16895:32;16875:18;;;16868:60;16945:18;;19302:70:0;16789:180:1;19302:70:0;-1:-1:-1;;;;;19568:14:0;;19385:18;19568:14;;;:6;:14;;;;;:16;;6400:95;;19493:6;;19518:7;;19544:5;;19568:16;19385:18;19568:16;;;:::i;:::-;;;;-1:-1:-1;19430:182:0;;;;;;12717:25:1;;;;-1:-1:-1;;;;;12816:15:1;;;12796:18;;;12789:43;12868:15;;;;12848:18;;;12841:43;12900:18;;;12893:34;12943:19;;;12936:35;12987:19;;;12980:35;;;12689:19;;19430:182:0;;;;;;;;;;;;19406:207;;;;;;19385:228;;19634:41;19647:6;19655:10;19667:1;19670;19673;19634:12;:41::i;:::-;:92;;;;19679:47;19698:6;19706:10;19718:1;19721;19724;19679:18;:47::i;:::-;19626:101;;;;;;-1:-1:-1;;;;;19785:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19835:32;;12394:25:1;;;-1:-1:-1;;;;;;;;;;;19835:32:0;12367:18:1;19835:32:0;;;;;;;19291:584;19160:715;;;;;;;:::o;8303:129::-;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;8382:10:::1;;8363:15;:29;;8355:38;;;::::0;::::1;;8412:12;::::0;8404:5:::1;:20:::0;;-1:-1:-1;;;;;;8404:20:0::1;-1:-1:-1::0;;;;;8412:12:0;;::::1;8404:20:::0;;;::::1;::::0;;8303:129::o;10074:267::-;7458:10;10164:4;7449:20;;;:8;:20;;;;;;;;7441:58;;;;-1:-1:-1;;;7441:58:0;;;;;;;:::i;:::-;10190:9:::1;::::0;::::1;;10189:10;10181:47;;;::::0;-1:-1:-1;;;10181:47:0;;17582:2:1;10181:47:0::1;::::0;::::1;17564:21:1::0;17621:2;17601:18;;;17594:30;-1:-1:-1;;;17640:18:1;;;17633:54;17704:18;;10181:47:0::1;17554:174:1::0;10181:47:0::1;10239:22;10245:7;10254:6;10239:5;:22::i;:::-;10295:7;-1:-1:-1::0;;;;;10277:34:0::1;10287:6;10277:34;10304:6;10277:34;;;;12394:25:1::0;;12382:2;12367:18;;12349:76;7730:167:0;7766:7;7809:10;;7790:15;:29;7786:81;;-1:-1:-1;7843:12:0;;-1:-1:-1;;;;;7843:12:0;;7730:167::o;7786:81::-;-1:-1:-1;7884:5:0;;-1:-1:-1;;;;;7884:5:0;;7730:167::o;13488:293::-;13657:10;;13650:86;;-1:-1:-1;;;13650:86:0;;13633:4;;13657:10;;;-1:-1:-1;;;;;13657:10:0;;13650:37;;:86;;13688:6;;13704:4;;13711:5;;13718:8;;13728:1;;13731;;13734;;13650:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13754:19;13763:5;13770:2;13754:8;:19::i;8006:141::-;7581:5;:3;:5::i;:::-;-1:-1:-1;;;;;7567:19:0;:10;-1:-1:-1;;;;;7567:19:0;;7559:57;;;;-1:-1:-1;;;7559:57:0;;;;;;;:::i;:::-;8070:13:::1;:21:::0;;-1:-1:-1;;;;;;8070:21:0::1;-1:-1:-1::0;;;;;8070:21:0;::::1;;::::0;;8134:5:::1;::::0;8116:23:::1;::::0;:15:::1;:23;:::i;:::-;8102:11;:37:::0;-1:-1:-1;8006:141:0:o;15343:275::-;15444:10;;15419:4;;15444:10;;;-1:-1:-1;;;;;15444:10:0;:26;;;;:57;;-1:-1:-1;15474:10:0;;;;;-1:-1:-1;;;;;15474:10:0;15496:4;15474:27;;15444:57;15436:66;;;;;;15513:19;15519:4;15525:6;15513:5;:19::i;:::-;15550:10;;15543:43;;15550:10;;;-1:-1:-1;;;;;15550:10:0;15575:2;15579:6;15543:31;:43::i;:::-;-1:-1:-1;15604:6:0;;15343:275;-1:-1:-1;;15343:275:0:o;15899:425::-;-1:-1:-1;;;;;15975:21:0;;15967:65;;;;-1:-1:-1;;;15967:65:0;;20275:2:1;15967:65:0;;;20257:21:1;20314:2;20294:18;;;20287:30;20353:33;20333:18;;;20326:61;20404:18;;15967:65:0;20247:181:1;15967:65:0;16045:22;16085:6;16070:12;;:21;;;;:::i;:::-;16045:46;;16128:12;;16110:14;:30;;16102:80;;;;-1:-1:-1;;;16102:80:0;;17176:2:1;16102:80:0;;;17158:21:1;17215:2;17195:18;;;17188:30;17254:34;17234:18;;;17227:62;-1:-1:-1;;;17305:18:1;;;17298:35;17350:19;;16102:80:0;17148:227:1;16102:80:0;16195:12;:29;;;-1:-1:-1;;;;;16235:18:0;;;;;;:9;:18;;;;;:28;;16257:6;;16235:18;:28;;16257:6;;16235:28;:::i;:::-;;;;-1:-1:-1;;16279:37:0;;12394:25:1;;;-1:-1:-1;;;;;16279:37:0;;;16296:1;;-1:-1:-1;;;;;;;;;;;16279:37:0;12382:2:1;12367:18;16279:37:0;;;;;;;;15956:368;15899:425;;:::o;20829:399::-;21061:16;;20997:110;;-1:-1:-1;;;20997:110:0;;;9148:27:1;9191:11;;;9184:27;;;;9227:12;;;9220:28;;;20941:4:0;;;;9264:12:1;;20997:110:0;;;-1:-1:-1;;20997:110:0;;;;;;;;;20973:135;;20997:110;20973:135;;;;21119:14;21136:24;;;;;;;;;13747:25:1;;;13820:4;13808:17;;13788:18;;;13781:45;;;;13842:18;;;13835:34;;;13885:18;;;13878:34;;;20973:135:0;;-1:-1:-1;21119:14:0;21136:24;;13719:19:1;;21136:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21136:24:0;;-1:-1:-1;;21136:24:0;;;-1:-1:-1;;;;;;;21179:20:0;;;;;;:40;;;21213:6;-1:-1:-1;;;;;21203:16:0;:6;-1:-1:-1;;;;;21203:16:0;;21171:49;20829:399;-1:-1:-1;;;;;;;;20829:399:0:o;21236:290::-;21354:4;21371:12;21386:20;21395:10;21745:16;;21692:76;;8710:66:1;21692:76:0;;;8698:79:1;8793:12;;;8786:28;;;;8830:12;;;8823:28;;;21655:7:0;;8867:12:1;;21692:76:0;;;;;;;;;;;;21682:87;;;;;;21675:94;;21600:177;;;;21386:20;21434:24;;;21417:14;21434:24;;;;;;;;;13747:25:1;;;13820:4;13808:17;;13788:18;;;13781:45;;;;13842:18;;;13835:34;;;13885:18;;;13878:34;;;21371:35:0;;-1:-1:-1;21417:14:0;21434:24;;13719:19:1;;21434:24:0;13701:217:1;16656:412:0;-1:-1:-1;;;;;16732:21:0;;16724:67;;;;-1:-1:-1;;;16724:67:0;;18289:2:1;16724:67:0;;;18271:21:1;18328:2;18308:18;;;18301:30;18367:34;18347:18;;;18340:62;-1:-1:-1;;;18418:18:1;;;18411:31;18459:19;;16724:67:0;18261:223:1;16724:67:0;-1:-1:-1;;;;;16822:18:0;;16804:15;16822:18;;;:9;:18;;;;;;16859:17;;;;16851:73;;;;-1:-1:-1;;;16851:73:0;;14513:2:1;16851:73:0;;;14495:21:1;14552:2;14532:18;;;14525:30;14591:34;14571:18;;;14564:62;-1:-1:-1;;;14642:18:1;;;14635:41;14693:19;;16851:73:0;14485:233:1;16851:73:0;16958:16;16968:6;16958:7;:16;:::i;:::-;-1:-1:-1;;;;;16937:18:0;;;;;;:9;:18;;;;;:37;;;;16985:12;:22;;17001:6;;16937:18;16985:22;;17001:6;;16985:22;:::i;:::-;;;;-1:-1:-1;;17023:37:0;;12394:25:1;;;17049:1:0;;-1:-1:-1;;;;;17023:37:0;;;-1:-1:-1;;;;;;;;;;;17023:37:0;12382:2:1;12367:18;17023:37:0;12349:76:1;4986:201:0;5110:68;;-1:-1:-1;;;;;9753:15:1;;;5110:68:0;;;9735:34:1;9805:15;;9785:18;;;9778:43;9837:18;;;9830:34;;;5084:95:0;;5103:5;;-1:-1:-1;;;5133:27:0;9670:18:1;;5110:68:0;;;;-1:-1:-1;;5110:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5110:68:0;-1:-1:-1;;;;;;5110:68:0;;;;;;;;;;5084:18;:95::i;:::-;4986:201;;;;:::o;14576:204::-;14662:10;;14637:4;;14662:10;;;-1:-1:-1;;;;;14662:10:0;:26;;;;:57;;-1:-1:-1;14692:10:0;;;;;-1:-1:-1;;;;;14692:10:0;14714:4;14692:27;;14662:57;14654:66;;;;;;14731:17;14737:2;14741:6;14731:5;:17::i;:::-;-1:-1:-1;14766:6:0;;14576:204;-1:-1:-1;14576:204:0:o;4805:173::-;4911:58;;-1:-1:-1;;;;;10742:32:1;;4911:58:0;;;10724:51:1;10791:18;;;10784:34;;;4885:85:0;;4904:5;;-1:-1:-1;;;4934:23:0;10697:18:1;;4911:58:0;10679:145:1;4885:85:0;4805:173;;;:::o;5545:598::-;5633:27;5641:5;-1:-1:-1;;;;;5633:25:0;;:27::i;:::-;5625:71;;;;-1:-1:-1;;;5625:71:0;;19915:2:1;5625:71:0;;;19897:21:1;19954:2;19934:18;;;19927:30;19993:33;19973:18;;;19966:61;20044:18;;5625:71:0;19887:181:1;5625:71:0;5770:12;5784:23;5819:5;-1:-1:-1;;;;;5811:19:0;5831:4;5811:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5769:67;;;;5855:7;5847:52;;;;-1:-1:-1;;;5847:52:0;;16040:2:1;5847:52:0;;;16022:21:1;;;16059:18;;;16052:30;16118:34;16098:18;;;16091:62;16170:18;;5847:52:0;16012:182:1;5847:52:0;5916:17;;:21;5912:224;;6058:10;6047:30;;;;;;;;;;;;:::i;:::-;6039:85;;;;-1:-1:-1;;;6039:85:0;;19504:2:1;6039:85:0;;;19486:21:1;19543:2;19523:18;;;19516:30;19582:34;19562:18;;;19555:62;-1:-1:-1;;;19633:18:1;;;19626:40;19683:19;;6039:85:0;19476:232:1;4365:374:0;4425:4;4648:20;;4491:66;4688:15;;;;;:42;;-1:-1:-1;4707:23:0;;;4680:51;-1:-1:-1;;4365:374:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:719;235:5;288:3;281:4;273:6;269:17;265:27;255:2;;306:1;303;296:12;255:2;342:6;329:20;368:18;405:2;401;398:10;395:2;;;411:18;;:::i;:::-;486:2;480:9;454:2;540:13;;-1:-1:-1;;536:22:1;;;560:2;532:31;528:40;516:53;;;584:18;;;604:22;;;581:46;578:2;;;630:18;;:::i;:::-;670:10;666:2;659:22;705:2;697:6;690:18;751:3;744:4;739:2;731:6;727:15;723:26;720:35;717:2;;;768:1;765;758:12;717:2;832;825:4;817:6;813:17;806:4;798:6;794:17;781:54;879:1;872:4;867:2;859:6;855:15;851:26;844:37;899:6;890:15;;;;;;245:666;;;;:::o;916:186::-;975:6;1028:2;1016:9;1007:7;1003:23;999:32;996:2;;;1044:1;1041;1034:12;996:2;1067:29;1086:9;1067:29;:::i;1107:260::-;1175:6;1183;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1252:1;1249;1242:12;1204:2;1275:29;1294:9;1275:29;:::i;:::-;1265:39;;1323:38;1357:2;1346:9;1342:18;1323:38;:::i;:::-;1313:48;;1194:173;;;;;:::o;1372:328::-;1449:6;1457;1465;1518:2;1506:9;1497:7;1493:23;1489:32;1486:2;;;1534:1;1531;1524:12;1486:2;1557:29;1576:9;1557:29;:::i;:::-;1547:39;;1605:38;1639:2;1628:9;1624:18;1605:38;:::i;:::-;1595:48;;1690:2;1679:9;1675:18;1662:32;1652:42;;1476:224;;;;;:::o;1705:667::-;1816:6;1824;1832;1840;1848;1856;1864;1917:3;1905:9;1896:7;1892:23;1888:33;1885:2;;;1934:1;1931;1924:12;1885:2;1957:29;1976:9;1957:29;:::i;:::-;1947:39;;2005:38;2039:2;2028:9;2024:18;2005:38;:::i;:::-;1995:48;;2090:2;2079:9;2075:18;2062:32;2052:42;;2141:2;2130:9;2126:18;2113:32;2103:42;;2195:3;2184:9;2180:19;2167:33;2209:29;2232:5;2209:29;:::i;:::-;1875:497;;;;-1:-1:-1;1875:497:1;;;;2257:5;2309:3;2294:19;;2281:33;;-1:-1:-1;2361:3:1;2346:19;;;2333:33;;1875:497;-1:-1:-1;;1875:497:1:o;2377:254::-;2445:6;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:2;;;2522:1;2519;2512:12;2474:2;2545:29;2564:9;2545:29;:::i;:::-;2535:39;2621:2;2606:18;;;;2593:32;;-1:-1:-1;;;2464:167:1:o;2636:328::-;2713:6;2721;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:2;;;2798:1;2795;2788:12;2750:2;2821:29;2840:9;2821:29;:::i;:::-;2811:39;;2897:2;2886:9;2882:18;2869:32;2859:42;;2920:38;2954:2;2943:9;2939:18;2920:38;:::i;:::-;2910:48;;2740:224;;;;;:::o;2969:733::-;3057:6;3065;3073;3081;3134:2;3122:9;3113:7;3109:23;3105:32;3102:2;;;3150:1;3147;3140:12;3102:2;3173:29;3192:9;3173:29;:::i;:::-;3163:39;;3249:2;3238:9;3234:18;3221:32;3211:42;;3304:2;3293:9;3289:18;3276:32;3327:18;3368:2;3360:6;3357:14;3354:2;;;3384:1;3381;3374:12;3354:2;3422:6;3411:9;3407:22;3397:32;;3467:7;3460:4;3456:2;3452:13;3448:27;3438:2;;3489:1;3486;3479:12;3438:2;3529;3516:16;3555:2;3547:6;3544:14;3541:2;;;3571:1;3568;3561:12;3541:2;3616:7;3611:2;3602:6;3598:2;3594:15;3590:24;3587:37;3584:2;;;3637:1;3634;3627:12;3584:2;3092:610;;;;-1:-1:-1;;3668:2:1;3660:11;;-1:-1:-1;;;3092:610:1:o;3707:667::-;3818:6;3826;3834;3842;3850;3858;3866;3919:3;3907:9;3898:7;3894:23;3890:33;3887:2;;;3936:1;3933;3926:12;3887:2;3959:29;3978:9;3959:29;:::i;:::-;3949:39;;4035:2;4024:9;4020:18;4007:32;3997:42;;4086:2;4075:9;4071:18;4058:32;4048:42;;4140:2;4129:9;4125:18;4112:32;4153:29;4176:5;4153:29;:::i;:::-;4201:5;-1:-1:-1;4253:3:1;4238:19;;4225:33;;-1:-1:-1;4305:3:1;4290:19;;4277:33;;-1:-1:-1;4329:39:1;4363:3;4348:19;;4329:39;:::i;:::-;4319:49;;3877:497;;;;;;;;;;:::o;4379:241::-;4435:6;4488:2;4476:9;4467:7;4463:23;4459:32;4456:2;;;4504:1;4501;4494:12;4456:2;4543:9;4530:23;4562:28;4584:5;4562:28;:::i;4625:245::-;4692:6;4745:2;4733:9;4724:7;4720:23;4716:32;4713:2;;;4761:1;4758;4751:12;4713:2;4793:9;4787:16;4812:28;4834:5;4812:28;:::i;4875:322::-;4952:6;4960;4968;5021:2;5009:9;5000:7;4996:23;4992:32;4989:2;;;5037:1;5034;5027:12;4989:2;5073:9;5060:23;5050:33;;5102:38;5136:2;5125:9;5121:18;5102:38;:::i;5202:960::-;5321:6;5329;5337;5345;5353;5361;5414:3;5402:9;5393:7;5389:23;5385:33;5382:2;;;5431:1;5428;5421:12;5382:2;5471:9;5458:23;5500:18;5541:2;5533:6;5530:14;5527:2;;;5557:1;5554;5547:12;5527:2;5580:50;5622:7;5613:6;5602:9;5598:22;5580:50;:::i;:::-;5570:60;;5683:2;5672:9;5668:18;5655:32;5639:48;;5712:2;5702:8;5699:16;5696:2;;;5728:1;5725;5718:12;5696:2;;5751:52;5795:7;5784:8;5773:9;5769:24;5751:52;:::i;:::-;5741:62;;;5853:2;5842:9;5838:18;5825:32;5866:29;5889:5;5866:29;:::i;:::-;5914:5;-1:-1:-1;5938:38:1;5972:2;5957:18;;5938:38;:::i;:::-;5928:48;;5995:39;6029:3;6018:9;6014:19;5995:39;:::i;:::-;5985:49;;6086:3;6075:9;6071:19;6058:33;6100:30;6122:7;6100:30;:::i;:::-;6149:7;6139:17;;;5372:790;;;;;;;;:::o;6167:180::-;6226:6;6279:2;6267:9;6258:7;6254:23;6250:32;6247:2;;;6295:1;6292;6285:12;6247:2;-1:-1:-1;6318:23:1;;6237:110;-1:-1:-1;6237:110:1:o;6352:184::-;6422:6;6475:2;6463:9;6454:7;6450:23;6446:32;6443:2;;;6491:1;6488;6481:12;6443:2;-1:-1:-1;6514:16:1;;6433:103;-1:-1:-1;6433:103:1:o;6541:254::-;6609:6;6617;6670:2;6658:9;6649:7;6645:23;6641:32;6638:2;;;6686:1;6683;6676:12;6638:2;6722:9;6709:23;6699:33;;6751:38;6785:2;6774:9;6770:18;6751:38;:::i;6800:247::-;6868:6;6921:2;6909:9;6900:7;6896:23;6892:32;6889:2;;;6937:1;6934;6927:12;6889:2;6969:9;6963:16;6988:29;7011:5;6988:29;:::i;7052:274::-;7181:3;7219:6;7213:13;7235:53;7281:6;7276:3;7269:4;7261:6;7257:17;7235:53;:::i;:::-;7304:16;;;;;7189:137;-1:-1:-1;;7189:137:1:o;7331:1104::-;7461:3;7490:1;7523:6;7517:13;7553:3;7575:1;7603:9;7599:2;7595:18;7585:28;;7663:2;7652:9;7648:18;7685;7675:2;;7729:4;7721:6;7717:17;7707:27;;7675:2;7755;7803;7795:6;7792:14;7772:18;7769:38;7766:2;;;-1:-1:-1;;;7830:33:1;;7886:4;7883:1;7876:15;7916:4;7837:3;7904:17;7766:2;7947:18;7974:104;;;;8092:1;8087:323;;;;7940:470;;7974:104;-1:-1:-1;;8007:24:1;;7995:37;;8052:16;;;;-1:-1:-1;7974:104:1;;8087:323;20880:1;20873:14;;;20917:4;20904:18;;8185:1;8199:165;8213:6;8210:1;8207:13;8199:165;;;8291:14;;8278:11;;;8271:35;8334:16;;;;8228:10;;8199:165;;;8203:3;;8393:6;8388:3;8384:16;8377:23;;7940:470;-1:-1:-1;8426:3:1;;7469:966;-1:-1:-1;;;;;;;;7469:966:1:o;9875:670::-;-1:-1:-1;;;;;10242:15:1;;;10224:34;;10294:15;;;;10289:2;10274:18;;10267:43;10341:2;10326:18;;10319:34;;;;10384:2;10369:18;;10362:34;;;;10445:4;10433:17;10427:3;10412:19;;10405:46;10204:3;10467:19;;10460:35;10526:3;10511:19;;10504:35;;;;10173:3;10158:19;;10140:405::o;10829:559::-;-1:-1:-1;;;;;11042:32:1;;11024:51;;11106:2;11091:18;;11084:34;;;11154:2;11149;11134:18;;11127:30;;;11173:18;;11166:34;;;11193:6;11243;11237:3;11222:19;;11209:49;11308:1;11278:22;;;11302:3;11274:32;;;11267:43;;;;11371:2;11350:15;;;-1:-1:-1;;11346:29:1;11331:45;11327:55;;11014:374;-1:-1:-1;;;11014:374:1:o;11393:658::-;11564:2;11616:21;;;11686:13;;11589:18;;;11708:22;;;11535:4;;11564:2;11787:15;;;;11761:2;11746:18;;;11535:4;11830:195;11844:6;11841:1;11838:13;11830:195;;;11909:13;;-1:-1:-1;;;;;11905:39:1;11893:52;;12000:15;;;;11965:12;;;;11941:1;11859:9;11830:195;;;-1:-1:-1;12042:3:1;;11544:507;-1:-1:-1;;;;;;11544:507:1:o;13923:383::-;14072:2;14061:9;14054:21;14035:4;14104:6;14098:13;14147:6;14142:2;14131:9;14127:18;14120:34;14163:66;14222:6;14217:2;14206:9;14202:18;14197:2;14189:6;14185:15;14163:66;:::i;:::-;14290:2;14269:15;-1:-1:-1;;14265:29:1;14250:45;;;;14297:2;14246:54;;14044:262;-1:-1:-1;;14044:262:1:o;14723:349::-;14925:2;14907:21;;;14964:2;14944:18;;;14937:30;15003:27;14998:2;14983:18;;14976:55;15063:2;15048:18;;14897:175::o;15077:352::-;15279:2;15261:21;;;15318:2;15298:18;;;15291:30;15357;15352:2;15337:18;;15330:58;15420:2;15405:18;;15251:178::o;16199:411::-;16401:2;16383:21;;;16440:2;16420:18;;;16413:30;16479:34;16474:2;16459:18;;16452:62;-1:-1:-1;;;16545:2:1;16530:18;;16523:45;16600:3;16585:19;;16373:237::o;17733:349::-;17935:2;17917:21;;;17974:2;17954:18;;;17947:30;18013:27;18008:2;17993:18;;17986:55;18073:2;18058:18;;17907:175::o;20933:128::-;20973:3;21004:1;21000:6;20997:1;20994:13;20991:2;;;21010:18;;:::i;:::-;-1:-1:-1;21046:9:1;;20981:80::o;21066:125::-;21106:4;21134:1;21131;21128:8;21125:2;;;21139:18;;:::i;:::-;-1:-1:-1;21176:9:1;;21115:76::o;21196:258::-;21268:1;21278:113;21292:6;21289:1;21286:13;21278:113;;;21368:11;;;21362:18;21349:11;;;21342:39;21314:2;21307:10;21278:113;;;21409:6;21406:1;21403:13;21400:2;;;-1:-1:-1;;21444:1:1;21426:16;;21419:27;21249:205::o;21459:380::-;21538:1;21534:12;;;;21581;;;21602:2;;21656:4;21648:6;21644:17;21634:27;;21602:2;21709;21701:6;21698:14;21678:18;21675:38;21672:2;;;21755:10;21750:3;21746:20;21743:1;21736:31;21790:4;21787:1;21780:15;21818:4;21815:1;21808:15;21672:2;;21514:325;;;:::o;21844:135::-;21883:3;-1:-1:-1;;21904:17:1;;21901:2;;;21924:18;;:::i;:::-;-1:-1:-1;21971:1:1;21960:13;;21891:88::o;21984:127::-;22045:10;22040:3;22036:20;22033:1;22026:31;22076:4;22073:1;22066:15;22100:4;22097:1;22090:15;22116:127;22177:10;22172:3;22168:20;22165:1;22158:31;22208:4;22205:1;22198:15;22232:4;22229:1;22222:15;22248:118;22334:5;22327:13;22320:21;22313:5;22310:32;22300:2;;22356:1;22353;22346:12;22300:2;22290:76;:::o;22371:114::-;22455:4;22448:5;22444:16;22437:5;22434:27;22424:2;;22475:1;22472;22465:12

Swarm Source

ipfs://9a27b266cb7feeaede1024473263c644eae80bb16defe705c1541f17cd0f3821
Loading