ETH Price: $3,164.08 (-8.83%)
Gas: 3 Gwei

Token

Range Pool Token (RPT)
 

Overview

Max Total Supply

24,713.564735274372633472 RPT

Holders

198

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
hypnotoad.eth
Balance
1.679411015752150579 RPT

Value
$0.00
0x4547a39b959496b0b0f5be9aba127e60b894d1a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RangePool

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

// NOTICE: Contract begins line 345

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC20 is IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol) {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

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

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        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 safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "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 IOwnable {
  function owner() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

abstract contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

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

    modifier onlyOwner() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyOwner() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyOwner() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

/**
 * Range Pool is a RangeSwap ERC20 token that facilitates trades between stablecoins. We execute "optimistic swaps" --
 * essentially, the pool assumes all tokens to be worth the same amount at all times, and executes as such.
 * The caveat is that tokens must remain within a range, determined by Allocation Points (AP). For example,
 * token A with (lowAP = 1e8) and (highAP = 5e8) must make up 10%-50% of the pool at all times.
 * RangeSwap allows for cheaper execution and higher capital efficiency than existing, priced swap protocols.
 */
contract RangePool is ERC20, Ownable {

    using SafeMath for uint;
    using SafeERC20 for IERC20;
    using SafeERC20 for ERC20;
    using Address for address;


    /* ========== EVENTS ========== */

    event Swap( address, uint, address );
    event Add( address, uint );
    event Remove( address, uint );

    event TokenAdded( address, uint, uint );
    event BoundsChanged( address, uint, uint );
    event Accepting( address, bool );
    event FeeChanged( uint );


    /* ========== STRUCTS ========== */

    struct PoolToken {
        uint lowAP; // 9 decimals
        uint highAP; // 9 decimals
        bool accepting; // can send in (swap or add)
        bool pushed; // pushed to tokens list
    }


    /* ========== STATE VARIABLES ========== */

    mapping( address => PoolToken ) public tokenInfo;
    address[] public tokens;
    uint public totalTokens;

    uint public fee; // 9 decimals
    
    constructor() ERC20( 'Range Pool Token', 'RPT' ) {
        _mint( msg.sender, 1e18 );
        totalTokens = 1e18;
    }

    /* ========== SWAP ========== */

    // swap amount from firstToken to secondToken
    function swap( address firstToken, uint amount, address secondToken ) external {
        require( amount <= maxCanSwap( firstToken, secondToken ), "Exceeds limit" );

        emit Swap( firstToken, amount, secondToken );

        uint feeToTake = amount.mul(fee).div(1e9);
        totalTokens = totalTokens.add( feeToTake );

        IERC20( firstToken ).safeTransferFrom( msg.sender, address(this), amount ); 
        IERC20( secondToken ).safeTransfer( msg.sender, amount.sub( feeToTake ) ); // take fee on amount
    }

    /* ========== ADD LIQUIDITY ========== */

    // add token to pool as liquidity. returns number of pool tokens minted.
    function add( address token, uint amount ) external returns ( uint amount_ ) {
        amount_ = value( amount ); // do this before changing totalTokens or totalSupply

        totalTokens = totalTokens.add( amount ); // add amount to total first

        require( amount <= maxCanAdd( token ), "Exceeds limit" );

        IERC20( token ).safeTransferFrom( msg.sender, address(this), amount );
        emit Add( token, amount );

        _mint( msg.sender, amount_ );
    }

    // add liquidity evenly across all tokens. returns number of pool tokens minted.
    function addAll( uint amount ) external returns ( uint amount_ ) {
        uint sum;
        for ( uint i = 0; i < tokens.length; i++ ) {
            IERC20 token = IERC20( tokens[i] );
            uint send = amount.mul( token.balanceOf( address(this) ) ).div( totalTokens );
            if (send > 0) {
                token.safeTransferFrom( msg.sender, address(this), send );
                emit Add( tokens[i], send );
                sum = sum.add(send);
            }
        }
        amount_ = value( sum );

        totalTokens = totalTokens.add( sum ); // add amount second (to not skew pool)
        _mint( msg.sender, amount_ );
    }

    /* ========== REMOVE LIQUIDITY ========== */

    // remove token from liquidity, burning pool token
    // pass in amount token to remove, returns amount_ pool tokens burned
    function remove( address token, uint amount ) external returns (uint amount_) {
        amount_ = value( amount ); // token balance => pool token balance
        amount = amount.sub( amount.mul( fee ).div( 1e9 ) ); // take fee

        require( amount <= maxCanRemove( token ), "Exceeds limit" );
        emit Remove( token, amount );

        _burn( msg.sender, amount_ ); // burn pool token
        totalTokens = totalTokens.sub( amount ); // remove amount from pool less fees

        IERC20( token ).safeTransfer( msg.sender, amount ); // send token removed
    }

    // remove liquidity evenly across all tokens 
    // pass in amount tokens to remove, returns amount_ pool tokens burned
    function removeAll( uint amount ) public returns (uint amount_) {
        uint sum;
        for ( uint i = 0; i < tokens.length; i++ ) {
            IERC20 token = IERC20( tokens[i] );
            uint send = amount.mul( token.balanceOf( address(this) ) ).div( totalTokens );

            if ( send > 0 ) {
                uint minusFee = send.sub( send.mul( fee ).div( 1e9 ) );
                token.safeTransfer( msg.sender, minusFee );
                emit Remove( tokens[i], minusFee ); // take fee
                sum = sum.add(send);
            }
        }

        amount_ = value( sum );
        _burn( msg.sender, amount_ );
        totalTokens = totalTokens.sub( sum.sub( sum.mul( fee ).div( 1e9 ) ) ); // remove amount from pool less fees
    }

    /* ========== VIEW FUNCTIONS ========== */

    // number of tokens 1 pool token can be redeemed for
    function redemptionValue() public view returns (uint value_) {
        value_ = totalTokens.mul(1e18).div( totalSupply() );
    } 

    // token value => pool token value
    function value( uint amount ) public view returns ( uint ) {
        return amount.mul( 1e18 ).div( redemptionValue() );
    }

    // maximum number of token that can be added to pool
    function maxCanAdd( address token ) public view returns ( uint ) {
        require( tokenInfo[token].accepting, "Not accepting token" );
        uint maximum = totalTokens.mul( tokenInfo[ token ].highAP ).div( 1e9 );
        uint balance = IERC20( token ).balanceOf( address(this) );
        return maximum.sub( balance );
    }

    // maximum number of token that can be removed from pool
    function maxCanRemove( address token ) public view returns ( uint ) {
        uint minimum = totalTokens.mul( tokenInfo[ token ].lowAP ).div( 1e9 );
        uint balance = IERC20( token ).balanceOf( address(this) );
        return balance.sub( minimum );
    }

    // maximum size of trade from first token to second token
    function maxCanSwap( address firstToken, address secondToken ) public view returns ( uint ) {
        uint canAdd = maxCanAdd( firstToken);
        uint canRemove = maxCanRemove( secondToken );

        if ( canAdd > canRemove ) {
            return canRemove;
        } else {
            return canAdd;
        }
    }

    // amount of secondToken returned by swap
    function amountOut( address firstToken, uint amount, address secondToken ) external view returns ( uint ) {
        if ( amount <= maxCanSwap( firstToken, secondToken ) ) {
            return amount.sub( amount.mul( fee ).div( 1e9 ) );
        } else {
            return 0;
        }
    }

    /* ========== SETTINGS ========== */

    // set fee taken on trades
    function setFee( uint newFee ) external onlyOwner() {
        fee = newFee;
        emit FeeChanged( fee );
    }

    // add new token to pool. allocation points are 9 decimals.
    // must call toggleAccept to activate token
    function addToken( address token, uint lowAP, uint highAP ) external onlyOwner() {
        require( !tokenInfo[ token ].pushed );

        tokenInfo[ token ] = PoolToken({
            lowAP: lowAP,
            highAP: highAP,
            accepting: false,
            pushed: true
        });

        tokens.push( token );
        emit TokenAdded( token, lowAP, highAP );
    }

    // change bounds of tokens in pool
    function changeBound( address token, uint newLow, uint newHigh ) external onlyOwner() {
        tokenInfo[ token ].highAP = newHigh;
        tokenInfo[ token ].lowAP = newLow;

        emit BoundsChanged( token, newLow, newHigh );
    }

    // toggle whether to accept incoming token
    // setting token to false will not allow swaps as incoming token or adds
    function toggleAccept( address token ) external onlyOwner() {
        tokenInfo[ token ].accepting = !tokenInfo[ token ].accepting;
        emit Accepting( token, tokenInfo[ token ].accepting );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Accepting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"BoundsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"FeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Remove","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"add","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addAll","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"lowAP","type":"uint256"},{"internalType":"uint256","name":"highAP","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"firstToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"secondToken","type":"address"}],"name":"amountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newLow","type":"uint256"},{"internalType":"uint256","name":"newHigh","type":"uint256"}],"name":"changeBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxCanAdd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxCanRemove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"firstToken","type":"address"},{"internalType":"address","name":"secondToken","type":"address"}],"name":"maxCanSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redemptionValue","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"remove","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeAll","outputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"firstToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"secondToken","type":"address"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"toggleAccept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenInfo","outputs":[{"internalType":"uint256","name":"lowAP","type":"uint256"},{"internalType":"uint256","name":"highAP","type":"uint256"},{"internalType":"bool","name":"accepting","type":"bool"},{"internalType":"bool","name":"pushed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f52616e676520506f6f6c20546f6b656e000000000000000000000000000000008152506040518060400160405280600381526020017f525054000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000427565b508060049080519060200190620000af92919062000427565b506012600560006101000a81548160ff021916908360ff160217905550505033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a3620001a633670de0b6b3a7640000620001bb60201b60201c565b670de0b6b3a7640000600981905550620004dd565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b62000273600083836200039960201b60201c565b6200028f816002546200039e60201b62002c221790919060201c565b600281905550620002ed816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200039e60201b62002c221790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000808284019050838110156200041d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200045f5760008555620004ab565b82601f106200047a57805160ff1916838001178555620004ab565b82800160010185558215620004ab579182015b82811115620004aa5782518255916020019190600101906200048d565b5b509050620004ba9190620004be565b5090565b5b80821115620004d9576000816000905550600101620004bf565b5090565b613e2280620004ed6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063899ac5b81161011a578063abe7f1ab116100ad578063ddca3f431161007c578063ddca3f4314610b40578063dee1f2af14610b5e578063ef4474cd14610bb6578063f5d82b6b14610bd4578063f5dab71114610c3657610206565b8063abe7f1ab146109cc578063b08b6f6314610a2e578063c5a46ee614610a86578063dd62ed3e14610ac857610206565b80639939fa0b116100e95780639939fa0b1461086a5780639bf73784146108c2578063a457c2d714610904578063a9059cbb1461096857610206565b8063899ac5b8146106f75780638a41c45c1461076f5780638da5cb5b146107b357806395d89b41146107e757610206565b8063313ce5671161019d5780635a96ac0a1161016c5780635a96ac0a146105db57806369fe0e2d146105e55780636d069a671461061357806370a08231146106815780637e1c0c09146106d957610206565b8063313ce567146104ba57806339509351146104db57806346f68ee91461053f5780634f64b2be1461058357610206565b8063095ea7b3116101d9578063095ea7b31461035c57806318160ddd146103c057806322043f9b146103de57806323b872dd1461043657610206565b8063069debba1461020b57806306fdde031461024d57806308162cc5146102d0578063089208d814610352575b600080fd5b6102376004803603602081101561022157600080fd5b8101908080359060200190929190505050610ca7565b6040518082815260200191505060405180910390f35b610255610f5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61033c600480360360608110156102e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ffe565b6040518082815260200191505060405180910390f35b61035a611060565b005b6103a86004803603604081101561037257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111e4565b60405180821515815260200191505060405180910390f35b6103c86111fb565b6040518082815260200191505060405180910390f35b610420600480360360208110156103f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611205565b6040518082815260200191505060405180910390f35b6104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611339565b60405180821515815260200191505060405180910390f35b6104c2611404565b604051808260ff16815260200191505060405180910390f35b610527600480360360408110156104f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141b565b60405180821515815260200191505060405180910390f35b6105816004803603602081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c0565b005b6105af6004803603602081101561059957600080fd5b81019080803590602001909291905050506116c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e3611708565b005b610611600480360360208110156105fb57600080fd5b81019080803590602001909291905050506118b1565b005b61067f6004803603606081101561062957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119b7565b005b6106c36004803603602081101561069757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b63565b6040518082815260200191505060405180910390f35b6106e1611bab565b6040518082815260200191505060405180910390f35b6107596004803603604081101561070d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb1565b6040518082815260200191505060405180910390f35b6107b16004803603602081101561078557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bea565b005b6107bb611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107ef611e2a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082f578082015181840152602081019050610814565b50505050905090810190601f16801561085c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108c06004803603606081101561088057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611ecc565b005b6108ee600480360360208110156108d857600080fd5b810190808035906020019092919050505061207f565b6040518082815260200191505060405180910390f35b6109506004803603604081101561091a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122b8565b60405180821515815260200191505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612377565b60405180821515815260200191505060405180910390f35b610a18600480360360408110156109e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061238e565b6040518082815260200191505060405180910390f35b610a7060048036036020811015610a4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612503565b6040518082815260200191505060405180910390f35b610ab260048036036020811015610a9c57600080fd5b81019080803590602001909291905050506126fa565b6040518082815260200191505060405180910390f35b610b2a60048036036040811015610ade57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612737565b6040518082815260200191505060405180910390f35b610b486127be565b6040518082815260200191505060405180910390f35b610bb460048036036060811015610b7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506127c4565b005b610bbe612a63565b6040518082815260200191505060405180910390f35b610c2060048036036040811015610bea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612aa0565b6040518082815260200191505060405180910390f35b610c7860048036036020811015610c4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b604051808581526020018481526020018315158152602001821515815260200194505050505060405180910390f35b60008060005b600880549050811015610ee957600060088281548110610cc957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610dc0600954610db28473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d6020811015610d9257600080fd5b810190808051906020019092919050505089612caa90919063ffffffff16565b612d3090919063ffffffff16565b90506000811115610eda576000610e0a610dfb633b9aca00610ded600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b9050610e3733828573ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b7f8e2f5fcc57c31738b03aa91accdd55b13dc355a4fa1707d953f49c973e18e6e460088581548110610e6557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1610ed68286612c2290919063ffffffff16565b9450505b50508080600101915050610cad565b50610ef3816126fa565b9150610eff3383612e66565b610f50610f3f610f30633b9aca00610f22600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b600954612d7a90919063ffffffff16565b60098190555050919050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ff45780601f10610fc957610100808354040283529160200191610ff4565b820191906000526020600020905b815481529060010190602001808311610fd757829003601f168201915b5050505050905090565b600061100a8483611bb1565b83116110545761104d61103e633b9aca00611030600a5487612caa90919063ffffffff16565b612d3090919063ffffffff16565b84612d7a90919063ffffffff16565b9050611059565b600090505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006111f133848461302a565b6001905092915050565b6000600254905090565b600080611275633b9aca00611267600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112e057600080fd5b505afa1580156112f4573d6000803e3d6000fd5b505050506040513d602081101561130a57600080fd5b810190808051906020019092919050505090506113308282612d7a90919063ffffffff16565b92505050919050565b6000611346848484613221565b6113f984336113f485604051806060016040528060288152602001613d0c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b61302a565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006114b633846114b185600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b61302a565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c5b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600881815481106116d957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613cc96022913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a819055507f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3600a546040518082815260200191505060405180910390a150565b6119c18382611bb1565b821115611a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b7fb6d9aa17ec350dac77ff1dbd32fa64587b27d4fe0d1f32d441e45dd69bd3e814838383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a16000611ad6633b9aca00611ac8600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b9050611aed81600954612c2290919063ffffffff16565b600981905550611b203330858773ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b611b5d33611b378386612d7a90919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60095481565b600080611bbd84612503565b90506000611bca84611205565b905080821115611bde578092505050611be4565b81925050505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055507f4782d1fd46479d36583ec86b4865022b110427b6f10c830c6fb53d3c582c287181600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a150565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ec25780601f10611e9757610100808354040283529160200191611ec2565b820191906000526020600020905b815481529060010190602001808311611ea557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507ffacb647c67fe20aa877d15de830a14f321d6014069522547b70bb68622dad058838383604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b60008060005b600880549050811015612281576000600882815481106120a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061219860095461218a8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561214057600080fd5b505afa158015612154573d6000803e3d6000fd5b505050506040513d602081101561216a57600080fd5b810190808051906020019092919050505089612caa90919063ffffffff16565b612d3090919063ffffffff16565b90506000811115612272576121d03330838573ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b7f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab600884815481106121fe57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a161226f8185612c2290919063ffffffff16565b93505b50508080600101915050612085565b5061228b816126fa565b91506122a281600954612c2290919063ffffffff16565b6009819055506122b23383613663565b50919050565b600061236d338461236885604051806060016040528060258152602001613dc860259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b61302a565b6001905092915050565b6000612384338484613221565b6001905092915050565b6000612399826126fa565b90506123d86123c9633b9aca006123bb600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b91506123e383611205565b821115612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b7f8e2f5fcc57c31738b03aa91accdd55b13dc355a4fa1707d953f49c973e18e6e48383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16124b73382612e66565b6124cc82600954612d7a90919063ffffffff16565b6009819055506124fd33838573ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7420616363657074696e6720746f6b656e0000000000000000000000000081525060200191505060405180910390fd5b6000612636633b9aca00612628600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126a157600080fd5b505afa1580156126b5573d6000803e3d6000fd5b505050506040513d60208110156126cb57600080fd5b810190808051906020019092919050505090506126f18183612d7a90919063ffffffff16565b92505050919050565b6000612730612707612a63565b612722670de0b6b3a764000085612caa90919063ffffffff16565b612d3090919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff16156128e157600080fd5b604051806080016040528083815260200182815260200160001515815260200160011515815250600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff0219169083151502179055509050506008839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa818a22273fc309f0a3682b642c74c5b5c25c0615ff378d07767cd231e19fffc838383604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b6000612a9b612a706111fb565b612a8d670de0b6b3a7640000600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905090565b6000612aab826126fa565b9050612ac282600954612c2290919063ffffffff16565b600981905550612ad183612503565b821115612b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b612b733330848673ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b7f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab8383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1612bd23382613663565b92915050565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b600080828401905083811015612ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415612cbd5760009050612d2a565b6000828402905082848281612cce57fe5b0414612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ceb6021913960400191505060405180910390fd5b809150505b92915050565b6000612d7283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061382a565b905092915050565b6000612dbc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e2565b905092915050565b612e618363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506138f0565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d346021913960400191505060405180910390fd5b612ef8826000836139df565b612f6381604051806060016040528060228152602001613c39602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fba81600254612d7a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d7a6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613136576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c816022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d556025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c166023913960400191505060405180910390fd5b6133388383836139df565b6133a381604051806060016040528060268152602001613ca3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613436816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061358f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613554578082015181840152602081019050613539565b50505050905090810190601f1680156135815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61365d846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506138f0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613712600083836139df565b61372781600254612c2290919063ffffffff16565b60028190555061377e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080831182906138d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561389b578082015181840152602081019050613880565b50505050905090810190601f1680156138c85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816138e257fe5b049050809150509392505050565b6060613952826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e49092919063ffffffff16565b90506000815111156139da5780806020019051602081101561397357600080fd5b81019080805190602001909291905050506139d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613d9e602a913960400191505060405180910390fd5b5b505050565b505050565b60606139f384846000856139fc565b90509392505050565b6060613a0785613c02565b613a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613ac95780518252602082019150602081019050602083039250613aa6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613b2b576040519150601f19603f3d011682016040523d82523d6000602084013e613b30565b606091505b50915091508115613b45578092505050613bfa565b600081511115613b585780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bbf578082015181840152602081019050613ba4565b50505050905090810190601f168015613bec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e401a3f90f828eeb8497a8b411c89b27d35122dd9f7a96affa1b3a693e34b6e64736f6c63430007050033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063899ac5b81161011a578063abe7f1ab116100ad578063ddca3f431161007c578063ddca3f4314610b40578063dee1f2af14610b5e578063ef4474cd14610bb6578063f5d82b6b14610bd4578063f5dab71114610c3657610206565b8063abe7f1ab146109cc578063b08b6f6314610a2e578063c5a46ee614610a86578063dd62ed3e14610ac857610206565b80639939fa0b116100e95780639939fa0b1461086a5780639bf73784146108c2578063a457c2d714610904578063a9059cbb1461096857610206565b8063899ac5b8146106f75780638a41c45c1461076f5780638da5cb5b146107b357806395d89b41146107e757610206565b8063313ce5671161019d5780635a96ac0a1161016c5780635a96ac0a146105db57806369fe0e2d146105e55780636d069a671461061357806370a08231146106815780637e1c0c09146106d957610206565b8063313ce567146104ba57806339509351146104db57806346f68ee91461053f5780634f64b2be1461058357610206565b8063095ea7b3116101d9578063095ea7b31461035c57806318160ddd146103c057806322043f9b146103de57806323b872dd1461043657610206565b8063069debba1461020b57806306fdde031461024d57806308162cc5146102d0578063089208d814610352575b600080fd5b6102376004803603602081101561022157600080fd5b8101908080359060200190929190505050610ca7565b6040518082815260200191505060405180910390f35b610255610f5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61033c600480360360608110156102e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ffe565b6040518082815260200191505060405180910390f35b61035a611060565b005b6103a86004803603604081101561037257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111e4565b60405180821515815260200191505060405180910390f35b6103c86111fb565b6040518082815260200191505060405180910390f35b610420600480360360208110156103f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611205565b6040518082815260200191505060405180910390f35b6104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611339565b60405180821515815260200191505060405180910390f35b6104c2611404565b604051808260ff16815260200191505060405180910390f35b610527600480360360408110156104f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141b565b60405180821515815260200191505060405180910390f35b6105816004803603602081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c0565b005b6105af6004803603602081101561059957600080fd5b81019080803590602001909291905050506116c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105e3611708565b005b610611600480360360208110156105fb57600080fd5b81019080803590602001909291905050506118b1565b005b61067f6004803603606081101561062957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119b7565b005b6106c36004803603602081101561069757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b63565b6040518082815260200191505060405180910390f35b6106e1611bab565b6040518082815260200191505060405180910390f35b6107596004803603604081101561070d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb1565b6040518082815260200191505060405180910390f35b6107b16004803603602081101561078557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bea565b005b6107bb611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107ef611e2a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082f578082015181840152602081019050610814565b50505050905090810190601f16801561085c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108c06004803603606081101561088057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611ecc565b005b6108ee600480360360208110156108d857600080fd5b810190808035906020019092919050505061207f565b6040518082815260200191505060405180910390f35b6109506004803603604081101561091a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122b8565b60405180821515815260200191505060405180910390f35b6109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612377565b60405180821515815260200191505060405180910390f35b610a18600480360360408110156109e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061238e565b6040518082815260200191505060405180910390f35b610a7060048036036020811015610a4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612503565b6040518082815260200191505060405180910390f35b610ab260048036036020811015610a9c57600080fd5b81019080803590602001909291905050506126fa565b6040518082815260200191505060405180910390f35b610b2a60048036036040811015610ade57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612737565b6040518082815260200191505060405180910390f35b610b486127be565b6040518082815260200191505060405180910390f35b610bb460048036036060811015610b7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506127c4565b005b610bbe612a63565b6040518082815260200191505060405180910390f35b610c2060048036036040811015610bea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612aa0565b6040518082815260200191505060405180910390f35b610c7860048036036020811015610c4c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b604051808581526020018481526020018315158152602001821515815260200194505050505060405180910390f35b60008060005b600880549050811015610ee957600060088281548110610cc957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610dc0600954610db28473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d6020811015610d9257600080fd5b810190808051906020019092919050505089612caa90919063ffffffff16565b612d3090919063ffffffff16565b90506000811115610eda576000610e0a610dfb633b9aca00610ded600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b9050610e3733828573ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b7f8e2f5fcc57c31738b03aa91accdd55b13dc355a4fa1707d953f49c973e18e6e460088581548110610e6557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1610ed68286612c2290919063ffffffff16565b9450505b50508080600101915050610cad565b50610ef3816126fa565b9150610eff3383612e66565b610f50610f3f610f30633b9aca00610f22600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b600954612d7a90919063ffffffff16565b60098190555050919050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ff45780601f10610fc957610100808354040283529160200191610ff4565b820191906000526020600020905b815481529060010190602001808311610fd757829003601f168201915b5050505050905090565b600061100a8483611bb1565b83116110545761104d61103e633b9aca00611030600a5487612caa90919063ffffffff16565b612d3090919063ffffffff16565b84612d7a90919063ffffffff16565b9050611059565b600090505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006111f133848461302a565b6001905092915050565b6000600254905090565b600080611275633b9aca00611267600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112e057600080fd5b505afa1580156112f4573d6000803e3d6000fd5b505050506040513d602081101561130a57600080fd5b810190808051906020019092919050505090506113308282612d7a90919063ffffffff16565b92505050919050565b6000611346848484613221565b6113f984336113f485604051806060016040528060288152602001613d0c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b61302a565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006114b633846114b185600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b61302a565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c5b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600881815481106116d957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613cc96022913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a819055507f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3600a546040518082815260200191505060405180910390a150565b6119c18382611bb1565b821115611a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b7fb6d9aa17ec350dac77ff1dbd32fa64587b27d4fe0d1f32d441e45dd69bd3e814838383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a16000611ad6633b9aca00611ac8600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b9050611aed81600954612c2290919063ffffffff16565b600981905550611b203330858773ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b611b5d33611b378386612d7a90919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60095481565b600080611bbd84612503565b90506000611bca84611205565b905080821115611bde578092505050611be4565b81925050505b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055507f4782d1fd46479d36583ec86b4865022b110427b6f10c830c6fb53d3c582c287181600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a150565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ec25780601f10611e9757610100808354040283529160200191611ec2565b820191906000526020600020905b815481529060010190602001808311611ea557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507ffacb647c67fe20aa877d15de830a14f321d6014069522547b70bb68622dad058838383604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b60008060005b600880549050811015612281576000600882815481106120a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061219860095461218a8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561214057600080fd5b505afa158015612154573d6000803e3d6000fd5b505050506040513d602081101561216a57600080fd5b810190808051906020019092919050505089612caa90919063ffffffff16565b612d3090919063ffffffff16565b90506000811115612272576121d03330838573ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b7f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab600884815481106121fe57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a161226f8185612c2290919063ffffffff16565b93505b50508080600101915050612085565b5061228b816126fa565b91506122a281600954612c2290919063ffffffff16565b6009819055506122b23383613663565b50919050565b600061236d338461236885604051806060016040528060258152602001613dc860259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b61302a565b6001905092915050565b6000612384338484613221565b6001905092915050565b6000612399826126fa565b90506123d86123c9633b9aca006123bb600a5486612caa90919063ffffffff16565b612d3090919063ffffffff16565b83612d7a90919063ffffffff16565b91506123e383611205565b821115612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b7f8e2f5fcc57c31738b03aa91accdd55b13dc355a4fa1707d953f49c973e18e6e48383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16124b73382612e66565b6124cc82600954612d7a90919063ffffffff16565b6009819055506124fd33838573ffffffffffffffffffffffffffffffffffffffff16612dc49092919063ffffffff16565b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff166125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7420616363657074696e6720746f6b656e0000000000000000000000000081525060200191505060405180910390fd5b6000612636633b9aca00612628600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126a157600080fd5b505afa1580156126b5573d6000803e3d6000fd5b505050506040513d60208110156126cb57600080fd5b810190808051906020019092919050505090506126f18183612d7a90919063ffffffff16565b92505050919050565b6000612730612707612a63565b612722670de0b6b3a764000085612caa90919063ffffffff16565b612d3090919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b3373ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612887576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff16156128e157600080fd5b604051806080016040528083815260200182815260200160001515815260200160011515815250600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff0219169083151502179055509050506008839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa818a22273fc309f0a3682b642c74c5b5c25c0615ff378d07767cd231e19fffc838383604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b6000612a9b612a706111fb565b612a8d670de0b6b3a7640000600954612caa90919063ffffffff16565b612d3090919063ffffffff16565b905090565b6000612aab826126fa565b9050612ac282600954612c2290919063ffffffff16565b600981905550612ad183612503565b821115612b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f45786365656473206c696d69740000000000000000000000000000000000000081525060200191505060405180910390fd5b612b733330848673ffffffffffffffffffffffffffffffffffffffff166135a2909392919063ffffffff16565b7f2728c9d3205d667bbc0eefdfeda366261b4d021949630c047f3e5834b30611ab8383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1612bd23382613663565b92915050565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b600080828401905083811015612ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415612cbd5760009050612d2a565b6000828402905082848281612cce57fe5b0414612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ceb6021913960400191505060405180910390fd5b809150505b92915050565b6000612d7283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061382a565b905092915050565b6000612dbc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e2565b905092915050565b612e618363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506138f0565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d346021913960400191505060405180910390fd5b612ef8826000836139df565b612f6381604051806060016040528060228152602001613c39602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fba81600254612d7a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d7a6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613136576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c816022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d556025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561332d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c166023913960400191505060405180910390fd5b6133388383836139df565b6133a381604051806060016040528060268152602001613ca3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613436816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061358f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613554578082015181840152602081019050613539565b50505050905090810190601f1680156135815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61365d846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506138f0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613712600083836139df565b61372781600254612c2290919063ffffffff16565b60028190555061377e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c2290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080831182906138d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561389b578082015181840152602081019050613880565b50505050905090810190601f1680156138c85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816138e257fe5b049050809150509392505050565b6060613952826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e49092919063ffffffff16565b90506000815111156139da5780806020019051602081101561397357600080fd5b81019080805190602001909291905050506139d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613d9e602a913960400191505060405180910390fd5b5b505050565b505050565b60606139f384846000856139fc565b90509392505050565b6060613a0785613c02565b613a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310613ac95780518252602082019150602081019050602083039250613aa6565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613b2b576040519150601f19603f3d011682016040523d82523d6000602084013e613b30565b606091505b50915091508115613b45578092505050613bfa565b600081511115613b585780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bbf578082015181840152602081019050613ba4565b50505050905090810190601f168015613bec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e401a3f90f828eeb8497a8b411c89b27d35122dd9f7a96affa1b3a693e34b6e64736f6c63430007050033

Deployed Bytecode Sourcemap

14201:8016:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18195:773;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5852:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20580:296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12981:157;;;:::i;:::-;;6704:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6129:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19861:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6879:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6038:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7204:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13146:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15059:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13417:221;;;:::i;:::-;;20960:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15384:531;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6237:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15089:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20196:329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22011:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12758:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5943:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21636:241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16628:663;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7426:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6364:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17482:578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19458:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19264:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6545:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15121:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21198:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19084:131;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16050:484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15004:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18195:773;18245:12;18270:8;18295:6;18289:481;18311:6;:13;;;;18307:1;:17;18289:481;;;18347:12;18370:6;18377:1;18370:9;;;;;;;;;;;;;;;;;;;;;;;;;18347:34;;18396:9;18408:65;18460:11;;18408:46;18420:5;:15;;;18445:4;18420:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18408:6;:10;;:46;;;;:::i;:::-;:50;;:65;;;;:::i;:::-;18396:77;;18502:1;18495:4;:8;18490:269;;;18525:13;18541:38;18551:26;18572:3;18551:15;18561:3;;18551:4;:8;;:15;;;;:::i;:::-;:19;;:26;;;;:::i;:::-;18541:4;:8;;:38;;;;:::i;:::-;18525:54;;18598:42;18618:10;18630:8;18598:5;:18;;;;:42;;;;;:::i;:::-;18664:29;18672:6;18679:1;18672:9;;;;;;;;;;;;;;;;;;;;;;;;;18683:8;18664:29;;;;;;;;;;;;;;;;;;;;;;;;;;18730:13;18738:4;18730:3;:7;;:13;;;;:::i;:::-;18724:19;;18490:269;;18289:481;;18326:3;;;;;;;18289:481;;;;18792:12;18799:3;18792:5;:12::i;:::-;18782:22;;18815:28;18822:10;18834:7;18815:5;:28::i;:::-;18868:55;18885:36;18894:25;18914:3;18894:14;18903:3;;18894;:7;;:14;;;;:::i;:::-;:18;;:25;;;;:::i;:::-;18885:3;:7;;:36;;;;:::i;:::-;18868:11;;:15;;:55;;;;:::i;:::-;18854:11;:69;;;;18195:773;;;;:::o;5852:83::-;5889:13;5922:5;5915:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5852:83;:::o;20580:296::-;20679:4;20712:37;20724:10;20736:11;20712:10;:37::i;:::-;20702:6;:47;20697:172;;20774:42;20786:28;20809:3;20786:17;20798:3;;20786:6;:10;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;20774:6;:10;;:42;;;;:::i;:::-;20767:49;;;;20697:172;20856:1;20849:8;;20580:296;;;;;;:::o;12981:157::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13096:1:::1;13063:37;;13080:6;;;;;;;;;;;13063:37;;;;;;;;;;;;13128:1;13111:6;;:19;;;;;;;;;;;;;;;;;;12981:157::o:0;6704:167::-;6787:4;6804:37;6813:10;6825:7;6834:6;6804:8;:37::i;:::-;6859:4;6852:11;;6704:167;;;;:::o;6129:100::-;6182:7;6209:12;;6202:19;;6129:100;:::o;19861:264::-;19922:4;19940:12;19955:54;20004:3;19955:43;19972:9;:18;19983:5;19972:18;;;;;;;;;;;;;;;:24;;;19955:11;;:15;;:43;;;;:::i;:::-;:47;;:54;;;;:::i;:::-;19940:69;;20020:12;20043:5;20035:25;;;20070:4;20035:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20020:57;;20095:22;20108:7;20095;:11;;:22;;;;:::i;:::-;20088:29;;;;19861:264;;;:::o;6879:317::-;6985:4;7002:36;7012:6;7020:9;7031:6;7002:9;:36::i;:::-;7049:117;7058:6;7066:10;7078:87;7114:6;7078:87;;;;;;;;;;;;;;;;;:11;:19;7090:6;7078:19;;;;;;;;;;;;;;;:31;7098:10;7078:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;7049:8;:117::i;:::-;7184:4;7177:11;;6879:317;;;;;:::o;6038:83::-;6079:5;6104:9;;;;;;;;;;;6097:16;;6038:83;:::o;7204:214::-;7292:4;7309:79;7318:10;7330:7;7339:48;7376:10;7339:11;:23;7351:10;7339:23;;;;;;;;;;;;;;;:32;7363:7;7339:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;7309:8;:79::i;:::-;7406:4;7399:11;;7204:214;;;;:::o;13146:259::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13268:1:::1;13247:23;;:9;:23;;;;13238:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13354:9;13329:36;;13346:6;;;;;;;;;;;13329:36;;;;;;;;;;;;13388:9;13376;;:21;;;;;;;;;;;;;;;;;;13146:259:::0;:::o;15059:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13417:221::-;13501:9;;;;;;;;;;;13487:23;;:10;:23;;;13478:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13590:9;;;;;;;;;;;13565:36;;13582:6;;;;;;;;;;;13565:36;;;;;;;;;;;;13621:9;;;;;;;;;;;13612:6;;:18;;;;;;;;;;;;;;;;;;13417:221::o;20960:116::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21029:6:::1;21023:3;:12;;;;21051:17;21063:3;;21051:17;;;;;;;;;;;;;;;;;;20960:116:::0;:::o;15384:531::-;15493:37;15505:10;15517:11;15493:10;:37::i;:::-;15483:6;:47;;15474:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15567:39;15573:10;15585:6;15593:11;15567:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15619:14;15636:24;15656:3;15636:15;15647:3;;15636:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;15619:41;;15685:28;15702:9;15685:11;;:15;;:28;;;;:::i;:::-;15671:11;:42;;;;15726:74;15765:10;15785:4;15792:6;15734:10;15726:37;;;;:74;;;;;;:::i;:::-;15812:73;15848:10;15860:23;15872:9;15860:6;:10;;:23;;;;:::i;:::-;15820:11;15812:34;;;;:73;;;;;:::i;:::-;15384:531;;;;:::o;6237:119::-;6303:7;6330:9;:18;6340:7;6330:18;;;;;;;;;;;;;;;;6323:25;;6237:119;;;:::o;15089:23::-;;;;:::o;20196:329::-;20281:4;20299:11;20313:22;20324:10;20313:9;:22::i;:::-;20299:36;;20346:14;20363:27;20377:11;20363:12;:27::i;:::-;20346:44;;20417:9;20408:6;:18;20403:115;;;20451:9;20444:16;;;;;;20403:115;20500:6;20493:13;;;;20196:329;;;;;:::o;22011:203::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22114:9:::1;:18;22125:5;22114:18;;;;;;;;;;;;;;;:28;;;;;;;;;;;;22113:29;22082:9;:18;22093:5;22082:18;;;;;;;;;;;;;;;:28;;;:60;;;;;;;;;;;;;;;;;;22158:48;22169:5;22176:9;:18;22187:5;22176:18;;;;;;;;;;;;;;;:28;;;;;;;;;;;;22158:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;22011:203:::0;:::o;12758:88::-;12805:7;12832:6;;;;;;;;;;;12825:13;;12758:88;:::o;5943:87::-;5982:13;6015:7;6008:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5943:87;:::o;21636:241::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21761:7:::1;21733:9;:18;21744:5;21733:18;;;;;;;;;;;;;;;:25;;:35;;;;21806:6;21779:9;:18;21790:5;21779:18;;;;;;;;;;;;;;;:24;;:33;;;;21830:39;21845:5;21852:6;21860:7;21830:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21636:241:::0;;;:::o;16628:663::-;16678:12;16704:8;16729:6;16723:400;16745:6;:13;;;;16741:1;:17;16723:400;;;16781:12;16804:6;16811:1;16804:9;;;;;;;;;;;;;;;;;;;;;;;;;16781:34;;16830:9;16842:65;16894:11;;16842:46;16854:5;:15;;;16879:4;16854:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16842:6;:10;;:46;;;;:::i;:::-;:50;;:65;;;;:::i;:::-;16830:77;;16933:1;16926:4;:8;16922:190;;;16955:57;16979:10;16999:4;17006;16955:5;:22;;;;:57;;;;;;:::i;:::-;17036:22;17041:6;17048:1;17041:9;;;;;;;;;;;;;;;;;;;;;;;;;17052:4;17036:22;;;;;;;;;;;;;;;;;;;;;;;;;;17083:13;17091:4;17083:3;:7;;:13;;;;:::i;:::-;17077:19;;16922:190;16723:400;;16760:3;;;;;;;16723:400;;;;17143:12;17150:3;17143:5;:12::i;:::-;17133:22;;17182;17199:3;17182:11;;:15;;:22;;;;:::i;:::-;17168:11;:36;;;;17255:28;17262:10;17274:7;17255:5;:28::i;:::-;16628:663;;;;:::o;7426:265::-;7519:4;7536:125;7545:10;7557:7;7566:94;7603:15;7566:94;;;;;;;;;;;;;;;;;:11;:23;7578:10;7566:23;;;;;;;;;;;;;;;:32;7590:7;7566:32;;;;;;;;;;;;;;;;:36;;:94;;;;;:::i;:::-;7536:8;:125::i;:::-;7679:4;7672:11;;7426:265;;;;:::o;6364:173::-;6450:4;6467:40;6477:10;6489:9;6500:6;6467:9;:40::i;:::-;6525:4;6518:11;;6364:173;;;;:::o;17482:578::-;17546:12;17581:15;17588:6;17581:5;:15::i;:::-;17571:25;;17655:42;17667:28;17690:3;17667:17;17679:3;;17667:6;:10;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;17655:6;:10;;:42;;;;:::i;:::-;17646:51;;17741:21;17755:5;17741:12;:21::i;:::-;17731:6;:31;;17722:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17797:23;17805:5;17812:6;17797:23;;;;;;;;;;;;;;;;;;;;;;;;;;17833:28;17840:10;17852:7;17833:5;:28::i;:::-;17905:25;17922:6;17905:11;;:15;;:25;;;;:::i;:::-;17891:11;:39;;;;17980:50;18010:10;18022:6;17988:5;17980:28;;;;:50;;;;;:::i;:::-;17482:578;;;;:::o;19458:333::-;19516:4;19543:9;:16;19553:5;19543:16;;;;;;;;;;;;;;;:26;;;;;;;;;;;;19534:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19605:12;19620:55;19670:3;19620:44;19637:9;:18;19648:5;19637:18;;;;;;;;;;;;;;;:25;;;19620:11;;:15;;:44;;;;:::i;:::-;:48;;:55;;;;:::i;:::-;19605:70;;19686:12;19709:5;19701:25;;;19736:4;19701:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19686:57;;19761:22;19774:7;19761;:11;;:22;;;;:::i;:::-;19754:29;;;;19458:333;;;:::o;19264:128::-;19316:4;19341:43;19365:17;:15;:17::i;:::-;19341:18;19353:4;19341:6;:10;;:18;;;;:::i;:::-;:22;;:43;;;;:::i;:::-;19334:50;;19264:128;;;:::o;6545:151::-;6634:7;6661:11;:18;6673:5;6661:18;;;;;;;;;;;;;;;:27;6680:7;6661:27;;;;;;;;;;;;;;;;6654:34;;6545:151;;;;:::o;15121:15::-;;;;:::o;21198:390::-;12905:10;12895:20;;:6;;;;;;;;;;;:20;;;12886:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21300:9:::1;:18;21311:5;21300:18;;;;;;;;;;;;;;;:25;;;;;;;;;;;;21299:26;21290:37;;;::::0;::::1;;21361:136;;;;;;;;21393:5;21361:136;;;;21421:6;21361:136;;;;21453:5;21361:136;;;;;;21481:4;21361:136;;;;::::0;21340:9:::1;:18;21351:5;21340:18;;;;;;;;;;;;;;;:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21510:6;21523:5;21510:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21546:34;21558:5;21565;21572:6;21546:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21198:390:::0;;;:::o;19084:131::-;19132:11;19165:42;19192:13;:11;:13::i;:::-;19165:21;19181:4;19165:11;;:15;;:21;;;;:::i;:::-;:25;;:42;;;;:::i;:::-;19156:51;;19084:131;:::o;16050:484::-;16112:12;16148:15;16155:6;16148:5;:15::i;:::-;16138:25;;16244;16261:6;16244:11;;:15;;:25;;;;:::i;:::-;16230:11;:39;;;;16330:18;16341:5;16330:9;:18::i;:::-;16320:6;:28;;16311:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16380:69;16414:10;16434:4;16441:6;16388:5;16380:32;;;;:69;;;;;;:::i;:::-;16465:20;16470:5;16477:6;16465:20;;;;;;;;;;;;;;;;;;;;;;;;;;16498:28;16505:10;16517:7;16498:5;:28::i;:::-;16050:484;;;;:::o;15004:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;813:181::-;871:7;891:9;907:1;903;:5;891:17;;932:1;927;:6;;919:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:1;978:8;;;813:181;;;;:::o;1346:471::-;1404:7;1654:1;1649;:6;1645:47;;;1679:1;1672:8;;;;1645:47;1704:9;1720:1;1716;:5;1704:17;;1749:1;1744;1740;:5;;;;;;:10;1732:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1808:1;1801:8;;;1346:471;;;;;:::o;1825:132::-;1883:7;1910:39;1914:1;1917;1910:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1903:46;;1825:132;;;;:::o;1002:136::-;1060:7;1087:43;1091:1;1094;1087:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1080:50;;1002:136;;;;:::o;9701:177::-;9784:86;9804:5;9834:23;;;9859:2;9863:5;9811:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9784:19;:86::i;:::-;9701:177;;;:::o;8632:418::-;8735:1;8716:21;;:7;:21;;;;8708:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8788:49;8809:7;8826:1;8830:6;8788:20;:49::i;:::-;8871:68;8894:6;8871:68;;;;;;;;;;;;;;;;;:9;:18;8881:7;8871:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;8850:9;:18;8860:7;8850:18;;;;;;;;;;;;;;;:89;;;;8965:24;8982:6;8965:12;;:16;;:24;;;;:::i;:::-;8950:12;:39;;;;9031:1;9005:37;;9014:7;9005:37;;;9035:6;9005:37;;;;;;;;;;;;;;;;;;8632:418;;:::o;9058:346::-;9177:1;9160:19;;:5;:19;;;;9152:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9258:1;9239:21;;:7;:21;;;;9231:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9342:6;9312:11;:18;9324:5;9312:18;;;;;;;;;;;;;;;:27;9331:7;9312:27;;;;;;;;;;;;;;;:36;;;;9380:7;9364:32;;9373:5;9364:32;;;9389:6;9364:32;;;;;;;;;;;;;;;;;;9058:346;;;:::o;7699:539::-;7823:1;7805:20;;:6;:20;;;;7797:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7907:1;7886:23;;:9;:23;;;;7878:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7962:47;7983:6;7991:9;8002:6;7962:20;:47::i;:::-;8042:71;8064:6;8042:71;;;;;;;;;;;;;;;;;:9;:17;8052:6;8042:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8022:9;:17;8032:6;8022:17;;;;;;;;;;;;;;;:91;;;;8147:32;8172:6;8147:9;:20;8157:9;8147:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8124:9;:20;8134:9;8124:20;;;;;;;;;;;;;;;:55;;;;8212:9;8195:35;;8204:6;8195:35;;;8223:6;8195:35;;;;;;;;;;;;;;;;;;7699:539;;;:::o;1146:192::-;1232:7;1265:1;1260;:6;;1268:12;1252:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1292:9;1308:1;1304;:5;1292:17;;1329:1;1322:8;;;1146:192;;;;;:::o;9886:205::-;9987:96;10007:5;10037:27;;;10066:4;10072:2;10076:5;10014:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9987:19;:96::i;:::-;9886:205;;;;:::o;8246:378::-;8349:1;8330:21;;:7;:21;;;;8322:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8400:49;8429:1;8433:7;8442:6;8400:20;:49::i;:::-;8477:24;8494:6;8477:12;;:16;;:24;;;;:::i;:::-;8462:12;:39;;;;8533:30;8556:6;8533:9;:18;8543:7;8533:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;8512:9;:18;8522:7;8512:18;;;;;;;;;;;;;;;:51;;;;8600:7;8579:37;;8596:1;8579:37;;;8609:6;8579:37;;;;;;;;;;;;;;;;;;8246:378;;:::o;1965:278::-;2051:7;2083:1;2079;:5;2086:12;2071:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2110:9;2126:1;2122;:5;;;;;;2110:17;;2234:1;2227:8;;;1965:278;;;;;:::o;11362:761::-;11786:23;11812:69;11840:4;11812:69;;;;;;;;;;;;;;;;;11820:5;11812:27;;;;:69;;;;;:::i;:::-;11786:95;;11916:1;11896:10;:17;:21;11892:224;;;12038:10;12027:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12019:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11892:224;11362:761;;;:::o;9510:92::-;;;;:::o;3601:196::-;3704:12;3736:53;3759:6;3767:4;3773:1;3776:12;3736:22;:53::i;:::-;3729:60;;3601:196;;;;;:::o;4363:979::-;4493:12;4526:18;4537:6;4526:10;:18::i;:::-;4518:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4652:12;4666:23;4693:6;:11;;4713:8;4724:4;4693:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:78;;;;4744:7;4740:595;;;4775:10;4768:17;;;;;;4740:595;4909:1;4889:10;:17;:21;4885:439;;;5152:10;5146:17;5213:15;5200:10;5196:2;5192:19;5185:44;5100:148;5295:12;5288:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4363:979;;;;;;;:::o;2585:422::-;2645:4;2853:12;2964:7;2952:20;2944:28;;2998:1;2991:4;:8;2984:15;;;2585:422;;;:::o

Swarm Source

ipfs://8e401a3f90f828eeb8497a8b411c89b27d35122dd9f7a96affa1b3a693e34b6e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.