ETH Price: $1,979.90 (-5.18%)
Gas: 0.03 Gwei

Contract

0x11980D4bB4465cb4Fc77A57B98a16787b3d834e7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve239637192025-12-07 21:44:5989 days ago1765143899IN
0x11980D4b...7b3d834e7
0 ETH0.000025720.5527082
Transfer239636582025-12-07 21:32:4789 days ago1765143167IN
0x11980D4b...7b3d834e7
0 ETH0.000060390.55738754
Approve115604202020-12-31 7:04:561891 days ago1609398296IN
0x11980D4b...7b3d834e7
0 ETH0.00457783103
Withdraw115540722020-12-30 7:34:231892 days ago1609313663IN
0x11980D4b...7b3d834e7
0 ETH0.0165759660
Claim115540652020-12-30 7:33:221892 days ago1609313602IN
0x11980D4b...7b3d834e7
0 ETH0.0042043366
Approve115481832020-12-29 9:45:171893 days ago1609235117IN
0x11980D4b...7b3d834e7
0 ETH0.002666760
Claim115470292020-12-29 5:32:341893 days ago1609219954IN
0x11980D4b...7b3d834e7
0 ETH0.0020225269.3
Update For115470202020-12-29 5:30:371893 days ago1609219837IN
0x11980D4b...7b3d834e7
0 ETH0.0026727470
Claim115468162020-12-29 4:44:301893 days ago1609217070IN
0x11980D4b...7b3d834e7
0 ETH0.00664764143
Withdraw115467992020-12-29 4:40:201893 days ago1609216820IN
0x11980D4b...7b3d834e7
0 ETH0.0215688886
Withdraw115467962020-12-29 4:39:141893 days ago1609216754IN
0x11980D4b...7b3d834e7
0 ETH0.0215946886
Approve115467882020-12-29 4:37:401893 days ago1609216660IN
0x11980D4b...7b3d834e7
0 ETH0.0037778285
Withdraw All115467812020-12-29 4:34:501893 days ago1609216490IN
0x11980D4b...7b3d834e7
0 ETH0.03899742138
Withdraw All115467812020-12-29 4:34:501893 days ago1609216490IN
0x11980D4b...7b3d834e7
0 ETH0.03186944138
Update For115467692020-12-29 4:32:271893 days ago1609216347IN
0x11980D4b...7b3d834e7
0 ETH0.00764163143
Approve115467562020-12-29 4:29:231893 days ago1609216163IN
0x11980D4b...7b3d834e7
0 ETH0.0048445109
Approve115467542020-12-29 4:29:031893 days ago1609216143IN
0x11980D4b...7b3d834e7
0 ETH0.00475561107
Approve115467502020-12-29 4:27:581893 days ago1609216078IN
0x11980D4b...7b3d834e7
0 ETH0.0048445109
Approve115467252020-12-29 4:22:531893 days ago1609215773IN
0x11980D4b...7b3d834e7
0 ETH0.00555562125
Deposit115467252020-12-29 4:22:531893 days ago1609215773IN
0x11980D4b...7b3d834e7
0 ETH0.03934416123.2
Approve115467162020-12-29 4:21:221893 days ago1609215682IN
0x11980D4b...7b3d834e7
0 ETH0.00551118124
Approve115467042020-12-29 4:19:021893 days ago1609215542IN
0x11980D4b...7b3d834e7
0 ETH0.00506673114
Approve115466982020-12-29 4:17:391893 days ago1609215459IN
0x11980D4b...7b3d834e7
0 ETH0.00546673123
Claim115466652020-12-29 4:10:251893 days ago1609215025IN
0x11980D4b...7b3d834e7
0 ETH0.00561524142
Approve115466442020-12-29 4:06:091893 days ago1609214769IN
0x11980D4b...7b3d834e7
0 ETH0.00600007135
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StableYieldCredit

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-12-29
*/

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

interface Oracle {
    function getPriceUSD(address reserve) external view returns (uint);
}

interface ISushiswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface ISushiswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}



library SushiswapV2Library {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'SushiswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            )))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ISushiswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }
    

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'SushiswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA * reserveB / reserveA;
    }
}

contract StableYieldCredit {
    using SafeERC20 for IERC20;

    /// @notice EIP-20 token name for this token
    string public constant name = "Stable Yield Credit";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "syUSD";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 8;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // Initial 0

    mapping(address => mapping (address => uint)) internal allowances;
    mapping(address => uint) internal balances;

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

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");

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

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

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint amount);

    // Oracle used for price debt data (external to the AMM balance to avoid internal manipulation)
    Oracle public constant LINK = Oracle(0x271bf4568fb737cc2e6277e9B1EE0034098cDA2a);
    ISushiswapV2Factory public constant FACTORY = ISushiswapV2Factory(0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac);
    
    // user => token => collateral
    mapping (address => mapping(address => uint)) public collateral;
    // user => token => credit
    mapping (address => mapping(address => uint)) public collateralCredit;
    
    address[] private _markets;
    mapping (address => bool) pairs;
    
    event Deposit(address indexed creditor, address indexed collateral, uint creditOut, uint amountIn, uint creditMinted);
    event Withdraw(address indexed creditor, address indexed collateral, uint creditIn, uint creditOut, uint amountOut);
    
    constructor () {
        DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this)));
    }
    
    uint public FEE = 50;
    uint public BASE = 10000;
    
    uint public fees = 0;
    uint public index = 0;
    uint public distributed = 0;
    
    uint public liquidity;
    
    mapping(address => uint) public supplyIndex;
    
    function update() external {
        _update();
    }
    
    function _update() internal {
        if (totalSupply > 0) {
            if (fees > distributed) {
                uint256 _diff = fees - distributed;
                if (_diff > 0) {
                    uint256 _ratio = _diff * 1e8 / (totalSupply - liquidity);
                    if (_ratio > 0) {
                      index += _ratio;
                      distributed = fees;
                    }
                }
            }
        }
    }
    
    function updateFor(address dst) public {
        _update();
        uint256 _supplied = balances[dst];
        if (_supplied > 0) {
            uint256 _supplyIndex = supplyIndex[dst];
            supplyIndex[dst] = index;
            uint256 _delta = index - _supplyIndex;
            if (_delta > 0) {
              uint256 _share = _supplied * _delta / 1e8;
              claimable[dst] += _share;
            }
        } else {
            supplyIndex[dst] = index;
        }
    }
    
    mapping(address => uint) public claimable;
    
    function claim() external {
        _claimFor(msg.sender);
    }
    
    function claimFor(address dst) external {
        _claimFor(dst);
    }
    
    function _claimFor(address dst) internal {
        updateFor(dst);
        fees -= claimable[dst];
        
        // mint the amount
        totalSupply += claimable[dst];
        // transfer the amount to the recipient
        balances[dst] += claimable[dst];
        emit Transfer(address(0), dst, claimable[dst]);
        
        claimable[dst] = 0;
        distributed = fees;
    }
    
    function markets() external view returns (address[] memory) {
        return _markets;
    }
    
    function _mint(address dst, uint amount) internal {
        updateFor(dst);
        // mint the amount
        totalSupply += amount;
        // transfer the amount to the recipient
        balances[dst] += amount;
        emit Transfer(address(0), dst, amount);
    }
    
    function _burn(address dst, uint amount) internal {
        updateFor(dst);
        // burn the amount
        totalSupply -= amount;
        // transfer the amount from the recipient
        balances[dst] -= amount;
        emit Transfer(dst, address(0), amount);
    }
    
    function depositAll(IERC20 token) external {
        _deposit(token, token.balanceOf(msg.sender));
    }
    
    function deposit(IERC20 token, uint amount) external {
        _deposit(token, amount);
    }
    
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired
    ) internal virtual returns (address pair, uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        pair = FACTORY.getPair(tokenA, tokenB);
        if (pair == address(0)) {
            pair = FACTORY.createPair(tokenA, tokenB);
            pairs[pair] = true;
            _markets.push(tokenA);
        } else if (!pairs[pair]) {
            pairs[pair] = true;
            _markets.push(tokenA);
        }
        
        (uint reserveA, uint reserveB) = SushiswapV2Library.getReserves(address(FACTORY), tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = SushiswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = SushiswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    
    function _deposit(IERC20 token, uint amount) internal {
        uint _value = LINK.getPriceUSD(address(token)) * amount / uint256(10)**token.decimals();
        require(_value > 0, "!value");
        
        (address _pair, uint amountA,) = _addLiquidity(address(token), address(this), amount, _value);
        
        token.safeTransferFrom(msg.sender, _pair, amountA);
        liquidity += _value;
        _mint(_pair, _value); // Amount of scUSD to mint
        
        uint _liquidity = ISushiswapV2Pair(_pair).mint(address(this));
        collateral[msg.sender][address(token)] += _liquidity;
        
        collateralCredit[msg.sender][address(token)] += _value;
        uint _fee = _value * FEE / BASE;
        _mint(msg.sender, _value - _fee);
        fees += _fee;
        
        emit Deposit(msg.sender, address(token), _value, amount, _value);
    }
    
    function withdrawAll(IERC20 token) external {
        _withdraw(token, IERC20(address(this)).balanceOf(msg.sender));
    }
    
    function withdraw(IERC20 token, uint amount) external {
        _withdraw(token, amount);
    }
    
    function _withdraw(IERC20 token, uint amount) internal {
        uint _credit = collateralCredit[msg.sender][address(token)];
        uint _collateral = collateral[msg.sender][address(token)];
        
        if (_credit < amount) {
            amount = _credit;
        }
        
        // Calculate % of collateral to release
        uint _burned = _collateral * amount / _credit;
        address _pair = FACTORY.getPair(address(token), address(this));
        
        IERC20(_pair).safeTransfer(_pair, _burned); // send liquidity to pair
        (uint _amount0, uint _amount1) = ISushiswapV2Pair(_pair).burn(msg.sender);
        (address _token0,) = SushiswapV2Library.sortTokens(address(token), address(this));
        (uint _amountA, uint _amountB) = address(token) == _token0 ? (_amount0, _amount1) : (_amount1, _amount0);
        
        collateralCredit[msg.sender][address(token)] -= amount;
        collateral[msg.sender][address(token)] -= _burned;
        liquidity -= _amountB;
        _burn(msg.sender, _amountB+amount); // Amount of scUSD to burn (value of A leaving the system)
        
        emit Withdraw(msg.sender, address(token), amount, _amountB, _amountA);
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint amount) external returns (bool) {
        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "permit: signature");
        require(signatory == owner, "permit: unauthorized");
        require(block.timestamp <= deadline, "permit: expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint amount) external returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowances[src][spender];

        if (spender != src && spenderAllowance != type(uint).max) {
            uint newAllowance = spenderAllowance - amount;
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        require(src != address(0), "_transferTokens: zero address");
        require(dst != address(0), "_transferTokens: zero address");
        
        updateFor(src);
        updateFor(dst);

        balances[src] -= amount;
        balances[dst] += amount;
        
        emit Transfer(src, dst, amount);
        
        if (pairs[src]) {
            uint _fee = amount * FEE / BASE;
            fees += _fee;
            
            // burn the amount
            totalSupply -= _fee;
            // transfer the amount from the recipient
            balances[dst] -= _fee;
            emit Transfer(dst, address(0), _fee);
        }
        
    }

    function _getChainId() internal view returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":true,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"creditOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creditMinted","type":"uint256"}],"name":"Deposit","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":true,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"creditIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creditOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAINSEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"contract ISushiswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LINK","outputs":[{"internalType":"contract Oracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collateral","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collateralCredit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"markets","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","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":"","type":"address"}],"name":"supplyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"}],"name":"updateFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526000805560326008556127106009556000600a556000600b556000600c553480156200002f57600080fd5b5060408051808201909152601381527f537461626c65205969656c6420437265646974000000000000000000000000006020909101527f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f357f731d4321f0316462c5e2d7805654a6b50447396c1df9b8234424c9752f8ec7d2620000b1620000e8565b30604051602001620000c79493929190620000ec565b60408051601f19818403018152919052805160209091012060805262000110565b4690565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6080516125e162000133600039600081816105b1015261095d01526125e16000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063d505accf116100ad578063e380fcad1161007c578063e380fcad146103f9578063ec342ad01461040c578063f3fef3a314610414578063f84b903e14610427578063fa09e6301461042f57610211565b8063d505accf146103ad578063dd62ed3e146103c0578063ddeae033146103d3578063de3db0fe146103e657610211565b80639f0d5f27116100f45780639f0d5f2714610364578063a2e6204514610377578063a9059cbb1461037f578063c57981b514610392578063cc218ece1461039a57610211565b806370a082311461032e5780637ecebe001461034157806395d89b41146103545780639af1d35a1461035c57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146102d65780633ac2a032146102eb578063402914f51461030057806347e7ef24146103135780634e71d92d1461032657610211565b806323b872dd146102ab5780632986c0e5146102be5780632dd31000146102c657806330adf81f146102ce57610211565b806318160ddd116101e457806318160ddd1461027e5780631a686502146102865780631b6b6d231461028e57806320606b70146102a357610211565b806306fdde0314610216578063095ea7b3146102345780630e0a5968146102545780631778e29c14610269575b600080fd5b61021e610442565b60405161022b91906120a4565b60405180910390f35b610247610242366004611dfe565b610471565b60405161022b919061203e565b610267610262366004611cd9565b6104db565b005b6102716105af565b60405161022b9190612049565b6102716105d3565b6102716105d9565b6102966105df565b60405161022b9190611f86565b6102716105f7565b6102476102b9366004611d49565b61061b565b6102716106e9565b6102966106ef565b610271610707565b6102de61072b565b60405161022b9190612389565b6102f3610730565b60405161022b9190611ff1565b61027161030e366004611cd9565b610792565b610267610321366004611dfe565b6107a4565b6102676107ae565b61027161033c366004611cd9565b6107b9565b61027161034f366004611cd9565b6107d8565b61021e6107ea565b61027161080b565b610267610372366004611cd9565b610811565b610267610899565b61024761038d366004611dfe565b6108a1565b6102716108b7565b6102716103a8366004611d11565b6108bd565b6102676103bb366004611d89565b6108da565b6102716103ce366004611d11565b610ae9565b6102676103e1366004611cd9565b610b14565b6102716103f4366004611d11565b610b1d565b610271610407366004611cd9565b610b3a565b610271610b4c565b610267610422366004611dfe565b610b52565b610271610b5c565b61026761043d366004611cd9565b610b62565b6040518060400160405280601381526020017214dd18589b1948165a595b190810dc99591a5d606a1b81525081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104ca908690612049565b60405180910390a350600192915050565b6104e3610be0565b6001600160a01b038116600090815260026020526040902054801561058e576001600160a01b0382166000908152600e602052604081208054600b54918290559190610530908390612502565b905080156105875760006305f5e10061054983866124e3565b61055391906123af565b6001600160a01b0386166000908152600f6020526040812080549293508392909190610580908490612397565b9091555050505b50506105ab565b600b546001600160a01b0383166000908152600e60205260409020555b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005481565b600d5481565b73271bf4568fb737cc2e6277e9b1ee0034098cda2a81565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b6001600160a01b03831660008181526001602090815260408083203380855292528220549192909190821480159061065557506000198114155b156106d05760006106668583612502565b6001600160a01b03808916600081815260016020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106c6908590612049565b60405180910390a3505b6106db868686610c61565b6001925050505b9392505050565b600b5481565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac81565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b600881565b6060600680548060200260200160405190810160405280929190818152602001828054801561078857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076a575b5050505050905090565b600f6020526000908152604090205481565b6105ab8282610e2b565b6107b733611146565b565b6001600160a01b0381166000908152600260205260409020545b919050565b60036020526000908152604090205481565b604051806040016040528060058152602001641cde5554d160da1b81525081565b600a5481565b61089681826001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016108419190611f86565b60206040518083038186803b15801561085957600080fd5b505afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e97565b610e2b565b50565b6107b7610be0565b60006108ae338484610c61565b50600192915050565b60085481565b600460209081526000928352604080842090915290825290205481565b6001600160a01b038716600090815260036020526040812080547f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e9918a918a918a91908661092783612545565b919050558960405160200161094196959493929190612052565b60405160208183030381529060405280519060200120905060007f00000000000000000000000000000000000000000000000000000000000000008260405160200161098e929190611f15565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516109cb9493929190612086565b6020604051602081039080840390855afa1580156109ed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a295760405162461bcd60e51b8152600401610a2090612290565b60405180910390fd5b896001600160a01b0316816001600160a01b031614610a5a5760405162461bcd60e51b8152600401610a209061221b565b86421115610a7a5760405162461bcd60e51b8152600401610a20906121bd565b6001600160a01b03808b166000818152600160209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ad5908c90612049565b60405180910390a350505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61089681611146565b600560209081526000928352604080842090915290825290205481565b600e6020526000908152604090205481565b60095481565b6105ab8282611246565b600c5481565b6040516370a0823160e01b815261089690829030906370a0823190610b8b903390600401611f86565b60206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190611e97565b611246565b600054156107b757600c54600a5411156107b7576000600c54600a54610c069190612502565b90508015610896576000600d54600054610c209190612502565b610c2e836305f5e1006124e3565b610c3891906123af565b905080156105ab5780600b6000828254610c529190612397565b9091555050600a54600c555050565b6001600160a01b038316610c875760405162461bcd60e51b8152600401610a209061233c565b6001600160a01b038216610cad5760405162461bcd60e51b8152600401610a209061233c565b610cb6836104db565b610cbf826104db565b6001600160a01b03831660009081526002602052604081208054839290610ce7908490612502565b90915550506001600160a01b03821660009081526002602052604081208054839290610d14908490612397565b92505081905550816001600160a01b0316836001600160a01b031660008051602061258c83398151915283604051610d4c9190612049565b60405180910390a36001600160a01b03831660009081526007602052604090205460ff1615610e2657600060095460085483610d8891906124e3565b610d9291906123af565b905080600a6000828254610da69190612397565b9250508190555080600080828254610dbe9190612502565b90915550506001600160a01b03831660009081526002602052604081208054839290610deb908490612502565b90915550506040516000906001600160a01b0385169060008051602061258c83398151915290610e1c908590612049565b60405180910390a3505b505050565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6657600080fd5b505afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190611e97565b610ea990600a612415565b604051635708447d60e01b8152839073271bf4568fb737cc2e6277e9b1ee0034098cda2a90635708447d90610ee2908890600401611f86565b60206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611e97565b610f3c91906124e3565b610f4691906123af565b905060008111610f685760405162461bcd60e51b8152600401610a2090612168565b600080610f7785308686611522565b509092509050610f926001600160a01b0386163384846117f1565b82600d6000828254610fa49190612397565b90915550610fb49050828461184f565b6040516335313c2160e11b81526000906001600160a01b03841690636a62784290610fe3903090600401611f86565b602060405180830381600087803b158015610ffd57600080fd5b505af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110359190611e97565b3360009081526004602090815260408083206001600160a01b038b16845290915281208054929350839290919061106d908490612397565b90915550503360009081526005602090815260408083206001600160a01b038a168452909152812080548692906110a5908490612397565b9091555050600954600854600091906110be90876124e3565b6110c891906123af565b90506110dd336110d88388612502565b61184f565b80600a60008282546110ef9190612397565b90915550506040516001600160a01b0388169033907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6906111359089908b908290612373565b60405180910390a350505050505050565b61114f816104db565b6001600160a01b0381166000908152600f6020526040812054600a80549192909161117b908490612502565b90915550506001600160a01b0381166000908152600f6020526040812054815490919081906111ab908490612397565b90915550506001600160a01b0381166000908152600f6020908152604080832054600290925282208054919290916111e4908490612397565b90915550506001600160a01b0381166000818152600f602052604080822054905160008051602061258c8339815191529161121e91612049565b60405180910390a36001600160a01b03166000908152600f6020526040812055600a54600c55565b3360008181526005602090815260408083206001600160a01b03871680855290835281842054948452600483528184209084529091529020548282101561128b578192505b60008261129885846124e3565b6112a291906123af565b60405163e6a4390560e01b815290915060009073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a43905906112e19089903090600401611f9a565b60206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190611cf5565b90506113476001600160a01b03821682846118d3565b600080826001600160a01b03166389afcb44336040518263ffffffff1660e01b81526004016113769190611f86565b6040805180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611eaf565b9150915060006113d789306118f2565b509050600080826001600160a01b03168b6001600160a01b0316146113fd578385611400565b84845b915091508960056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461145c9190612502565b90915550503360009081526004602090815260408083206001600160a01b038f16845290915281208054899290611494908490612502565b9250508190555080600d60008282546114ad9190612502565b909155506114c69050336114c18c84612397565b61197c565b8a6001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8c848660405161150d93929190612373565b60405180910390a35050505050505050505050565b60405163e6a4390560e01b81526000908190819073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a4390590611562908a908a90600401611f9a565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611cf5565b92506001600160a01b0383166116bf576040516364e329cb60e11b815273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063c9c65396906115fb908a908a90600401611f9a565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d9190611cf5565b6001600160a01b0381811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916918a16919091179055925061174b565b6001600160a01b03831660009081526007602052604090205460ff1661174b576001600160a01b0383811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169189169190911790555b60008061176d73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac8a8a6119f4565b9150915081600014801561177f575080155b1561178f578693508592506117e5565b600061179c888484611acd565b90508681116117b0578794509250826117e3565b60006117bd888486611acd565b9050888111156117dd57634e487b7160e01b600052600160045260246000fd5b94508693505b505b50509450945094915050565b611849846323b872dd60e01b85858560405160240161181293929190611fb4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b37565b50505050565b611858826104db565b806000808282546118699190612397565b90915550506001600160a01b03821660009081526002602052604081208054839290611896908490612397565b90915550506040516001600160a01b0383169060009060008051602061258c833981519152906118c7908590612049565b60405180910390a35050565b610e268363a9059cbb60e01b8484604051602401611812929190611fd8565b600080826001600160a01b0316846001600160a01b031614156119275760405162461bcd60e51b8152600401610a2090612121565b826001600160a01b0316846001600160a01b03161061194757828461194a565b83835b90925090506001600160a01b0382166119755760405162461bcd60e51b8152600401610a20906121e6565b9250929050565b611985826104db565b806000808282546119969190612502565b90915550506001600160a01b038216600090815260026020526040812080548392906119c3908490612502565b90915550506040516000906001600160a01b0384169060008051602061258c833981519152906118c7908590612049565b6000806000611a0385856118f2565b509050600080611a14888888611c1b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a849190611e49565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614611abb578082611abe565b81815b90999098509650505050505050565b6000808411611aee5760405162461bcd60e51b8152600401610a2090612249565b600083118015611afe5750600082115b611b1a5760405162461bcd60e51b8152600401610a20906120d7565b82611b2583866124e3565b611b2f91906123af565b949350505050565b611b49826001600160a01b0316611c8b565b611b655760405162461bcd60e51b8152600401610a2090612305565b600080836001600160a01b031683604051611b809190611ef9565b6000604051808303816000865af19150503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b509150915081611be45760405162461bcd60e51b8152600401610a2090612188565b8051156118495780806020019051810190611bff9190611e29565b6118495760405162461bcd60e51b8152600401610a20906122bb565b6000806000611c2a85856118f2565b91509150858282604051602001611c42929190611ed2565b60405160208183030381529060405280519060200120604051602001611c69929190611f30565b60408051601f1981840301815291905280516020909101209695505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611b2f5750141592915050565b80516001600160701b03811681146107d357600080fd5b600060208284031215611cea578081fd5b81356106e281612576565b600060208284031215611d06578081fd5b81516106e281612576565b60008060408385031215611d23578081fd5b8235611d2e81612576565b91506020830135611d3e81612576565b809150509250929050565b600080600060608486031215611d5d578081fd5b8335611d6881612576565b92506020840135611d7881612576565b929592945050506040919091013590565b600080600080600080600060e0888a031215611da3578283fd5b8735611dae81612576565b96506020880135611dbe81612576565b95506040880135945060608801359350608088013560ff81168114611de1578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e10578182fd5b8235611e1b81612576565b946020939093013593505050565b600060208284031215611e3a578081fd5b815180151581146106e2578182fd5b600080600060608486031215611e5d578283fd5b611e6684611cc2565b9250611e7460208501611cc2565b9150604084015163ffffffff81168114611e8c578182fd5b809150509250925092565b600060208284031215611ea8578081fd5b5051919050565b60008060408385031215611ec1578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611f0b818460208701612519565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156120325783516001600160a01b03168352928401929184019160010161200d565b50909695505050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825282518060208401526120c3816040850160208701612519565b601f01601f19169190910160400192915050565b6020808252602a908201527f53757368697377617056324c6962726172793a20494e53554646494349454e546040820152695f4c495155494449545960b01b606082015260800190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252600690820152652176616c756560d01b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600f908201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601490820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a20494e53554646494349454e5460408201526617d05353d5539560ca1b606082015260800190565b6020808252601190820152707065726d69743a207369676e617475726560781b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252601d908201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604082015260600190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156123aa576123aa612560565b500190565b6000826123ca57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116123e1575061240c565b8187048211156123f3576123f3612560565b8086161561240057918102915b9490941c9380026123d2565b94509492505050565b60006106e2600019848460008261242e575060016106e2565b8161243b575060006106e2565b8160018114612451576002811461245b57612488565b60019150506106e2565b60ff84111561246c5761246c612560565b6001841b91508482111561248257612482612560565b506106e2565b5060208310610133831016604e8410600b84101617156124bb575081810a838111156124b6576124b6612560565b6106e2565b6124c884848460016123cf565b8086048211156124da576124da612560565b02949350505050565b60008160001904831182151516156124fd576124fd612560565b500290565b60008282101561251457612514612560565b500390565b60005b8381101561253457818101518382015260200161251c565b838111156118495750506000910152565b600060001982141561255957612559612560565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461089657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122079898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b7082264736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063d505accf116100ad578063e380fcad1161007c578063e380fcad146103f9578063ec342ad01461040c578063f3fef3a314610414578063f84b903e14610427578063fa09e6301461042f57610211565b8063d505accf146103ad578063dd62ed3e146103c0578063ddeae033146103d3578063de3db0fe146103e657610211565b80639f0d5f27116100f45780639f0d5f2714610364578063a2e6204514610377578063a9059cbb1461037f578063c57981b514610392578063cc218ece1461039a57610211565b806370a082311461032e5780637ecebe001461034157806395d89b41146103545780639af1d35a1461035c57610211565b806323b872dd116101a8578063313ce56711610177578063313ce567146102d65780633ac2a032146102eb578063402914f51461030057806347e7ef24146103135780634e71d92d1461032657610211565b806323b872dd146102ab5780632986c0e5146102be5780632dd31000146102c657806330adf81f146102ce57610211565b806318160ddd116101e457806318160ddd1461027e5780631a686502146102865780631b6b6d231461028e57806320606b70146102a357610211565b806306fdde0314610216578063095ea7b3146102345780630e0a5968146102545780631778e29c14610269575b600080fd5b61021e610442565b60405161022b91906120a4565b60405180910390f35b610247610242366004611dfe565b610471565b60405161022b919061203e565b610267610262366004611cd9565b6104db565b005b6102716105af565b60405161022b9190612049565b6102716105d3565b6102716105d9565b6102966105df565b60405161022b9190611f86565b6102716105f7565b6102476102b9366004611d49565b61061b565b6102716106e9565b6102966106ef565b610271610707565b6102de61072b565b60405161022b9190612389565b6102f3610730565b60405161022b9190611ff1565b61027161030e366004611cd9565b610792565b610267610321366004611dfe565b6107a4565b6102676107ae565b61027161033c366004611cd9565b6107b9565b61027161034f366004611cd9565b6107d8565b61021e6107ea565b61027161080b565b610267610372366004611cd9565b610811565b610267610899565b61024761038d366004611dfe565b6108a1565b6102716108b7565b6102716103a8366004611d11565b6108bd565b6102676103bb366004611d89565b6108da565b6102716103ce366004611d11565b610ae9565b6102676103e1366004611cd9565b610b14565b6102716103f4366004611d11565b610b1d565b610271610407366004611cd9565b610b3a565b610271610b4c565b610267610422366004611dfe565b610b52565b610271610b5c565b61026761043d366004611cd9565b610b62565b6040518060400160405280601381526020017214dd18589b1948165a595b190810dc99591a5d606a1b81525081565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104ca908690612049565b60405180910390a350600192915050565b6104e3610be0565b6001600160a01b038116600090815260026020526040902054801561058e576001600160a01b0382166000908152600e602052604081208054600b54918290559190610530908390612502565b905080156105875760006305f5e10061054983866124e3565b61055391906123af565b6001600160a01b0386166000908152600f6020526040812080549293508392909190610580908490612397565b9091555050505b50506105ab565b600b546001600160a01b0383166000908152600e60205260409020555b5050565b7fd6e1492fab970753e31d1e0ba5c905c6e669e2c890736aef5c48895ba9da38f481565b60005481565b600d5481565b73271bf4568fb737cc2e6277e9b1ee0034098cda2a81565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b6001600160a01b03831660008181526001602090815260408083203380855292528220549192909190821480159061065557506000198114155b156106d05760006106668583612502565b6001600160a01b03808916600081815260016020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106c6908590612049565b60405180910390a3505b6106db868686610c61565b6001925050505b9392505050565b600b5481565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac81565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b600881565b6060600680548060200260200160405190810160405280929190818152602001828054801561078857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076a575b5050505050905090565b600f6020526000908152604090205481565b6105ab8282610e2b565b6107b733611146565b565b6001600160a01b0381166000908152600260205260409020545b919050565b60036020526000908152604090205481565b604051806040016040528060058152602001641cde5554d160da1b81525081565b600a5481565b61089681826001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016108419190611f86565b60206040518083038186803b15801561085957600080fd5b505afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190611e97565b610e2b565b50565b6107b7610be0565b60006108ae338484610c61565b50600192915050565b60085481565b600460209081526000928352604080842090915290825290205481565b6001600160a01b038716600090815260036020526040812080547f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e9918a918a918a91908661092783612545565b919050558960405160200161094196959493929190612052565b60405160208183030381529060405280519060200120905060007fd6e1492fab970753e31d1e0ba5c905c6e669e2c890736aef5c48895ba9da38f48260405160200161098e929190611f15565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516109cb9493929190612086565b6020604051602081039080840390855afa1580156109ed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a295760405162461bcd60e51b8152600401610a2090612290565b60405180910390fd5b896001600160a01b0316816001600160a01b031614610a5a5760405162461bcd60e51b8152600401610a209061221b565b86421115610a7a5760405162461bcd60e51b8152600401610a20906121bd565b6001600160a01b03808b166000818152600160209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ad5908c90612049565b60405180910390a350505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61089681611146565b600560209081526000928352604080842090915290825290205481565b600e6020526000908152604090205481565b60095481565b6105ab8282611246565b600c5481565b6040516370a0823160e01b815261089690829030906370a0823190610b8b903390600401611f86565b60206040518083038186803b158015610ba357600080fd5b505afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190611e97565b611246565b600054156107b757600c54600a5411156107b7576000600c54600a54610c069190612502565b90508015610896576000600d54600054610c209190612502565b610c2e836305f5e1006124e3565b610c3891906123af565b905080156105ab5780600b6000828254610c529190612397565b9091555050600a54600c555050565b6001600160a01b038316610c875760405162461bcd60e51b8152600401610a209061233c565b6001600160a01b038216610cad5760405162461bcd60e51b8152600401610a209061233c565b610cb6836104db565b610cbf826104db565b6001600160a01b03831660009081526002602052604081208054839290610ce7908490612502565b90915550506001600160a01b03821660009081526002602052604081208054839290610d14908490612397565b92505081905550816001600160a01b0316836001600160a01b031660008051602061258c83398151915283604051610d4c9190612049565b60405180910390a36001600160a01b03831660009081526007602052604090205460ff1615610e2657600060095460085483610d8891906124e3565b610d9291906123af565b905080600a6000828254610da69190612397565b9250508190555080600080828254610dbe9190612502565b90915550506001600160a01b03831660009081526002602052604081208054839290610deb908490612502565b90915550506040516000906001600160a01b0385169060008051602061258c83398151915290610e1c908590612049565b60405180910390a3505b505050565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6657600080fd5b505afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e9190611e97565b610ea990600a612415565b604051635708447d60e01b8152839073271bf4568fb737cc2e6277e9b1ee0034098cda2a90635708447d90610ee2908890600401611f86565b60206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190611e97565b610f3c91906124e3565b610f4691906123af565b905060008111610f685760405162461bcd60e51b8152600401610a2090612168565b600080610f7785308686611522565b509092509050610f926001600160a01b0386163384846117f1565b82600d6000828254610fa49190612397565b90915550610fb49050828461184f565b6040516335313c2160e11b81526000906001600160a01b03841690636a62784290610fe3903090600401611f86565b602060405180830381600087803b158015610ffd57600080fd5b505af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110359190611e97565b3360009081526004602090815260408083206001600160a01b038b16845290915281208054929350839290919061106d908490612397565b90915550503360009081526005602090815260408083206001600160a01b038a168452909152812080548692906110a5908490612397565b9091555050600954600854600091906110be90876124e3565b6110c891906123af565b90506110dd336110d88388612502565b61184f565b80600a60008282546110ef9190612397565b90915550506040516001600160a01b0388169033907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6906111359089908b908290612373565b60405180910390a350505050505050565b61114f816104db565b6001600160a01b0381166000908152600f6020526040812054600a80549192909161117b908490612502565b90915550506001600160a01b0381166000908152600f6020526040812054815490919081906111ab908490612397565b90915550506001600160a01b0381166000908152600f6020908152604080832054600290925282208054919290916111e4908490612397565b90915550506001600160a01b0381166000818152600f602052604080822054905160008051602061258c8339815191529161121e91612049565b60405180910390a36001600160a01b03166000908152600f6020526040812055600a54600c55565b3360008181526005602090815260408083206001600160a01b03871680855290835281842054948452600483528184209084529091529020548282101561128b578192505b60008261129885846124e3565b6112a291906123af565b60405163e6a4390560e01b815290915060009073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a43905906112e19089903090600401611f9a565b60206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190611cf5565b90506113476001600160a01b03821682846118d3565b600080826001600160a01b03166389afcb44336040518263ffffffff1660e01b81526004016113769190611f86565b6040805180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611eaf565b9150915060006113d789306118f2565b509050600080826001600160a01b03168b6001600160a01b0316146113fd578385611400565b84845b915091508960056000336001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461145c9190612502565b90915550503360009081526004602090815260408083206001600160a01b038f16845290915281208054899290611494908490612502565b9250508190555080600d60008282546114ad9190612502565b909155506114c69050336114c18c84612397565b61197c565b8a6001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8c848660405161150d93929190612373565b60405180910390a35050505050505050505050565b60405163e6a4390560e01b81526000908190819073c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a4390590611562908a908a90600401611f9a565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611cf5565b92506001600160a01b0383166116bf576040516364e329cb60e11b815273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063c9c65396906115fb908a908a90600401611f9a565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d9190611cf5565b6001600160a01b0381811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916918a16919091179055925061174b565b6001600160a01b03831660009081526007602052604090205460ff1661174b576001600160a01b0383811660009081526007602052604081208054600160ff1990911681179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169189169190911790555b60008061176d73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac8a8a6119f4565b9150915081600014801561177f575080155b1561178f578693508592506117e5565b600061179c888484611acd565b90508681116117b0578794509250826117e3565b60006117bd888486611acd565b9050888111156117dd57634e487b7160e01b600052600160045260246000fd5b94508693505b505b50509450945094915050565b611849846323b872dd60e01b85858560405160240161181293929190611fb4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b37565b50505050565b611858826104db565b806000808282546118699190612397565b90915550506001600160a01b03821660009081526002602052604081208054839290611896908490612397565b90915550506040516001600160a01b0383169060009060008051602061258c833981519152906118c7908590612049565b60405180910390a35050565b610e268363a9059cbb60e01b8484604051602401611812929190611fd8565b600080826001600160a01b0316846001600160a01b031614156119275760405162461bcd60e51b8152600401610a2090612121565b826001600160a01b0316846001600160a01b03161061194757828461194a565b83835b90925090506001600160a01b0382166119755760405162461bcd60e51b8152600401610a20906121e6565b9250929050565b611985826104db565b806000808282546119969190612502565b90915550506001600160a01b038216600090815260026020526040812080548392906119c3908490612502565b90915550506040516000906001600160a01b0384169060008051602061258c833981519152906118c7908590612049565b6000806000611a0385856118f2565b509050600080611a14888888611c1b565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a849190611e49565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614611abb578082611abe565b81815b90999098509650505050505050565b6000808411611aee5760405162461bcd60e51b8152600401610a2090612249565b600083118015611afe5750600082115b611b1a5760405162461bcd60e51b8152600401610a20906120d7565b82611b2583866124e3565b611b2f91906123af565b949350505050565b611b49826001600160a01b0316611c8b565b611b655760405162461bcd60e51b8152600401610a2090612305565b600080836001600160a01b031683604051611b809190611ef9565b6000604051808303816000865af19150503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b509150915081611be45760405162461bcd60e51b8152600401610a2090612188565b8051156118495780806020019051810190611bff9190611e29565b6118495760405162461bcd60e51b8152600401610a20906122bb565b6000806000611c2a85856118f2565b91509150858282604051602001611c42929190611ed2565b60405160208183030381529060405280519060200120604051602001611c69929190611f30565b60408051601f1981840301815291905280516020909101209695505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611b2f5750141592915050565b80516001600160701b03811681146107d357600080fd5b600060208284031215611cea578081fd5b81356106e281612576565b600060208284031215611d06578081fd5b81516106e281612576565b60008060408385031215611d23578081fd5b8235611d2e81612576565b91506020830135611d3e81612576565b809150509250929050565b600080600060608486031215611d5d578081fd5b8335611d6881612576565b92506020840135611d7881612576565b929592945050506040919091013590565b600080600080600080600060e0888a031215611da3578283fd5b8735611dae81612576565b96506020880135611dbe81612576565b95506040880135945060608801359350608088013560ff81168114611de1578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e10578182fd5b8235611e1b81612576565b946020939093013593505050565b600060208284031215611e3a578081fd5b815180151581146106e2578182fd5b600080600060608486031215611e5d578283fd5b611e6684611cc2565b9250611e7460208501611cc2565b9150604084015163ffffffff81168114611e8c578182fd5b809150509250925092565b600060208284031215611ea8578081fd5b5051919050565b60008060408385031215611ec1578182fd5b505080516020909101519092909150565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611f0b818460208701612519565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156120325783516001600160a01b03168352928401929184019160010161200d565b50909695505050505050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825282518060208401526120c3816040850160208701612519565b601f01601f19169190910160400192915050565b6020808252602a908201527f53757368697377617056324c6962726172793a20494e53554646494349454e546040820152695f4c495155494449545960b01b606082015260800190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252600690820152652176616c756560d01b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600f908201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601490820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a20494e53554646494349454e5460408201526617d05353d5539560ca1b606082015260800190565b6020808252601190820152707065726d69743a207369676e617475726560781b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252601d908201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604082015260600190565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b600082198211156123aa576123aa612560565b500190565b6000826123ca57634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116123e1575061240c565b8187048211156123f3576123f3612560565b8086161561240057918102915b9490941c9380026123d2565b94509492505050565b60006106e2600019848460008261242e575060016106e2565b8161243b575060006106e2565b8160018114612451576002811461245b57612488565b60019150506106e2565b60ff84111561246c5761246c612560565b6001841b91508482111561248257612482612560565b506106e2565b5060208310610133831016604e8410600b84101617156124bb575081810a838111156124b6576124b6612560565b6106e2565b6124c884848460016123cf565b8086048211156124da576124da612560565b02949350505050565b60008160001904831182151516156124fd576124fd612560565b500290565b60008282101561251457612514612560565b500390565b60005b8381101561253457818101518382015260200161251c565b838111156118495750506000910152565b600060001982141561255957612559612560565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461089657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122079898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b7082264736f6c63430008000033

Deployed Bytecode Sourcemap

7777:13949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7896:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17877:207;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11198:499::-;;;;;;:::i;:::-;;:::i;:::-;;8570:40;;;:::i;:::-;;;;;;;:::i;8208:27::-;;;:::i;10566:21::-;;;:::i;9493:80::-;;;:::i;:::-;;;;;;;:::i;8444:119::-;;;:::i;20287:513::-;;;;;;:::i;:::-;;:::i;10498:21::-;;;:::i;9580:109::-;;;:::i;8700:128::-;;;:::i;8110:34::-;;;:::i;:::-;;;;;;;:::i;12339:94::-;;;:::i;:::-;;;;;;;:::i;11709:41::-;;;;;;:::i;:::-;;:::i;13139:95::-;;;;;;:::i;:::-;;:::i;11763:66::-;;;:::i;19462:108::-;;;;;;:::i;:::-;;:::i;8909:39::-;;;;;;:::i;:::-;;:::i;8008:::-;;;:::i;10471:20::-;;;:::i;13021:106::-;;;;;;:::i;:::-;;:::i;10656:55::-;;;:::i;19831:149::-;;;;;;:::i;:::-;;:::i;10407:20::-;;;:::i;9738:63::-;;;;;;:::i;:::-;;:::i;18571:688::-;;;;;;:::i;:::-;;:::i;17266:136::-;;;;;;:::i;:::-;;:::i;11841:73::-;;;;;;:::i;:::-;;:::i;9840:69::-;;;;;;:::i;:::-;;:::i;10600:43::-;;;;;;:::i;:::-;;:::i;10434:24::-;;;:::i;15638:97::-;;;;;;:::i;:::-;;:::i;10526:27::-;;;:::i;15502:124::-;;;;;;:::i;:::-;;:::i;7896:51::-;;;;;;;;;;;;;;-1:-1:-1;;;7896:51:0;;;;:::o;17877:207::-;17970:10;17942:4;17959:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;17959:31:0;;;;;;;;;;:40;;;18017:37;17942:4;;17959:31;;18017:37;;;;17993:6;;18017:37;:::i;:::-;;;;;;;;-1:-1:-1;18072:4:0;17877:207;;;;:::o;11198:499::-;11248:9;:7;:9::i;:::-;-1:-1:-1;;;;;11288:13:0;;11268:17;11288:13;;;:8;:13;;;;;;11316;;11312:378;;-1:-1:-1;;;;;11369:16:0;;11346:20;11369:16;;;:11;:16;;;;;;;11419:5;;11400:24;;;;11369:16;11346:20;11456;;11369:16;;11456:20;:::i;:::-;11439:37;-1:-1:-1;11495:10:0;;11491:131;;11524:14;11562:3;11541:18;11553:6;11541:9;:18;:::i;:::-;:24;;;;:::i;:::-;-1:-1:-1;;;;;11582:14:0;;;;;;:9;:14;;;;;:24;;11524:41;;-1:-1:-1;11524:41:0;;11582:14;;;:24;;11524:41;;11582:24;:::i;:::-;;;;-1:-1:-1;;;11491:131:0;11312:378;;;;;11673:5;;-1:-1:-1;;;;;11654:16:0;;;;;;:11;:16;;;;;:24;11312:378;11198:499;;:::o;8570:40::-;;;:::o;8208:27::-;;;;:::o;10566:21::-;;;;:::o;9493:80::-;9530:42;9493:80;:::o;8444:119::-;8486:77;8444:119;:::o;20287:513::-;-1:-1:-1;;;;;20446:15:0;;20366:4;20446:15;;;:10;:15;;;;;;;;20401:10;20446:24;;;;;;;;20366:4;;20401:10;;20446:24;20487:14;;;;;:52;;;-1:-1:-1;;20505:16:0;:34;;20487:52;20483:242;;;20556:17;20576:25;20595:6;20576:16;:25;:::i;:::-;-1:-1:-1;;;;;20616:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;20677:36;20556:45;;-1:-1:-1;20616:24:0;;20677:36;;;;20556:45;;20677:36;:::i;:::-;;;;;;;;20483:242;;20737:33;20753:3;20758;20763:6;20737:15;:33::i;:::-;20788:4;20781:11;;;;20287:513;;;;;;:::o;10498:21::-;;;;:::o;9580:109::-;9646:42;9580:109;:::o;8700:128::-;8742:86;8700:128;:::o;8110:34::-;8143:1;8110:34;:::o;12339:94::-;12381:16;12417:8;12410:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12410:15:0;;;;;;;;;;;;;;;;;;;;;;;12339:94;:::o;11709:41::-;;;;;;;;;;;;;:::o;13139:95::-;13203:23;13212:5;13219:6;13203:8;:23::i;11763:66::-;11800:21;11810:10;11800:9;:21::i;:::-;11763:66::o;19462:108::-;-1:-1:-1;;;;;19545:17:0;;19521:4;19545:17;;;:8;:17;;;;;;19462:108;;;;:::o;8909:39::-;;;;;;;;;;;;;:::o;8008:::-;;;;;;;;;;;;;;-1:-1:-1;;;8008:39:0;;;;:::o;10471:20::-;;;;:::o;13021:106::-;13075:44;13084:5;13091;-1:-1:-1;;;;;13091:15:0;;13107:10;13091:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13075:8;:44::i;:::-;13021:106;:::o;10656:55::-;10694:9;:7;:9::i;19831:149::-;19893:4;19910:40;19926:10;19938:3;19943:6;19910:15;:40::i;:::-;-1:-1:-1;19968:4:0;19831:149;;;;:::o;10407:20::-;;;;:::o;9738:63::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18571:688::-;-1:-1:-1;;;;;18781:13:0;;18698:18;18781:13;;;:6;:13;;;;;:15;;8742:86;;18757:5;;18764:7;;18773:6;;18781:15;18698:18;18781:15;;;:::i;:::-;;;;;18798:8;18729:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18719:89;;;;;;18698:110;;18819:14;18875:15;18892:10;18846:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18836:68;;;;;;18819:85;;18915:17;18935:26;18945:6;18953:1;18956;18959;18935:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18935:26:0;;-1:-1:-1;;18935:26:0;;;-1:-1:-1;;;;;;;18980:23:0;;18972:53;;;;-1:-1:-1;;;18972:53:0;;;;;;;:::i;:::-;;;;;;;;;19057:5;-1:-1:-1;;;;;19044:18:0;:9;-1:-1:-1;;;;;19044:18:0;;19036:51;;;;-1:-1:-1;;;19036:51:0;;;;;;;:::i;:::-;19125:8;19106:15;:27;;19098:55;;;;-1:-1:-1;;;19098:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19166:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;;:35;;;19219:32;;;;;19195:6;;19219:32;:::i;:::-;;;;;;;;18571:688;;;;;;;;;;:::o;17266:136::-;-1:-1:-1;;;;;17366:19:0;;;17342:4;17366:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;17266:136::o;11841:73::-;11892:14;11902:3;11892:9;:14::i;9840:69::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;10600:43::-;;;;;;;;;;;;;:::o;10434:24::-;;;;:::o;15638:97::-;15703:24;15713:5;15720:6;15703:9;:24::i;10526:27::-;;;;:::o;15502:124::-;15574:43;;-1:-1:-1;;;15574:43:0;;15557:61;;15567:5;;15589:4;;15574:31;;:43;;15606:10;;15574:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15557:9;:61::i;10723:463::-;10780:1;10766:11;:15;10762:417;;10809:11;;10802:4;;:18;10798:370;;;10841:13;10864:11;;10857:4;;:18;;;;:::i;:::-;10841:34;-1:-1:-1;10898:9:0;;10894:259;;10932:14;10978:9;;10964:11;;:23;;;;:::i;:::-;10949:11;:5;10957:3;10949:11;:::i;:::-;:39;;;;:::i;:::-;10932:56;-1:-1:-1;11015:10:0;;11011:123;;11061:6;11052:5;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;11106:4:0;;11092:11;:18;10894:259;10798:370;10723:463::o;20808:756::-;-1:-1:-1;;;;;20900:17:0;;20892:59;;;;-1:-1:-1;;;20892:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20970:17:0;;20962:59;;;;-1:-1:-1;;;20962:59:0;;;;;;;:::i;:::-;21042:14;21052:3;21042:9;:14::i;:::-;21067;21077:3;21067:9;:14::i;:::-;-1:-1:-1;;;;;21094:13:0;;;;;;:8;:13;;;;;:23;;21111:6;;21094:13;:23;;21111:6;;21094:23;:::i;:::-;;;;-1:-1:-1;;;;;;;21128:13:0;;;;;;:8;:13;;;;;:23;;21145:6;;21128:13;:23;;21145:6;;21128:23;:::i;:::-;;;;;;;;21191:3;-1:-1:-1;;;;;21177:26:0;21186:3;-1:-1:-1;;;;;21177:26:0;-1:-1:-1;;;;;;;;;;;21196:6:0;21177:26;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21228:10:0;;;;;;:5;:10;;;;;;;;21224:323;;;21255:9;21282:4;;21276:3;;21267:6;:12;;;;:::i;:::-;:19;;;;:::i;:::-;21255:31;;21309:4;21301;;:12;;;;;;;:::i;:::-;;;;;;;;21389:4;21374:11;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;21463:13:0;;;;;;:8;:13;;;;;:21;;21480:4;;21463:13;:21;;21480:4;;21463:21;:::i;:::-;;;;-1:-1:-1;;21504:31:0;;21526:1;;-1:-1:-1;;;;;21504:31:0;;;-1:-1:-1;;;;;;;;;;;21504:31:0;;;21530:4;;21504:31;:::i;:::-;;;;;;;;21224:323;;20808:756;;;:::o;14604:886::-;14669:11;14740:5;-1:-1:-1;;;;;14740:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14727:29;;14735:2;14727:29;:::i;:::-;14683:32;;-1:-1:-1;;;14683:32:0;;14718:6;;9530:42;;14683:16;;:32;;14708:5;;14683:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:73;;;;:::i;:::-;14669:87;;14784:1;14775:6;:10;14767:29;;;;-1:-1:-1;;;14767:29:0;;;;;;;:::i;:::-;14818:13;14833:12;14850:60;14872:5;14888:4;14895:6;14903;14850:13;:60::i;:::-;-1:-1:-1;14817:93:0;;-1:-1:-1;14817:93:0;-1:-1:-1;14931:50:0;-1:-1:-1;;;;;14931:22:0;;14954:10;14817:93;;14931:22;:50::i;:::-;15005:6;14992:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;15022:20:0;;-1:-1:-1;15028:5:0;15035:6;15022:5;:20::i;:::-;15108:43;;-1:-1:-1;;;15108:43:0;;15090:15;;-1:-1:-1;;;;;15108:28:0;;;;;:43;;15145:4;;15108:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15173:10;15162:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15162:38:0;;;;;;;;;:52;;15090:61;;-1:-1:-1;15090:61:0;;15162:38;;:22;:52;;15090:61;;15162:52;:::i;:::-;;;;-1:-1:-1;;15252:10:0;15235:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;15235:44:0;;;;;;;;;:54;;15283:6;;15235:28;:54;;15283:6;;15235:54;:::i;:::-;;;;-1:-1:-1;;15327:4:0;;15321:3;;15300:9;;15327:4;15312:12;;:6;:12;:::i;:::-;:19;;;;:::i;:::-;15300:31;-1:-1:-1;15342:32:0;15348:10;15360:13;15300:31;15360:6;:13;:::i;:::-;15342:5;:32::i;:::-;15393:4;15385;;:12;;;;;;;:::i;:::-;;;;-1:-1:-1;;15423:59:0;;-1:-1:-1;;;;;15423:59:0;;;15431:10;;15423:59;;;;15459:6;;15467;;15459;;15423:59;:::i;:::-;;;;;;;;14604:886;;;;;;;:::o;11926:401::-;11978:14;11988:3;11978:9;:14::i;:::-;-1:-1:-1;;;;;12011:14:0;;;;;;:9;:14;;;;;;12003:4;:22;;12011:14;;12003:4;;:22;;12011:14;;12003:22;:::i;:::-;;;;-1:-1:-1;;;;;;;12089:14:0;;;;;;:9;:14;;;;;;12074:29;;12089:14;;;;;12074:29;;12089:14;;12074:29;:::i;:::-;;;;-1:-1:-1;;;;;;;12180:14:0;;;;;;:9;:14;;;;;;;;;12163:8;:13;;;;;:31;;12180:14;;12163:13;;:31;;12180:14;;12163:31;:::i;:::-;;;;-1:-1:-1;;;;;;;12210:41:0;;12227:1;12236:14;;;:9;:14;;;;;;;12210:41;;-1:-1:-1;;;;;;;;;;;12210:41:0;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;12272:14:0;12289:1;12272:14;;;:9;:14;;;;;:18;12315:4;;12301:11;:18;11926:401::o;15747:1215::-;15845:10;15813:12;15828:28;;;:16;:28;;;;;;;;-1:-1:-1;;;;;15828:44:0;;;;;;;;;;;;15902:22;;;:10;:22;;;;;:38;;;;;;;;;15965:16;;;15961:65;;;16007:7;15998:16;;15961:65;16095:12;16133:7;16110:20;16124:6;16110:11;:20;:::i;:::-;:30;;;;:::i;:::-;16167:46;;-1:-1:-1;;;16167:46:0;;16095:45;;-1:-1:-1;16151:13:0;;9646:42;;16167:15;;:46;;16191:5;;16207:4;;16167:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16151:62;-1:-1:-1;16234:42:0;-1:-1:-1;;;;;16234:26:0;;16151:62;16268:7;16234:26;:42::i;:::-;16314:13;16329;16363:5;-1:-1:-1;;;;;16346:28:0;;16375:10;16346:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16313:73;;;;16398:15;16418:60;16456:5;16472:4;16418:29;:60::i;:::-;16397:81;;;16490:13;16505;16540:7;-1:-1:-1;;;;;16522:25:0;16530:5;-1:-1:-1;;;;;16522:25:0;;:71;;16574:8;16584;16522:71;;;16551:8;16561;16522:71;16489:104;;;;16662:6;16614:16;:28;16631:10;-1:-1:-1;;;;;16614:28:0;-1:-1:-1;;;;;16614:28:0;;;;;;;;;;;;:44;16651:5;-1:-1:-1;;;;;16614:44:0;-1:-1:-1;;;;;16614:44:0;;;;;;;;;;;;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;16690:10:0;16679:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;16679:38:0;;;;;;;;;:49;;16721:7;;16679:22;:49;;16721:7;;16679:49;:::i;:::-;;;;;;;;16752:8;16739:9;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;16771:34:0;;-1:-1:-1;16777:10:0;16789:15;16798:6;16789:8;:15;:::i;:::-;16771:5;:34::i;:::-;16919:5;-1:-1:-1;;;;;16890:64:0;16899:10;-1:-1:-1;;;;;16890:64:0;;16927:6;16935:8;16945;16890:64;;;;;;;;:::i;:::-;;;;;;;;15747:1215;;;;;;;;;;;:::o;13246:1346::-;13524:31;;-1:-1:-1;;;13524:31:0;;13412:12;;;;;;9646:42;;13524:15;;:31;;13540:6;;13548;;13524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13517:38;-1:-1:-1;;;;;;13570:18:0;;13566:266;;13612:34;;-1:-1:-1;;;13612:34:0;;9646:42;;13612:18;;:34;;13631:6;;13639;;13612:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13661:11:0;;;;;;;:5;:11;;;;;:18;;13675:4;-1:-1:-1;;13661:18:0;;;;;;;;13694:8;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;13694:21:0;;;;;;;;;;13661:11;-1:-1:-1;13566:266:0;;;-1:-1:-1;;;;;13738:11:0;;;;;;:5;:11;;;;;;;;13733:99;;-1:-1:-1;;;;;13766:11:0;;;;;;;:5;:11;;;;;:18;;13780:4;-1:-1:-1;;13766:18:0;;;;;;;;13799:8;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;13799:21:0;;;;;;;;;;13733:99;13853:13;13868;13885:64;9646:42;13934:6;13942;13885:30;:64::i;:::-;13852:97;;;;13964:8;13976:1;13964:13;:30;;;;-1:-1:-1;13981:13:0;;13964:30;13960:625;;;14033:14;;-1:-1:-1;14049:14:0;;-1:-1:-1;13960:625:0;;;14097:19;14119:60;14144:14;14160:8;14170;14119:24;:60::i;:::-;14097:82;;14216:14;14198;:32;14194:380;;14273:14;;-1:-1:-1;14289:14:0;-1:-1:-1;14289:14:0;14194:380;;;14345:19;14367:60;14392:14;14408:8;14418;14367:24;:60::i;:::-;14345:82;;14471:14;14453;:32;;14446:40;;-1:-1:-1;;;14446:40:0;;;;;;;;;14527:14;-1:-1:-1;14543:14:0;;-1:-1:-1;14194:380:0;13960:625;;13246:1346;;;;;;;;;;:::o;1439:201::-;1537:95;1556:5;1586:27;;;1615:4;1621:2;1625:5;1563:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1563:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;1563:68:0;-1:-1:-1;;;;;;1563:68:0;;;;;;;;;;1537:18;:95::i;:::-;1439:201;;;;:::o;12445:275::-;12506:14;12516:3;12506:9;:14::i;:::-;12574:6;12559:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12640:13:0;;;;;;:8;:13;;;;;:23;;12657:6;;12640:13;:23;;12657:6;;12640:23;:::i;:::-;;;;-1:-1:-1;;12679:33:0;;-1:-1:-1;;;;;12679:33:0;;;12696:1;;-1:-1:-1;;;;;;;;;;;12679:33:0;;;12705:6;;12679:33;:::i;:::-;;;;;;;;12445:275;;:::o;1258:173::-;1338:85;1357:5;1387:23;;;1412:2;1416:5;1364:58;;;;;;;;;:::i;5946:353::-;6021:14;6037;6082:6;-1:-1:-1;;;;;6072:16:0;:6;-1:-1:-1;;;;;6072:16:0;;;6064:68;;;;-1:-1:-1;;;6064:68:0;;;;;;;:::i;:::-;6171:6;-1:-1:-1;;;;;6162:15:0;:6;-1:-1:-1;;;;;6162:15:0;;:53;;6200:6;6208;6162:53;;;6181:6;6189;6162:53;6143:72;;-1:-1:-1;6143:72:0;-1:-1:-1;;;;;;6234:20:0;;6226:65;;;;-1:-1:-1;;;6226:65:0;;;;;;;:::i;:::-;5946:353;;;;;:::o;12732:277::-;12793:14;12803:3;12793:9;:14::i;:::-;12861:6;12846:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12929:13:0;;;;;;:8;:13;;;;;:23;;12946:6;;12929:13;:23;;12946:6;;12929:23;:::i;:::-;;;;-1:-1:-1;;12968:33:0;;12990:1;;-1:-1:-1;;;;;12968:33:0;;;-1:-1:-1;;;;;;;;;;;12968:33:0;;;12994:6;;12968:33;:::i;6936:393::-;7029:13;7044;7071:14;7090:26;7101:6;7109;7090:10;:26::i;:::-;7070:46;;;7128:13;7143;7178:32;7186:7;7195:6;7203;7178:7;:32::i;:::-;-1:-1:-1;;;;;7161:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7127:98;-1:-1:-1;;;;;7127:98:0;;;-1:-1:-1;;;;;7127:98:0;;;7269:6;-1:-1:-1;;;;;7259:16:0;:6;-1:-1:-1;;;;;7259:16:0;;:62;;7302:8;7312;7259:62;;;7279:8;7289;7259:62;7236:85;;;;-1:-1:-1;6936:393:0;-1:-1:-1;;;;;;;6936:393:0:o;7448:322::-;7530:12;7573:1;7563:7;:11;7555:63;;;;-1:-1:-1;;;7555:63:0;;;;;;;:::i;:::-;7648:1;7637:8;:12;:28;;;;;7664:1;7653:8;:12;7637:28;7629:83;;;;-1:-1:-1;;;7629:83:0;;;;;;;:::i;:::-;7754:8;7733:18;7743:8;7733:7;:18;:::i;:::-;:29;;;;:::i;:::-;7723:39;7448:322;-1:-1:-1;;;;7448:322:0:o;1998:598::-;2086:27;2094:5;-1:-1:-1;;;;;2086:25:0;;:27::i;:::-;2078:71;;;;-1:-1:-1;;;2078:71:0;;;;;;;:::i;:::-;2223:12;2237:23;2272:5;-1:-1:-1;;;;;2264:19:0;2284:4;2264:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2222:67;;;;2308:7;2300:52;;;;-1:-1:-1;;;2300:52:0;;;;;;;:::i;:::-;2369:17;;:21;2365:224;;2511:10;2500:30;;;;;;;;;;;;:::i;:::-;2492:85;;;;-1:-1:-1;;;2492:85:0;;;;;;;:::i;6391:487::-;6480:12;6506:14;6522;6540:26;6551:6;6559;6540:10;:26::i;:::-;6505:61;;;;6676:7;6729:6;6737;6712:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6702:43;;;;;;6615:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6615:251:0;;;;;;;;;6605:262;;6615:251;6605:262;;;;;6391:487;-1:-1:-1;;;;;;6391:487:0:o;818:374::-;878:4;1101:20;;944:66;1141:15;;;;;:42;;-1:-1:-1;1160:23:0;;;1133:51;-1:-1:-1;;818:374:0:o;14:190:1:-;95:13;;-1:-1:-1;;;;;137:42:1;;127:53;;117:2;;194:1;191;184:12;209:259;;321:2;309:9;300:7;296:23;292:32;289:2;;;342:6;334;327:22;289:2;386:9;373:23;405:33;432:5;405:33;:::i;473:263::-;;596:2;584:9;575:7;571:23;567:32;564:2;;;617:6;609;602:22;564:2;654:9;648:16;673:33;700:5;673:33;:::i;741:402::-;;;870:2;858:9;849:7;845:23;841:32;838:2;;;891:6;883;876:22;838:2;935:9;922:23;954:33;981:5;954:33;:::i;:::-;1006:5;-1:-1:-1;1063:2:1;1048:18;;1035:32;1076:35;1035:32;1076:35;:::i;:::-;1130:7;1120:17;;;828:315;;;;;:::o;1148:470::-;;;;1294:2;1282:9;1273:7;1269:23;1265:32;1262:2;;;1315:6;1307;1300:22;1262:2;1359:9;1346:23;1378:33;1405:5;1378:33;:::i;:::-;1430:5;-1:-1:-1;1487:2:1;1472:18;;1459:32;1500:35;1459:32;1500:35;:::i;:::-;1252:366;;1554:7;;-1:-1:-1;;;1608:2:1;1593:18;;;;1580:32;;1252:366::o;1623:853::-;;;;;;;;1835:3;1823:9;1814:7;1810:23;1806:33;1803:2;;;1857:6;1849;1842:22;1803:2;1901:9;1888:23;1920:33;1947:5;1920:33;:::i;:::-;1972:5;-1:-1:-1;2029:2:1;2014:18;;2001:32;2042:35;2001:32;2042:35;:::i;:::-;2096:7;-1:-1:-1;2150:2:1;2135:18;;2122:32;;-1:-1:-1;2201:2:1;2186:18;;2173:32;;-1:-1:-1;2257:3:1;2242:19;;2229:33;2306:4;2293:18;;2281:31;;2271:2;;2331:6;2323;2316:22;2271:2;1793:683;;;;-1:-1:-1;1793:683:1;;;;2359:7;2413:3;2398:19;;2385:33;;-1:-1:-1;2465:3:1;2450:19;;;2437:33;;1793:683;-1:-1:-1;;1793:683:1:o;2481:327::-;;;2610:2;2598:9;2589:7;2585:23;2581:32;2578:2;;;2631:6;2623;2616:22;2578:2;2675:9;2662:23;2694:33;2721:5;2694:33;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2568:240:1:o;2813:297::-;;2933:2;2921:9;2912:7;2908:23;2904:32;2901:2;;;2954:6;2946;2939:22;2901:2;2991:9;2985:16;3044:5;3037:13;3030:21;3023:5;3020:32;3010:2;;3071:6;3063;3056:22;3737:474;;;;3893:2;3881:9;3872:7;3868:23;3864:32;3861:2;;;3914:6;3906;3899:22;3861:2;3942:42;3974:9;3942:42;:::i;:::-;3932:52;;4003:51;4050:2;4039:9;4035:18;4003:51;:::i;:::-;3993:61;;4097:2;4086:9;4082:18;4076:25;4141:10;4134:5;4130:22;4123:5;4120:33;4110:2;;4172:6;4164;4157:22;4110:2;4200:5;4190:15;;;3851:360;;;;;:::o;4216:194::-;;4339:2;4327:9;4318:7;4314:23;4310:32;4307:2;;;4360:6;4352;4345:22;4307:2;-1:-1:-1;4388:16:1;;4297:113;-1:-1:-1;4297:113:1:o;4415:255::-;;;4555:2;4543:9;4534:7;4530:23;4526:32;4523:2;;;4576:6;4568;4561:22;4523:2;-1:-1:-1;;4604:16:1;;4660:2;4645:18;;;4639:25;4604:16;;4639:25;;-1:-1:-1;4513:157:1:o;4675:333::-;-1:-1:-1;;4902:2:1;4898:15;;;4894:24;;4882:37;;4953:15;;;;4949:24;4944:2;4935:12;;4928:46;4999:2;4990:12;;4822:186::o;5013:274::-;;5180:6;5174:13;5196:53;5242:6;5237:3;5230:4;5222:6;5218:17;5196:53;:::i;:::-;5265:16;;;;;5150:137;-1:-1:-1;;5150:137:1:o;5292:392::-;-1:-1:-1;;;5550:27:1;;5602:1;5593:11;;5586:27;;;;5638:2;5629:12;;5622:28;5675:2;5666:12;;5540:144::o;5689:636::-;-1:-1:-1;;;;;;6048:26:1;;6111:2;6107:15;;;;-1:-1:-1;;6103:53:1;6099:1;6090:11;;6083:74;6182:2;6173:12;;6166:28;6224:66;6219:2;6210:12;;6203:88;6316:2;6307:12;;6038:287::o;6330:203::-;-1:-1:-1;;;;;6494:32:1;;;;6476:51;;6464:2;6449:18;;6431:102::o;6538:304::-;-1:-1:-1;;;;;6768:15:1;;;6750:34;;6820:15;;6815:2;6800:18;;6793:43;6700:2;6685:18;;6667:175::o;6847:375::-;-1:-1:-1;;;;;7105:15:1;;;7087:34;;7157:15;;;;7152:2;7137:18;;7130:43;7204:2;7189:18;;7182:34;;;;7037:2;7022:18;;7004:218::o;7227:274::-;-1:-1:-1;;;;;7419:32:1;;;;7401:51;;7483:2;7468:18;;7461:34;7389:2;7374:18;;7356:145::o;7506:661::-;7677:2;7729:21;;;7799:13;;7702:18;;;7821:22;;;7506:661;;7677:2;7900:15;;;;7874:2;7859:18;;;7506:661;7946:195;7960:6;7957:1;7954:13;7946:195;;;8025:13;;-1:-1:-1;;;;;8021:39:1;8009:52;;8116:15;;;;8081:12;;;;8057:1;7975:9;7946:195;;;-1:-1:-1;8158:3:1;;7657:510;-1:-1:-1;;;;;;7657:510:1:o;8172:187::-;8337:14;;8330:22;8312:41;;8300:2;8285:18;;8267:92::o;8364:177::-;8510:25;;;8498:2;8483:18;;8465:76::o;8546:591::-;8833:25;;;-1:-1:-1;;;;;8932:15:1;;;8927:2;8912:18;;8905:43;8984:15;;;;8979:2;8964:18;;8957:43;9031:2;9016:18;;9009:34;9074:3;9059:19;;9052:35;;;;8885:3;9103:19;;9096:35;8820:3;8805:19;;8787:350::o;9142:398::-;9369:25;;;9442:4;9430:17;;;;9425:2;9410:18;;9403:45;9479:2;9464:18;;9457:34;9522:2;9507:18;;9500:34;9356:3;9341:19;;9323:217::o;10002:383::-;;10151:2;10140:9;10133:21;10183:6;10177:13;10226:6;10221:2;10210:9;10206:18;10199:34;10242:66;10301:6;10296:2;10285:9;10281:18;10276:2;10268:6;10264:15;10242:66;:::i;:::-;10369:2;10348:15;-1:-1:-1;;10344:29:1;10329:45;;;;10376:2;10325:54;;10123:262;-1:-1:-1;;10123:262:1:o;10390:406::-;10592:2;10574:21;;;10631:2;10611:18;;;10604:30;10670:34;10665:2;10650:18;;10643:62;-1:-1:-1;;;10736:2:1;10721:18;;10714:40;10786:3;10771:19;;10564:232::o;10801:403::-;11003:2;10985:21;;;11042:2;11022:18;;;11015:30;11081:34;11076:2;11061:18;;11054:62;-1:-1:-1;;;11147:2:1;11132:18;;11125:37;11194:3;11179:19;;10975:229::o;11209:329::-;11411:2;11393:21;;;11450:1;11430:18;;;11423:29;-1:-1:-1;;;11483:2:1;11468:18;;11461:36;11529:2;11514:18;;11383:155::o;11543:356::-;11745:2;11727:21;;;11764:18;;;11757:30;11823:34;11818:2;11803:18;;11796:62;11890:2;11875:18;;11717:182::o;11904:339::-;12106:2;12088:21;;;12145:2;12125:18;;;12118:30;-1:-1:-1;;;12179:2:1;12164:18;;12157:45;12234:2;12219:18;;12078:165::o;12248:356::-;12450:2;12432:21;;;12469:18;;;12462:30;12528:34;12523:2;12508:18;;12501:62;12595:2;12580:18;;12422:182::o;12609:344::-;12811:2;12793:21;;;12850:2;12830:18;;;12823:30;-1:-1:-1;;;12884:2:1;12869:18;;12862:50;12944:2;12929:18;;12783:170::o;12958:403::-;13160:2;13142:21;;;13199:2;13179:18;;;13172:30;13238:34;13233:2;13218:18;;13211:62;-1:-1:-1;;;13304:2:1;13289:18;;13282:37;13351:3;13336:19;;13132:229::o;13366:341::-;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;-1:-1:-1;;;13641:2:1;13626:18;;13619:47;13698:2;13683:18;;13540:167::o;13712:406::-;13914:2;13896:21;;;13953:2;13933:18;;;13926:30;13992:34;13987:2;13972:18;;13965:62;-1:-1:-1;;;14058:2:1;14043:18;;14036:40;14108:3;14093:19;;13886:232::o;14123:355::-;14325:2;14307:21;;;14364:2;14344:18;;;14337:30;14403:33;14398:2;14383:18;;14376:61;14469:2;14454:18;;14297:181::o;14483:353::-;14685:2;14667:21;;;14724:2;14704:18;;;14697:30;14763:31;14758:2;14743:18;;14736:59;14827:2;14812:18;;14657:179::o;15023:319::-;15225:25;;;15281:2;15266:18;;15259:34;;;;15324:2;15309:18;;15302:34;15213:2;15198:18;;15180:162::o;15347:184::-;15519:4;15507:17;;;;15489:36;;15477:2;15462:18;;15444:87::o;15536:128::-;;15607:1;15603:6;15600:1;15597:13;15594:2;;;15613:18;;:::i;:::-;-1:-1:-1;15649:9:1;;15584:80::o;15669:217::-;;15735:1;15725:2;;-1:-1:-1;;;15760:31:1;;15814:4;15811:1;15804:15;15842:4;15767:1;15832:15;15725:2;-1:-1:-1;15871:9:1;;15715:171::o;15891:453::-;15987:6;16010:5;16024:314;16073:1;16110:2;16100:8;16097:16;16087:2;;16117:5;;;16087:2;16158:4;16153:3;16149:14;16143:4;16140:24;16137:2;;;16167:18;;:::i;:::-;16217:2;16207:8;16203:17;16200:2;;;16232:16;;;;16200:2;16311:17;;;;;16271:15;;16024:314;;;15968:376;;;;;;;:::o;16349:139::-;;16438:44;-1:-1:-1;;16465:8:1;16459:4;16493:922;16577:8;16567:2;;-1:-1:-1;16618:1:1;16632:5;;16567:2;16666:4;16656:2;;-1:-1:-1;16703:1:1;16717:5;;16656:2;16748:4;16766:1;16761:59;;;;16834:1;16829:183;;;;16741:271;;16761:59;16791:1;16782:10;;16805:5;;;16829:183;16866:3;16856:8;16853:17;16850:2;;;16873:18;;:::i;:::-;16929:1;16919:8;16915:16;16906:25;;16957:3;16950:5;16947:14;16944:2;;;16964:18;;:::i;:::-;16997:5;;;16741:271;;17096:2;17086:8;17083:16;17077:3;17071:4;17068:13;17064:36;17058:2;17048:8;17045:16;17040:2;17034:4;17031:12;17027:35;17024:77;17021:2;;;-1:-1:-1;17133:19:1;;;17168:14;;;17165:2;;;17185:18;;:::i;:::-;17218:5;;17021:2;17265:42;17303:3;17293:8;17287:4;17284:1;17265:42;:::i;:::-;17340:6;17335:3;17331:16;17322:7;17319:29;17316:2;;;17351:18;;:::i;:::-;17389:20;;16557:858;-1:-1:-1;;;;16557:858:1:o;17420:168::-;;17526:1;17522;17518:6;17514:14;17511:1;17508:21;17503:1;17496:9;17489:17;17485:45;17482:2;;;17533:18;;:::i;:::-;-1:-1:-1;17573:9:1;;17472:116::o;17593:125::-;;17661:1;17658;17655:8;17652:2;;;17666:18;;:::i;:::-;-1:-1:-1;17703:9:1;;17642:76::o;17723:258::-;17795:1;17805:113;17819:6;17816:1;17813:13;17805:113;;;17895:11;;;17889:18;17876:11;;;17869:39;17841:2;17834:10;17805:113;;;17936:6;17933:1;17930:13;17927:2;;;-1:-1:-1;;17971:1:1;17953:16;;17946:27;17776:205::o;17986:135::-;;-1:-1:-1;;18046:17:1;;18043:2;;;18066:18;;:::i;:::-;-1:-1:-1;18113:1:1;18102:13;;18033:88::o;18126:127::-;18187:10;18182:3;18178:20;18175:1;18168:31;18218:4;18215:1;18208:15;18242:4;18239:1;18232:15;18258:133;-1:-1:-1;;;;;18335:31:1;;18325:42;;18315:2;;18381:1;18378;18371:12

Swarm Source

ipfs://79898c12db6c5ebabe253fe34822a623078e7ebccc013ed63f9ea96d21b70822

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.