Contract 0x514b818797283E3349Fbb7e44FaCE5035EbFddf7

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb5860d537b93358a285bf447b6512724c5def67c5db7b1e89ba70ae04c1def08Redeem277392632022-04-30 2:36:1526 days 1 hr ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.00181044 60
0x40331152e1968bd6d24bf9b53aa093ae9033257ff39851601339ebf7dc8b325eRedeem277384482022-04-30 2:08:0626 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.00181044 60
0xc4bf55330048b20829adf430d7a882ed40139cd2d2e9b2fa031b40b867e251e6Redeem277383892022-04-30 2:06:0426 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.00181044 60
0x7acb0aa1133fc069151478edeecc13a3dd866a7514cd66763292c8f4fa921861Get Approved Fed...277383632022-04-30 2:05:0826 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01230624 60
0x2f93933df54184ba82f0f313c78687a42a0924b714811903fc4eb5152b8308eeRedeem277381922022-04-30 1:59:1826 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.00181044 60
0xe6ba35493bcc5d2ea263cf25a55b059505bbf02c1aa062d8a8823d0d5b5bcc87Redeem277380172022-04-30 1:53:1626 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.00181044 60
0x0f2b0afa12addda4b5c4ac06b2da66e39fa9137bf16c890f8b0f0336f3062451Get Approved Fed...277378482022-04-30 1:47:2626 days 2 hrs ago0x5ee38b065e2743ba6f629d7e0ffe60c2ada0bd2b IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01247424 60
0x735e9877ac292e66198e839f250218201a8e9d0517734b56f45b0af287c6917fGet Approved Fed...270576712022-04-12 18:27:1043 days 10 hrs ago0x92632522e118319efa967bd2a9a4606c74196b13 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01247352 60
0x548dc033160cfcf5810a86a6cef96092546795fe16389eb608ad6aab5587578aGet Approved Fed...269976372022-04-11 6:18:0344 days 22 hrs ago0x2d6b7e4c9e8fcd5a651ac4ae501804dc32177beb IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01247352 60
0x8e47c8cf0c4ccf46519d4607e2fe46bcbe483ebe8a1466483d8fb2b8e73081b5Redeem264195092022-03-27 10:45:3159 days 17 hrs ago0x1261359b21c4ebdb7defa6701cdfdc8388510433 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.008807800001 50.000000011
0x9f169f15e40d2c2a33b6db86d399ec5be6b9d36356a530ad361fa0b492a61131Get Approved Fed...264155382022-03-27 8:18:3359 days 20 hrs ago0x1261359b21c4ebdb7defa6701cdfdc8388510433 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.010396400002 50.000000012
0x88fc31a02e0d85575a7c3b99109e04a35de938495f594b781e4e75599fbaf4b7Redeem263740582022-03-26 7:10:3060 days 21 hrs ago0x2d99c689355377deeb08844e6d97389579bc5210 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.008807800002 50.000000015
0xe86c0ee5c3eaf290a365503bb4bbc5ba62d6602702063846ded47ca719568796Get Approved Fed...263740382022-03-26 7:09:5060 days 21 hrs ago0x2d99c689355377deeb08844e6d97389579bc5210 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.010156400002 50.000000014
0x7785da3d11e320e25db2b620e47d0119d7d97bbf174ee6a498a320689c7a765fGet Approved Fed...263708672022-03-26 5:00:3960 days 23 hrs ago0x2d6b7e4c9e8fcd5a651ac4ae501804dc32177beb IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01230696 60
0x17be1a46af47997684da344f6f40a0dca9a1a9f574a7ae47fc91595c7e73f1dbRedeem263367132022-03-25 7:22:3461 days 21 hrs ago0xfd0a671b72333f9d3b7acc3e8e6739d1d16c701f IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.008807800002 50.000000016
0x22366284d9d632930b748b80109695e248e15c7560b47b5c5f2615ef5550b4dbGet Approved Fed...263365302022-03-25 7:16:1661 days 21 hrs ago0xfd0a671b72333f9d3b7acc3e8e6739d1d16c701f IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.010395800002 50.000000014
0x6bf63ea27592ad0a5a52edc940b8ea0c23f72ded227c648ae5bb693c2b373ff6Redeem263285482022-03-25 2:24:1562 days 2 hrs ago0x9412946c5f025cacc1f2eb262f0c349878445f54 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01364736 60
0x2645ab79881767be69b5d0167478a413581a628a083ed41ea5733e2588a561cdGet Approved Fed...263285082022-03-25 2:22:5162 days 2 hrs ago0x9412946c5f025cacc1f2eb262f0c349878445f54 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.02409864 60
0x030f8e8d0ab8994c3657620a3ed2ed830297449ab0be13e1a6b0792a3a71c0fcGet Approved Fed...263284842022-03-25 2:22:0362 days 2 hrs ago0x9412946c5f025cacc1f2eb262f0c349878445f54 IN  0x514b818797283e3349fbb7e44face5035ebfddf71 MATIC0.01794 60
0xf792365a62eec56693788f6dd748940c8193bc427caf26c74097f221dbe07aa80x60806040263272012022-03-25 1:35:4962 days 2 hrs ago0x63c50e0f34b1990c3e7d4cd2df9383132224355b IN  Create: FedoraGoldTokenBridgeChainLink0 MATIC0.144084126482 58.937200008
[ Download CSV Export 
Latest 14 internal transactions
Parent Txn Hash Block From To Value
0x7acb0aa1133fc069151478edeecc13a3dd866a7514cd66763292c8f4fa921861277383632022-04-30 2:05:0826 days 2 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x0f2b0afa12addda4b5c4ac06b2da66e39fa9137bf16c890f8b0f0336f3062451277378482022-04-30 1:47:2626 days 2 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x735e9877ac292e66198e839f250218201a8e9d0517734b56f45b0af287c6917f270576712022-04-12 18:27:1043 days 10 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x548dc033160cfcf5810a86a6cef96092546795fe16389eb608ad6aab5587578a269976372022-04-11 6:18:0344 days 22 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x8e47c8cf0c4ccf46519d4607e2fe46bcbe483ebe8a1466483d8fb2b8e73081b5264195092022-03-27 10:45:3159 days 17 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x9f169f15e40d2c2a33b6db86d399ec5be6b9d36356a530ad361fa0b492a61131264155382022-03-27 8:18:3359 days 20 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x88fc31a02e0d85575a7c3b99109e04a35de938495f594b781e4e75599fbaf4b7263740582022-03-26 7:10:3060 days 21 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0xe86c0ee5c3eaf290a365503bb4bbc5ba62d6602702063846ded47ca719568796263740382022-03-26 7:09:5060 days 21 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x7785da3d11e320e25db2b620e47d0119d7d97bbf174ee6a498a320689c7a765f263708672022-03-26 5:00:3960 days 23 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x17be1a46af47997684da344f6f40a0dca9a1a9f574a7ae47fc91595c7e73f1db263367132022-03-25 7:22:3461 days 21 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x22366284d9d632930b748b80109695e248e15c7560b47b5c5f2615ef5550b4db263365302022-03-25 7:16:1661 days 21 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x6bf63ea27592ad0a5a52edc940b8ea0c23f72ded227c648ae5bb693c2b373ff6263285482022-03-25 2:24:1562 days 2 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x2645ab79881767be69b5d0167478a413581a628a083ed41ea5733e2588a561cd263285082022-03-25 2:22:5162 days 2 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
0x030f8e8d0ab8994c3657620a3ed2ed830297449ab0be13e1a6b0792a3a71c0fc263284842022-03-25 2:22:0362 days 2 hrs ago 0x514b818797283e3349fbb7e44face5035ebfddf70x63c50e0f34b1990c3e7d4cd2df9383132224355b1 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FedoraGoldTokenBridgeChainLink

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-25
*/

// ----------------------------------------------------------------------------
// Author: Rebalance Development Team
// Ver 1.0
// This is a research project. The bridge is also an experimental product.
// Do your own research before using it. Use it at your own risk.
// We did our best to make it accurate, but we do not take responsibility if you lose tokens 
// or if any issue arises due to malfunctioning of the bridge.
//  
// Symbol      : FED
// Name        : Fedora Gold 
// Total supply: 100,000,000,000
// Decimals    : 8
// 
// Details of Contract : 
// This bridge contract will allow the Fedora Gold Coin holders to redeem Fedora Gold Tokens on Polygon Chain.
// Step 1: Send FED Coins to Fedora Gold Coin Burn Address.
// Step 2: Approve your transaction with FedoraGoldBridge using the Transaction id, Proof Key and Redeem ERC 20 Address.
// Step 3: Redeem FED Tokens equal to the number of coins sent to burn address.
// Rules: One ERC 20 address can only redeem once.
//        One Transaction id can only be used once.
//        Redeem amount will be verified via ChainLink Oracle. 
// Only Use Rebalance DAPP to interact with this Smart Contract.
// ------------------------------------------------------------------------------


/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    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;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Owned {

    address public owner;
    address public newOwner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        require(msg.sender == newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

contract FedoraGoldToken1 is Owned  {

    /// @notice EIP-20 token name for this token
    string public constant name = "Fedora Gold";

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

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

    /// @notice Total number of tokens in circulation
    uint256 public totalSupply = 10000000000000000000; // 100 Billion Fed

    /// @notice Address which may mint new tokens
    address public minter;

    /// minting stopped forever
    bool public mintingstopped = false;

    /// @notice An event thats emitted when the minter address is changed
    event MinterChanged(address minter, address newMinter);

        /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);
   
       /// @notice Official record of token balances for each account
    mapping (address => uint256) internal balances;

    function safe256(uint n, string memory errorMessage) internal pure returns (uint256) {
        require(n < 2**32, errorMessage);
        return uint256(n);
    }
    function add256(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }
    function sub256(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @notice Construct a new vote token
     * @param account The initial account to grant all the tokens
     * @param minter_ The account with minting ability
    */
    constructor(address account, address minter_) public {
        balances[account] = uint256(totalSupply);
        emit Transfer(address(0), account, totalSupply);
        minter = minter_;
        mintingstopped = true;
        emit MinterChanged(address(0), minter);
    }

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

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

        balances[src] = sub256(balances[src], amount, "FEDG::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add256(balances[dst], amount, "FEDG::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

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

}


// File: @chainlink/contracts/src/v0.8/vendor/ENSResolver.sol


pragma solidity ^0.8.0;

abstract contract ENSResolver {
  function addr(bytes32 node) public view virtual returns (address);
}

// File: @chainlink/contracts/src/v0.8/interfaces/PointerInterface.sol


pragma solidity ^0.8.0;

interface PointerInterface {
  function getAddress() external view returns (address);
}

// File: @chainlink/contracts/src/v0.8/interfaces/OracleInterface.sol


pragma solidity ^0.8.0;

interface OracleInterface {
  function fulfillOracleRequest(
    bytes32 requestId,
    uint256 payment,
    address callbackAddress,
    bytes4 callbackFunctionId,
    uint256 expiration,
    bytes32 data
  ) external returns (bool);

  function isAuthorizedSender(address node) external view returns (bool);

  function withdraw(address recipient, uint256 amount) external;

  function withdrawable() external view returns (uint256);
}

// File: @chainlink/contracts/src/v0.8/interfaces/ChainlinkRequestInterface.sol


pragma solidity ^0.8.0;

interface ChainlinkRequestInterface {
  function oracleRequest(
    address sender,
    uint256 requestPrice,
    bytes32 serviceAgreementID,
    address callbackAddress,
    bytes4 callbackFunctionId,
    uint256 nonce,
    uint256 dataVersion,
    bytes calldata data
  ) external;

  function cancelOracleRequest(
    bytes32 requestId,
    uint256 payment,
    bytes4 callbackFunctionId,
    uint256 expiration
  ) external;
}

// File: @chainlink/contracts/src/v0.8/interfaces/OperatorInterface.sol


pragma solidity ^0.8.0;



interface OperatorInterface is OracleInterface, ChainlinkRequestInterface {
  function operatorRequest(
    address sender,
    uint256 payment,
    bytes32 specId,
    bytes4 callbackFunctionId,
    uint256 nonce,
    uint256 dataVersion,
    bytes calldata data
  ) external;

  function fulfillOracleRequest2(
    bytes32 requestId,
    uint256 payment,
    address callbackAddress,
    bytes4 callbackFunctionId,
    uint256 expiration,
    bytes calldata data
  ) external returns (bool);

  function ownerTransferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function distributeFunds(address payable[] calldata receivers, uint256[] calldata amounts) external payable;

  function getAuthorizedSenders() external returns (address[] memory);

  function setAuthorizedSenders(address[] calldata senders) external;

  function getForwarder() external returns (address);
}

// File: @chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol


pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

  function approve(address spender, uint256 value) external returns (bool success);

  function balanceOf(address owner) external view returns (uint256 balance);

  function decimals() external view returns (uint8 decimalPlaces);

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

  function symbol() external view returns (string memory tokenSymbol);

  function totalSupply() external view returns (uint256 totalTokensIssued);

  function transfer(address to, uint256 value) external returns (bool success);

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

// File: @chainlink/contracts/src/v0.8/interfaces/ENSInterface.sol


pragma solidity ^0.8.0;

interface ENSInterface {
  // Logged when the owner of a node assigns a new owner to a subnode.
  event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);

  // Logged when the owner of a node transfers ownership to a new account.
  event Transfer(bytes32 indexed node, address owner);

  // Logged when the resolver for a node changes.
  event NewResolver(bytes32 indexed node, address resolver);

  // Logged when the TTL of a node changes
  event NewTTL(bytes32 indexed node, uint64 ttl);

  function setSubnodeOwner(
    bytes32 node,
    bytes32 label,
    address owner
  ) external;

  function setResolver(bytes32 node, address resolver) external;

  function setOwner(bytes32 node, address owner) external;

  function setTTL(bytes32 node, uint64 ttl) external;

  function owner(bytes32 node) external view returns (address);

  function resolver(bytes32 node) external view returns (address);

  function ttl(bytes32 node) external view returns (uint64);
}

// File: @chainlink/contracts/src/v0.8/vendor/BufferChainlink.sol


pragma solidity ^0.8.0;

/**
 * @dev A library for working with mutable byte buffers in Solidity.
 *
 * Byte buffers are mutable and expandable, and provide a variety of primitives
 * for writing to them. At any time you can fetch a bytes object containing the
 * current contents of the buffer. The bytes object should not be stored between
 * operations, as it may change due to resizing of the buffer.
 */
library BufferChainlink {
  /**
   * @dev Represents a mutable buffer. Buffers have a current value (buf) and
   *      a capacity. The capacity may be longer than the current value, in
   *      which case it can be extended without the need to allocate more memory.
   */
  struct buffer {
    bytes buf;
    uint256 capacity;
  }

  /**
   * @dev Initializes a buffer with an initial capacity.
   * @param buf The buffer to initialize.
   * @param capacity The number of bytes of space to allocate the buffer.
   * @return The buffer, for chaining.
   */
  function init(buffer memory buf, uint256 capacity) internal pure returns (buffer memory) {
    if (capacity % 32 != 0) {
      capacity += 32 - (capacity % 32);
    }
    // Allocate space for the buffer data
    buf.capacity = capacity;
    assembly {
      let ptr := mload(0x40)
      mstore(buf, ptr)
      mstore(ptr, 0)
      mstore(0x40, add(32, add(ptr, capacity)))
    }
    return buf;
  }

  /**
   * @dev Initializes a new buffer from an existing bytes object.
   *      Changes to the buffer may mutate the original value.
   * @param b The bytes object to initialize the buffer with.
   * @return A new buffer.
   */
  function fromBytes(bytes memory b) internal pure returns (buffer memory) {
    buffer memory buf;
    buf.buf = b;
    buf.capacity = b.length;
    return buf;
  }

  function resize(buffer memory buf, uint256 capacity) private pure {
    bytes memory oldbuf = buf.buf;
    init(buf, capacity);
    append(buf, oldbuf);
  }

  function max(uint256 a, uint256 b) private pure returns (uint256) {
    if (a > b) {
      return a;
    }
    return b;
  }

  /**
   * @dev Sets buffer length to 0.
   * @param buf The buffer to truncate.
   * @return The original buffer, for chaining..
   */
  function truncate(buffer memory buf) internal pure returns (buffer memory) {
    assembly {
      let bufptr := mload(buf)
      mstore(bufptr, 0)
    }
    return buf;
  }

  /**
   * @dev Writes a byte string to a buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param off The start offset to write to.
   * @param data The data to append.
   * @param len The number of bytes to copy.
   * @return The original buffer, for chaining.
   */
  function write(
    buffer memory buf,
    uint256 off,
    bytes memory data,
    uint256 len
  ) internal pure returns (buffer memory) {
    require(len <= data.length);

    if (off + len > buf.capacity) {
      resize(buf, max(buf.capacity, len + off) * 2);
    }

    uint256 dest;
    uint256 src;
    assembly {
      // Memory address of the buffer data
      let bufptr := mload(buf)
      // Length of existing buffer data
      let buflen := mload(bufptr)
      // Start address = buffer address + offset + sizeof(buffer length)
      dest := add(add(bufptr, 32), off)
      // Update buffer length if we're extending it
      if gt(add(len, off), buflen) {
        mstore(bufptr, add(len, off))
      }
      src := add(data, 32)
    }

    // Copy word-length chunks while possible
    for (; len >= 32; len -= 32) {
      assembly {
        mstore(dest, mload(src))
      }
      dest += 32;
      src += 32;
    }

    // Copy remaining bytes
    unchecked {
      uint256 mask = (256**(32 - len)) - 1;
      assembly {
        let srcpart := and(mload(src), not(mask))
        let destpart := and(mload(dest), mask)
        mstore(dest, or(destpart, srcpart))
      }
    }

    return buf;
  }

  /**
   * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @param len The number of bytes to copy.
   * @return The original buffer, for chaining.
   */
  function append(
    buffer memory buf,
    bytes memory data,
    uint256 len
  ) internal pure returns (buffer memory) {
    return write(buf, buf.buf.length, data, len);
  }

  /**
   * @dev Appends a byte string to a buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @return The original buffer, for chaining.
   */
  function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {
    return write(buf, buf.buf.length, data, data.length);
  }

  /**
   * @dev Writes a byte to the buffer. Resizes if doing so would exceed the
   *      capacity of the buffer.
   * @param buf The buffer to append to.
   * @param off The offset to write the byte at.
   * @param data The data to append.
   * @return The original buffer, for chaining.
   */
  function writeUint8(
    buffer memory buf,
    uint256 off,
    uint8 data
  ) internal pure returns (buffer memory) {
    if (off >= buf.capacity) {
      resize(buf, buf.capacity * 2);
    }

    assembly {
      // Memory address of the buffer data
      let bufptr := mload(buf)
      // Length of existing buffer data
      let buflen := mload(bufptr)
      // Address = buffer address + sizeof(buffer length) + off
      let dest := add(add(bufptr, off), 32)
      mstore8(dest, data)
      // Update buffer length if we extended it
      if eq(off, buflen) {
        mstore(bufptr, add(buflen, 1))
      }
    }
    return buf;
  }

  /**
   * @dev Appends a byte to the buffer. Resizes if doing so would exceed the
   *      capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @return The original buffer, for chaining.
   */
  function appendUint8(buffer memory buf, uint8 data) internal pure returns (buffer memory) {
    return writeUint8(buf, buf.buf.length, data);
  }

  /**
   * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would
   *      exceed the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param off The offset to write at.
   * @param data The data to append.
   * @param len The number of bytes to write (left-aligned).
   * @return The original buffer, for chaining.
   */
  function write(
    buffer memory buf,
    uint256 off,
    bytes32 data,
    uint256 len
  ) private pure returns (buffer memory) {
    if (len + off > buf.capacity) {
      resize(buf, (len + off) * 2);
    }

    unchecked {
      uint256 mask = (256**len) - 1;
      // Right-align data
      data = data >> (8 * (32 - len));
      assembly {
        // Memory address of the buffer data
        let bufptr := mload(buf)
        // Address = buffer address + sizeof(buffer length) + off + len
        let dest := add(add(bufptr, off), len)
        mstore(dest, or(and(mload(dest), not(mask)), data))
        // Update buffer length if we extended it
        if gt(add(off, len), mload(bufptr)) {
          mstore(bufptr, add(off, len))
        }
      }
    }
    return buf;
  }

  /**
   * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the
   *      capacity of the buffer.
   * @param buf The buffer to append to.
   * @param off The offset to write at.
   * @param data The data to append.
   * @return The original buffer, for chaining.
   */
  function writeBytes20(
    buffer memory buf,
    uint256 off,
    bytes20 data
  ) internal pure returns (buffer memory) {
    return write(buf, off, bytes32(data), 20);
  }

  /**
   * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @return The original buffer, for chhaining.
   */
  function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {
    return write(buf, buf.buf.length, bytes32(data), 20);
  }

  /**
   * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @return The original buffer, for chaining.
   */
  function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {
    return write(buf, buf.buf.length, data, 32);
  }

  /**
   * @dev Writes an integer to the buffer. Resizes if doing so would exceed
   *      the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param off The offset to write at.
   * @param data The data to append.
   * @param len The number of bytes to write (right-aligned).
   * @return The original buffer, for chaining.
   */
  function writeInt(
    buffer memory buf,
    uint256 off,
    uint256 data,
    uint256 len
  ) private pure returns (buffer memory) {
    if (len + off > buf.capacity) {
      resize(buf, (len + off) * 2);
    }

    uint256 mask = (256**len) - 1;
    assembly {
      // Memory address of the buffer data
      let bufptr := mload(buf)
      // Address = buffer address + off + sizeof(buffer length) + len
      let dest := add(add(bufptr, off), len)
      mstore(dest, or(and(mload(dest), not(mask)), data))
      // Update buffer length if we extended it
      if gt(add(off, len), mload(bufptr)) {
        mstore(bufptr, add(off, len))
      }
    }
    return buf;
  }

  /**
   * @dev Appends a byte to the end of the buffer. Resizes if doing so would
   * exceed the capacity of the buffer.
   * @param buf The buffer to append to.
   * @param data The data to append.
   * @return The original buffer.
   */
  function appendInt(
    buffer memory buf,
    uint256 data,
    uint256 len
  ) internal pure returns (buffer memory) {
    return writeInt(buf, buf.buf.length, data, len);
  }
}

// File: @chainlink/contracts/src/v0.8/vendor/CBORChainlink.sol


pragma solidity >=0.4.19;


library CBORChainlink {
  using BufferChainlink for BufferChainlink.buffer;

  uint8 private constant MAJOR_TYPE_INT = 0;
  uint8 private constant MAJOR_TYPE_NEGATIVE_INT = 1;
  uint8 private constant MAJOR_TYPE_BYTES = 2;
  uint8 private constant MAJOR_TYPE_STRING = 3;
  uint8 private constant MAJOR_TYPE_ARRAY = 4;
  uint8 private constant MAJOR_TYPE_MAP = 5;
  uint8 private constant MAJOR_TYPE_TAG = 6;
  uint8 private constant MAJOR_TYPE_CONTENT_FREE = 7;

  uint8 private constant TAG_TYPE_BIGNUM = 2;
  uint8 private constant TAG_TYPE_NEGATIVE_BIGNUM = 3;

  function encodeFixedNumeric(BufferChainlink.buffer memory buf, uint8 major, uint64 value) private pure {
    if(value <= 23) {
      buf.appendUint8(uint8((major << 5) | value));
    } else if (value <= 0xFF) {
      buf.appendUint8(uint8((major << 5) | 24));
      buf.appendInt(value, 1);
    } else if (value <= 0xFFFF) {
      buf.appendUint8(uint8((major << 5) | 25));
      buf.appendInt(value, 2);
    } else if (value <= 0xFFFFFFFF) {
      buf.appendUint8(uint8((major << 5) | 26));
      buf.appendInt(value, 4);
    } else {
      buf.appendUint8(uint8((major << 5) | 27));
      buf.appendInt(value, 8);
    }
  }

  function encodeIndefiniteLengthType(BufferChainlink.buffer memory buf, uint8 major) private pure {
    buf.appendUint8(uint8((major << 5) | 31));
  }

  function encodeUInt(BufferChainlink.buffer memory buf, uint value) internal pure {
    if(value > 0xFFFFFFFFFFFFFFFF) {
      encodeBigNum(buf, value);
    } else {
      encodeFixedNumeric(buf, MAJOR_TYPE_INT, uint64(value));
    }
  }

  function encodeInt(BufferChainlink.buffer memory buf, int value) internal pure {
    if(value < -0x10000000000000000) {
      encodeSignedBigNum(buf, value);
    } else if(value > 0xFFFFFFFFFFFFFFFF) {
      encodeBigNum(buf, uint(value));
    } else if(value >= 0) {
      encodeFixedNumeric(buf, MAJOR_TYPE_INT, uint64(uint256(value)));
    } else {
      encodeFixedNumeric(buf, MAJOR_TYPE_NEGATIVE_INT, uint64(uint256(-1 - value)));
    }
  }

  function encodeBytes(BufferChainlink.buffer memory buf, bytes memory value) internal pure {
    encodeFixedNumeric(buf, MAJOR_TYPE_BYTES, uint64(value.length));
    buf.append(value);
  }

  function encodeBigNum(BufferChainlink.buffer memory buf, uint value) internal pure {
    buf.appendUint8(uint8((MAJOR_TYPE_TAG << 5) | TAG_TYPE_BIGNUM));
    encodeBytes(buf, abi.encode(value));
  }

  function encodeSignedBigNum(BufferChainlink.buffer memory buf, int input) internal pure {
    buf.appendUint8(uint8((MAJOR_TYPE_TAG << 5) | TAG_TYPE_NEGATIVE_BIGNUM));
    encodeBytes(buf, abi.encode(uint256(-1 - input)));
  }

  function encodeString(BufferChainlink.buffer memory buf, string memory value) internal pure {
    encodeFixedNumeric(buf, MAJOR_TYPE_STRING, uint64(bytes(value).length));
    buf.append(bytes(value));
  }

  function startArray(BufferChainlink.buffer memory buf) internal pure {
    encodeIndefiniteLengthType(buf, MAJOR_TYPE_ARRAY);
  }

  function startMap(BufferChainlink.buffer memory buf) internal pure {
    encodeIndefiniteLengthType(buf, MAJOR_TYPE_MAP);
  }

  function endSequence(BufferChainlink.buffer memory buf) internal pure {
    encodeIndefiniteLengthType(buf, MAJOR_TYPE_CONTENT_FREE);
  }
}

// File: @chainlink/contracts/src/v0.8/Chainlink.sol


pragma solidity ^0.8.0;



/**
 * @title Library for common Chainlink functions
 * @dev Uses imported CBOR library for encoding to buffer
 */
library Chainlink {
  uint256 internal constant defaultBufferSize = 256; // solhint-disable-line const-name-snakecase

  using CBORChainlink for BufferChainlink.buffer;

  struct Request {
    bytes32 id;
    address callbackAddress;
    bytes4 callbackFunctionId;
    uint256 nonce;
    BufferChainlink.buffer buf;
  }

  /**
   * @notice Initializes a Chainlink request
   * @dev Sets the ID, callback address, and callback function signature on the request
   * @param self The uninitialized request
   * @param jobId The Job Specification ID
   * @param callbackAddr The callback address
   * @param callbackFunc The callback function signature
   * @return The initialized request
   */
  function initialize(
    Request memory self,
    bytes32 jobId,
    address callbackAddr,
    bytes4 callbackFunc
  ) internal pure returns (Chainlink.Request memory) {
    BufferChainlink.init(self.buf, defaultBufferSize);
    self.id = jobId;
    self.callbackAddress = callbackAddr;
    self.callbackFunctionId = callbackFunc;
    return self;
  }

  /**
   * @notice Sets the data for the buffer without encoding CBOR on-chain
   * @dev CBOR can be closed with curly-brackets {} or they can be left off
   * @param self The initialized request
   * @param data The CBOR data
   */
  function setBuffer(Request memory self, bytes memory data) internal pure {
    BufferChainlink.init(self.buf, data.length);
    BufferChainlink.append(self.buf, data);
  }

  /**
   * @notice Adds a string value to the request with a given key name
   * @param self The initialized request
   * @param key The name of the key
   * @param value The string value to add
   */
  function add(
    Request memory self,
    string memory key,
    string memory value
  ) internal pure {
    self.buf.encodeString(key);
    self.buf.encodeString(value);
  }

  /**
   * @notice Adds a bytes value to the request with a given key name
   * @param self The initialized request
   * @param key The name of the key
   * @param value The bytes value to add
   */
  function addBytes(
    Request memory self,
    string memory key,
    bytes memory value
  ) internal pure {
    self.buf.encodeString(key);
    self.buf.encodeBytes(value);
  }

  /**
   * @notice Adds a int256 value to the request with a given key name
   * @param self The initialized request
   * @param key The name of the key
   * @param value The int256 value to add
   */
  function addInt(
    Request memory self,
    string memory key,
    int256 value
  ) internal pure {
    self.buf.encodeString(key);
    self.buf.encodeInt(value);
  }

  /**
   * @notice Adds a uint256 value to the request with a given key name
   * @param self The initialized request
   * @param key The name of the key
   * @param value The uint256 value to add
   */
  function addUint(
    Request memory self,
    string memory key,
    uint256 value
  ) internal pure {
    self.buf.encodeString(key);
    self.buf.encodeUInt(value);
  }

  /**
   * @notice Adds an array of strings to the request with a given key name
   * @param self The initialized request
   * @param key The name of the key
   * @param values The array of string values to add
   */
  function addStringArray(
    Request memory self,
    string memory key,
    string[] memory values
  ) internal pure {
    self.buf.encodeString(key);
    self.buf.startArray();
    for (uint256 i = 0; i < values.length; i++) {
      self.buf.encodeString(values[i]);
    }
    self.buf.endSequence();
  }
}

// File: @chainlink/contracts/src/v0.8/ChainlinkClient.sol


pragma solidity ^0.8.0;








/**
 * @title The ChainlinkClient contract
 * @notice Contract writers can inherit this contract in order to create requests for the
 * Chainlink network
 */
abstract contract ChainlinkClient {
  using Chainlink for Chainlink.Request;

  uint256 internal constant LINK_DIVISIBILITY = 10**18;
  uint256 private constant AMOUNT_OVERRIDE = 0;
  address private constant SENDER_OVERRIDE = address(0);
  uint256 private constant ORACLE_ARGS_VERSION = 1;
  uint256 private constant OPERATOR_ARGS_VERSION = 2;
  bytes32 private constant ENS_TOKEN_SUBNAME = keccak256("link");
  bytes32 private constant ENS_ORACLE_SUBNAME = keccak256("oracle");
  address private constant LINK_TOKEN_POINTER = 0xC89bD4E1632D3A43CB03AAAd5262cbe4038Bc571;

  ENSInterface private s_ens;
  bytes32 private s_ensNode;
  LinkTokenInterface private s_link;
  OperatorInterface private s_oracle;
  uint256 private s_requestCount = 1;
  mapping(bytes32 => address) private s_pendingRequests;

  event ChainlinkRequested(bytes32 indexed id);
  event ChainlinkFulfilled(bytes32 indexed id);
  event ChainlinkCancelled(bytes32 indexed id);

  /**
   * @notice Creates a request that can hold additional parameters
   * @param specId The Job Specification ID that the request will be created for
   * @param callbackAddr address to operate the callback on
   * @param callbackFunctionSignature function signature to use for the callback
   * @return A Chainlink Request struct in memory
   */
  function buildChainlinkRequest(
    bytes32 specId,
    address callbackAddr,
    bytes4 callbackFunctionSignature
  ) internal pure returns (Chainlink.Request memory) {
    Chainlink.Request memory req;
    return req.initialize(specId, callbackAddr, callbackFunctionSignature);
  }

  /**
   * @notice Creates a request that can hold additional parameters
   * @param specId The Job Specification ID that the request will be created for
   * @param callbackFunctionSignature function signature to use for the callback
   * @return A Chainlink Request struct in memory
   */
  function buildOperatorRequest(bytes32 specId, bytes4 callbackFunctionSignature)
    internal
    view
    returns (Chainlink.Request memory)
  {
    Chainlink.Request memory req;
    return req.initialize(specId, address(this), callbackFunctionSignature);
  }

  /**
   * @notice Creates a Chainlink request to the stored oracle address
   * @dev Calls `chainlinkRequestTo` with the stored oracle address
   * @param req The initialized Chainlink Request
   * @param payment The amount of LINK to send for the request
   * @return requestId The request ID
   */
  function sendChainlinkRequest(Chainlink.Request memory req, uint256 payment) internal returns (bytes32) {
    return sendChainlinkRequestTo(address(s_oracle), req, payment);
  }

  /**
   * @notice Creates a Chainlink request to the specified oracle address
   * @dev Generates and stores a request ID, increments the local nonce, and uses `transferAndCall` to
   * send LINK which creates a request on the target oracle contract.
   * Emits ChainlinkRequested event.
   * @param oracleAddress The address of the oracle for the request
   * @param req The initialized Chainlink Request
   * @param payment The amount of LINK to send for the request
   * @return requestId The request ID
   */
  function sendChainlinkRequestTo(
    address oracleAddress,
    Chainlink.Request memory req,
    uint256 payment
  ) internal returns (bytes32 requestId) {
    uint256 nonce = s_requestCount;
    s_requestCount = nonce + 1;
    bytes memory encodedRequest = abi.encodeWithSelector(
      ChainlinkRequestInterface.oracleRequest.selector,
      SENDER_OVERRIDE, // Sender value - overridden by onTokenTransfer by the requesting contract's address
      AMOUNT_OVERRIDE, // Amount value - overridden by onTokenTransfer by the actual amount of LINK sent
      req.id,
      address(this),
      req.callbackFunctionId,
      nonce,
      ORACLE_ARGS_VERSION,
      req.buf.buf
    );
    return _rawRequest(oracleAddress, nonce, payment, encodedRequest);
  }

  /**
   * @notice Creates a Chainlink request to the stored oracle address
   * @dev This function supports multi-word response
   * @dev Calls `sendOperatorRequestTo` with the stored oracle address
   * @param req The initialized Chainlink Request
   * @param payment The amount of LINK to send for the request
   * @return requestId The request ID
   */
  function sendOperatorRequest(Chainlink.Request memory req, uint256 payment) internal returns (bytes32) {
    return sendOperatorRequestTo(address(s_oracle), req, payment);
  }

  /**
   * @notice Creates a Chainlink request to the specified oracle address
   * @dev This function supports multi-word response
   * @dev Generates and stores a request ID, increments the local nonce, and uses `transferAndCall` to
   * send LINK which creates a request on the target oracle contract.
   * Emits ChainlinkRequested event.
   * @param oracleAddress The address of the oracle for the request
   * @param req The initialized Chainlink Request
   * @param payment The amount of LINK to send for the request
   * @return requestId The request ID
   */
  function sendOperatorRequestTo(
    address oracleAddress,
    Chainlink.Request memory req,
    uint256 payment
  ) internal returns (bytes32 requestId) {
    uint256 nonce = s_requestCount;
    s_requestCount = nonce + 1;
    bytes memory encodedRequest = abi.encodeWithSelector(
      OperatorInterface.operatorRequest.selector,
      SENDER_OVERRIDE, // Sender value - overridden by onTokenTransfer by the requesting contract's address
      AMOUNT_OVERRIDE, // Amount value - overridden by onTokenTransfer by the actual amount of LINK sent
      req.id,
      req.callbackFunctionId,
      nonce,
      OPERATOR_ARGS_VERSION,
      req.buf.buf
    );
    return _rawRequest(oracleAddress, nonce, payment, encodedRequest);
  }

  /**
   * @notice Make a request to an oracle
   * @param oracleAddress The address of the oracle for the request
   * @param nonce used to generate the request ID
   * @param payment The amount of LINK to send for the request
   * @param encodedRequest data encoded for request type specific format
   * @return requestId The request ID
   */
  function _rawRequest(
    address oracleAddress,
    uint256 nonce,
    uint256 payment,
    bytes memory encodedRequest
  ) private returns (bytes32 requestId) {
    requestId = keccak256(abi.encodePacked(this, nonce));
    s_pendingRequests[requestId] = oracleAddress;
    emit ChainlinkRequested(requestId);
    require(s_link.transferAndCall(oracleAddress, payment, encodedRequest), "unable to transferAndCall to oracle");
  }

  /**
   * @notice Allows a request to be cancelled if it has not been fulfilled
   * @dev Requires keeping track of the expiration value emitted from the oracle contract.
   * Deletes the request from the `pendingRequests` mapping.
   * Emits ChainlinkCancelled event.
   * @param requestId The request ID
   * @param payment The amount of LINK sent for the request
   * @param callbackFunc The callback function specified for the request
   * @param expiration The time of the expiration for the request
   */
  function cancelChainlinkRequest(
    bytes32 requestId,
    uint256 payment,
    bytes4 callbackFunc,
    uint256 expiration
  ) internal {
    OperatorInterface requested = OperatorInterface(s_pendingRequests[requestId]);
    delete s_pendingRequests[requestId];
    emit ChainlinkCancelled(requestId);
    requested.cancelOracleRequest(requestId, payment, callbackFunc, expiration);
  }

  /**
   * @notice the next request count to be used in generating a nonce
   * @dev starts at 1 in order to ensure consistent gas cost
   * @return returns the next request count to be used in a nonce
   */
  function getNextRequestCount() internal view returns (uint256) {
    return s_requestCount;
  }

  /**
   * @notice Sets the stored oracle address
   * @param oracleAddress The address of the oracle contract
   */
  function setChainlinkOracle(address oracleAddress) internal {
    s_oracle = OperatorInterface(oracleAddress);
  }

  /**
   * @notice Sets the LINK token address
   * @param linkAddress The address of the LINK token contract
   */
  function setChainlinkToken(address linkAddress) internal {
    s_link = LinkTokenInterface(linkAddress);
  }

  /**
   * @notice Sets the Chainlink token address for the public
   * network as given by the Pointer contract
   */
  function setPublicChainlinkToken() internal {
    setChainlinkToken(PointerInterface(LINK_TOKEN_POINTER).getAddress());
  }

  /**
   * @notice Retrieves the stored address of the LINK token
   * @return The address of the LINK token
   */
  function chainlinkTokenAddress() internal view returns (address) {
    return address(s_link);
  }

  /**
   * @notice Retrieves the stored address of the oracle contract
   * @return The address of the oracle contract
   */
  function chainlinkOracleAddress() internal view returns (address) {
    return address(s_oracle);
  }

  /**
   * @notice Allows for a request which was created on another contract to be fulfilled
   * on this contract
   * @param oracleAddress The address of the oracle contract that will fulfill the request
   * @param requestId The request ID used for the response
   */
  function addChainlinkExternalRequest(address oracleAddress, bytes32 requestId) internal notPendingRequest(requestId) {
    s_pendingRequests[requestId] = oracleAddress;
  }

  /**
   * @notice Sets the stored oracle and LINK token contracts with the addresses resolved by ENS
   * @dev Accounts for subnodes having different resolvers
   * @param ensAddress The address of the ENS contract
   * @param node The ENS node hash
   */
  function useChainlinkWithENS(address ensAddress, bytes32 node) internal {
    s_ens = ENSInterface(ensAddress);
    s_ensNode = node;
    bytes32 linkSubnode = keccak256(abi.encodePacked(s_ensNode, ENS_TOKEN_SUBNAME));
    ENSResolver resolver = ENSResolver(s_ens.resolver(linkSubnode));
    setChainlinkToken(resolver.addr(linkSubnode));
    updateChainlinkOracleWithENS();
  }

  /**
   * @notice Sets the stored oracle contract with the address resolved by ENS
   * @dev This may be called on its own as long as `useChainlinkWithENS` has been called previously
   */
  function updateChainlinkOracleWithENS() internal {
    bytes32 oracleSubnode = keccak256(abi.encodePacked(s_ensNode, ENS_ORACLE_SUBNAME));
    ENSResolver resolver = ENSResolver(s_ens.resolver(oracleSubnode));
    setChainlinkOracle(resolver.addr(oracleSubnode));
  }

  /**
   * @notice Ensures that the fulfillment is valid for this contract
   * @dev Use if the contract developer prefers methods instead of modifiers for validation
   * @param requestId The request ID for fulfillment
   */
  function validateChainlinkCallback(bytes32 requestId)
    internal
    recordChainlinkFulfillment(requestId)
  // solhint-disable-next-line no-empty-blocks
  {

  }

  /**
   * @dev Reverts if the sender is not the oracle of the request.
   * Emits ChainlinkFulfilled event.
   * @param requestId The request ID for fulfillment
   */
  modifier recordChainlinkFulfillment(bytes32 requestId) {
    require(msg.sender == s_pendingRequests[requestId], "Source must be the oracle of the request");
    delete s_pendingRequests[requestId];
    emit ChainlinkFulfilled(requestId);
    _;
  }

  /**
   * @dev Reverts if the request is already pending
   * @param requestId The request ID for fulfillment
   */
  modifier notPendingRequest(bytes32 requestId) {
    require(s_pendingRequests[requestId] == address(0), "Request is already pending");
    _;
  }
}

// File: docs.chain.link/samples/APIRequests/APIConsumer.sol


pragma solidity ^0.8.7;


/**
 * Request testnet LINK and ETH here: https://faucets.chain.link/
 * Find information on LINK Token Contracts and get the latest ETH and LINK faucets here: https://docs.chain.link/docs/link-token-contracts/
 */

/**
 * THIS IS AN EXAMPLE CONTRACT WHICH USES HARDCODED VALUES FOR CLARITY.
 * PLEASE DO NOT USE THIS CODE IN PRODUCTION.
 */
contract FedoraGoldTokenBridgeChainLink is ChainlinkClient {
    using Chainlink for Chainlink.Request;
  
    uint256 public volume;
    
    address public oracle;
    bytes32 public jobId;
    uint256 public fee;

    uint256 public price;
	
	function setOracleFee(uint256 _oracleFee) public onlyOwner {
        fee = _oracleFee;
    }

    function getOracleFee() public view returns (uint256) {
     return fee;
    }
	
	function setOracleJobId(bytes32 _oracleJobId) public onlyOwner {
        jobId = _oracleJobId;
    }

    function getOracleJobId() public view returns (bytes32) {
     return jobId;
    }
	
	function setOracle(address _oracleaddress) public onlyOwner {
        oracle = _oracleaddress;
    }
	
	function getOracle() public view returns (address) {
     return oracle;
    }
    

    using SafeMath for uint256;

   uint public redeemStart;
   uint public redeemEnd;
   uint public tokenRate;
   
   uint public transferFee;
   uint public redeemFee;
   
   FedoraGoldToken1 public token;   
   uint public fundingGoal;
   uint public tokensRedeemed;
   uint public etherRaised;
   address payable public owner;
   uint decimals = 18;
   
   event BuyTokens(address buyer, uint etherAmount);
   event RedeemTokens(address buyer, uint etherAmount);
   event Transfer(address indexed from, address indexed to, uint tokens);
   event BuyerBalance(address indexed buyer, uint buyermoney);
   event BuyerTokensAndRate(address indexed buyer, uint buyermoney, uint convertrate);
   event BuyerTokensTransferStats(address indexed buyer, address indexed owner, uint buyerapprovedmoney, uint buyermoney, uint ownermoney, uint convertrate);
   event TakeTokensBack(address ownerAddress, uint quantity );
   
   mapping(string => bool) transactionidexists;
   string[] public transactionsArray;

   mapping(address => bool) addressentered;
   mapping(address => bool) addressredeemed;
   address[] public redeemedaddressesArray;

   mapping(address => FedTransaction ) fedtransactions;

   struct FedTransaction {
       string transactionid;
       string proofofpurchase;
       address destinationaddress;
       uint amountcoins;
   }

    string _transactionidrequest;
    string _proofofpurchaserequest;
    address _fedaddressrequest;
    uint _fundsrequest;
    uint256 public fedamount;

   event RecordSetFedTransaction(string _transaction, string _pop, address _fedaddress, uint _funds );
   event RecordTxnNotExist(string _transaction);
   event RecordGetFedTransaction(string transaction, string _pop, address myfedaddress, uint funds);
   event RedeemFeeShow(uint _redeemFee);
   
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }

   constructor( uint _tokenRate, address _tokenAddress, uint _fundingGoal) {

      require( _tokenRate != 0 &&
      _tokenAddress != address(0) &&
      _fundingGoal != 0);
     
      redeemStart = block.timestamp;
      
      redeemEnd = redeemStart + 4 weeks;
      tokenRate = _tokenRate;
      token = FedoraGoldToken1(_tokenAddress);
      fundingGoal = _fundingGoal;
      owner = payable(msg.sender);
      // Test Network 
	    //setPublicChainlinkToken();

      // Kovan Network
      //oracle = 0xA1d76ABD287d87d6E1d92262F7D53Cbe4f290505;
      //jobId = "fc3ea215bb9e44e088107b29bb495e2d";
      
      //fee = 0.1 * 10 ** 18; // (Varies by network and job)

      // use the function below for Polygon/Non-Ethereum related calls. 
      setChainlinkToken(0xb0897686c545045aFc77CF20eC7A532E3120E0F1);

      // Polygon Network
      oracle = 0x0a31078cD57d23bf9e8e8F1BA78356ca2090569E;
      jobId = "9fcc5c3486684e92a6a66651ed4a5626";
      
      fee = 0.05 * 10 ** 18; // (Varies by network and job)
   }


    // Function to receive Ether. msg.data must be empty
    // this fallback method will always call redeem() method
    fallback() payable external  {
       //redeem();
    }

   function redeem() public payable {

      emit RedeemTokens( msg.sender , msg.value);
	  emit RedeemFeeShow(redeemFee);

      require(msg.sender!=owner);
      require(msg.value>=redeemFee);
      require(block.timestamp < redeemEnd && block.timestamp > redeemStart);

	  FedTransaction memory p = fedtransactions[msg.sender];
	  
      // donot proceed if transaction is not approved and in the list     
      require(transactionidexists[p.transactionid],"transaction doesnot exist");
	  
      // transfer tokens if not reedemed yet
      require(!addressredeemed[p.destinationaddress],"address already redeemed");

      uint tokensToGet;
      uint etherUsed = msg.value;
      tokensToGet = p.amountcoins;

      emit BuyerTokensTransferStats(msg.sender, p.destinationaddress, p.amountcoins, tokensToGet, etherUsed, tokenRate);
      owner.transfer(etherUsed);
      
      token.transfer(p.destinationaddress, tokensToGet);

      addressredeemed[p.destinationaddress] = true;
      redeemedaddressesArray.push(p.destinationaddress);
      
      emit BuyerBalance(msg.sender, tokensToGet);
      
      tokensRedeemed += tokensToGet;
      etherRaised += etherUsed;
   }
   
    function setRedeemEndDate(uint time) public onlyOwner {
        require(time>0);
        redeemEnd = time;
    }

    function getRedeemEndDate() public view returns (uint) {
      return redeemEnd;
    }
   
    function setFundingGoal(uint goal) public onlyOwner {
        fundingGoal = goal;
    }

    function getFundingGoal() public view returns (uint) {
     return fundingGoal;
   }
   
   function setTokenRate(uint tokenEthMultiplierRate) public onlyOwner {
        tokenRate = tokenEthMultiplierRate;
   }
   
   // since 1:1 will be used, so no 
   function getTokenRate() public view returns (uint) {
     return tokenRate;
   }

   function setTransferFee(uint _transferFee) public onlyOwner {
        transferFee = _transferFee;
    }

    function getTransferFee() public view returns (uint) {
     return transferFee;
   }

   function setRedeemFee(uint _redeemFee) public onlyOwner {
        redeemFee = _redeemFee;
    }

    function getRedeemFee() public view returns (uint) {
     return redeemFee;
   }

  // add transactions to the approved List
  // for security reasons, only contract creater can add transactions
  //function setFedtransaction(string memory _transaction, string memory _proofofpurchase, address _fedaddress, uint _funds ) public onlyOwner {

     // transaction hash should not exist already
    // require(!transactionidexists[_transaction], "transaction hash already used");
     // claim address should not exist already
    // require(!addressentered[_fedaddress],"address already used");

	 //emit RecordSetFedTransaction(_transaction,_proofofpurchase,_fedaddress,_funds);

	 //FedTransaction memory newTransaction = FedTransaction(_transaction,_proofofpurchase, _fedaddress,_funds );
	 //emit RecordTxnNotExist(_transaction);
   //  fedtransactions[_fedaddress] = newTransaction;
   //  transactionsArray.push(_transaction);
   //  transactionidexists[_transaction] = true;
    // addressentered[_fedaddress]= true;
  //}

 
  // List of transaction hashes which already submitted and approved on blockchain
  function getTransactions() view public returns(string[] memory ){
        return transactionsArray;
  }

  // List of addresses which already redeemed tokens
  function getRedeemedAddresses() view public returns(address[] memory ){
        return redeemedaddressesArray;
  }

  // Get transaction details based on one address
  function getFedtransaction(address payable fedaddress) public view returns (string memory transaction, string memory proof, address myfedaddress, uint funds)
  {  
     // copy the data into memory
     FedTransaction memory p = fedtransactions[fedaddress];

     //emit RecordGetFedTransaction(p.transactionid, p.proofofpurchase, p.destinationaddress, p.amountcoins);
     // break the struct's members out into a tuple in the same order that they appear in the struct
     return (p.transactionid, p.proofofpurchase, p.destinationaddress, p.amountcoins);
  }

   
    function concatenate(string memory a,string memory b,string memory c,string memory d) public pure returns (string memory ){
        return string(abi.encodePacked(a,'',b,'',c,'',d));
    } 




    // User will send the transaction id, signature for proof of burnt tokens, erc 20 address where they need tokens, 
    // and fund amount (this will not be saved),  
    // Request will be send to chain link oracle to verify against fedora gold chain.
    // Once the request is fullfilled, data will be saved to blockchain.
    // for security reasons, one erc 20 address can add only one transaction
    // for security reasons, one transaction id can add only be used once


    function getApprovedFedoraGoldAmount(string memory transactionid, string memory signature, address fedaddress, uint fedfunds ) public payable returns (bytes32 requestId) 
    {
        require(msg.value>=transferFee);
        uint etherUsed = msg.value;
        owner.transfer(etherUsed);

        _transactionidrequest = transactionid;
        _proofofpurchaserequest = signature;
        _fedaddressrequest = fedaddress;
        _fundsrequest = fedfunds;
               

        Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill2.selector);

        string memory urlstring = "https://fedgoldwebservice.herokuapp.com/getapprovedfedamount?signature=";
        string memory signaturestring = signature;
        string memory transactionstring = "&transaction_id=";
        string memory transactionhash = transactionid;
        string memory finalstring = concatenate(urlstring,signaturestring,transactionstring,transactionhash);

        
        // Set the URL to perform the GET request on
        // NOTE: If this oracle gets more than 5 requests from this job at a time, it will not return. 
        request.add("get", finalstring);
        
        // Sends the request
        return sendChainlinkRequestTo(oracle, request, fee);
    }


    
    /**
     * Receive the response in the form of uint256
     */ 
    function fulfill2(bytes32 _requestId, uint256 _fedamount) public recordChainlinkFulfillment(_requestId)
    {
        
         // transaction hash should not exist already
        require(!transactionidexists[_transactionidrequest], "Transaction hash already used");
        // claim address should not exist already
        require(!addressentered[_fedaddressrequest],"ERC 20 address already used");

        fedamount = _fedamount;
        
        emit RecordSetFedTransaction(_transactionidrequest,_proofofpurchaserequest,_fedaddressrequest,fedamount);

        FedTransaction memory newTransaction = FedTransaction(_transactionidrequest,_proofofpurchaserequest, _fedaddressrequest,fedamount );
        emit RecordTxnNotExist(_transactionidrequest);
        fedtransactions[_fedaddressrequest] = newTransaction;
        transactionsArray.push(_transactionidrequest);
        transactionidexists[_transactionidrequest] = true;
        addressentered[_fedaddressrequest]= true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_tokenRate","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_fundingGoal","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"etherAmount","type":"uint256"}],"name":"BuyTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyermoney","type":"uint256"}],"name":"BuyerBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyermoney","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"convertrate","type":"uint256"}],"name":"BuyerTokensAndRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyerapprovedmoney","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyermoney","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ownermoney","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"convertrate","type":"uint256"}],"name":"BuyerTokensTransferStats","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"ChainlinkCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"ChainlinkFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"ChainlinkRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"transaction","type":"string"},{"indexed":false,"internalType":"string","name":"_pop","type":"string"},{"indexed":false,"internalType":"address","name":"myfedaddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"funds","type":"uint256"}],"name":"RecordGetFedTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_transaction","type":"string"},{"indexed":false,"internalType":"string","name":"_pop","type":"string"},{"indexed":false,"internalType":"address","name":"_fedaddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_funds","type":"uint256"}],"name":"RecordSetFedTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_transaction","type":"string"}],"name":"RecordTxnNotExist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_redeemFee","type":"uint256"}],"name":"RedeemFeeShow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"etherAmount","type":"uint256"}],"name":"RedeemTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"ownerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"TakeTokensBack","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":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"string","name":"a","type":"string"},{"internalType":"string","name":"b","type":"string"},{"internalType":"string","name":"c","type":"string"},{"internalType":"string","name":"d","type":"string"}],"name":"concatenate","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"etherRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fedamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestId","type":"bytes32"},{"internalType":"uint256","name":"_fedamount","type":"uint256"}],"name":"fulfill2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundingGoal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"transactionid","type":"string"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"address","name":"fedaddress","type":"address"},{"internalType":"uint256","name":"fedfunds","type":"uint256"}],"name":"getApprovedFedoraGoldAmount","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"fedaddress","type":"address"}],"name":"getFedtransaction","outputs":[{"internalType":"string","name":"transaction","type":"string"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"address","name":"myfedaddress","type":"address"},{"internalType":"uint256","name":"funds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundingGoal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleJobId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedeemEndDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedeemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedeemedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactions","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jobId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"redeemEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redeemedaddressesArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"goal","type":"uint256"}],"name":"setFundingGoal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracleaddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleFee","type":"uint256"}],"name":"setOracleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_oracleJobId","type":"bytes32"}],"name":"setOracleJobId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setRedeemEndDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_redeemFee","type":"uint256"}],"name":"setRedeemFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenEthMultiplierRate","type":"uint256"}],"name":"setTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract FedoraGoldToken1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactionsArray","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600160045560126015553480156200001b57600080fd5b5060405162002808380380620028088339810160408190526200003e9162000134565b82158015906200005657506001600160a01b03821615155b80156200006257508015155b6200006c57600080fd5b42600b81905562000081906224ea006200017c565b600c55600d839055601080546001600160a01b03199081166001600160a01b03851617909155601182905560148054339083161790556002805490911673b0897686c545045afc77cf20ec7a532e3120e0f11790555050600780546001600160a01b031916730a31078cd57d23bf9e8e8f1ba78356ca2090569e179055507f396663633563333438363638346539326136613636363531656434613536323660085566b1a2bc2ec50000600955620001a3565b6000806000606084860312156200014a57600080fd5b835160208501519093506001600160a01b03811681146200016a57600080fd5b80925050604084015190509250925092565b600082198211156200019e57634e487b7160e01b600052601160045260246000fd5b500190565b61265580620001b36000396000f3fe6080604052600436106102315760003560e01c8063965fa21e1161012d578063c618a1e4116100b0578063ddca3f4311610077578063ddca3f43146105e7578063df9776cf146105fd578063e210ecee1461061d578063e24444691461063d578063e7c475531461065d578063fc0c546a1461068d57005b8063c618a1e41461057b578063c6d98f1a14610591578063c78613da146105a6578063cd72ab69146105bb578063d1994d71146105d157005b8063b6d9ef60116100f4578063b6d9ef6014610513578063b85090f314610533578063be040fb014610548578063c2939d9714610550578063c5c8ea961461056657005b8063965fa21e146104a75780639a17d8c1146104bd578063a035b1fe146104d2578063acb2ad6f146104e8578063ade1c580146104fe57005b806361241c28116101b557806383920e901161017c57806383920e901461041c57806389cbc4161461043e5780638da5cb5b146104545780638f02bb5b1461047457806391028d551461049457005b806361241c28146103705780637a3a0e84146103905780637adbf973146103a65780637dc0d1d0146103c6578063833b1fce146103fe57005b8063514f40cc116101f9578063514f40cc146102d8578063552f63a0146102fa578063576eac661461031a5780635d841af51461033a578063606647c81461035a57005b80630159a91d1461023357806318c6654f1461026957806331711884146102895780633e2d7004146102ad5780633e5b7ccb146102c2575b005b34801561023f57600080fd5b5061025361024e366004611fd8565b6106ad565b604051610260919061234b565b60405180910390f35b34801561027557600080fd5b50610231610284366004611f38565b6106e0565b34801561029557600080fd5b5061029f600d5481565b604051908152602001610260565b3480156102b957600080fd5b50600d5461029f565b3480156102ce57600080fd5b5061029f60205481565b3480156102e457600080fd5b506102ed610b77565b604051610260919061229c565b34801561030657600080fd5b50610231610315366004611f1f565b610bd9565b34801561032657600080fd5b50610231610335366004611f1f565b610c02565b34801561034657600080fd5b50610231610355366004611f1f565b610c1e565b34801561036657600080fd5b5061029f600c5481565b34801561037c57600080fd5b5061023161038b366004611f1f565b610c3a565b34801561039c57600080fd5b5061029f60115481565b3480156103b257600080fd5b506102316103c1366004611ee0565b610c56565b3480156103d257600080fd5b506007546103e6906001600160a01b031681565b6040516001600160a01b039091168152602001610260565b34801561040a57600080fd5b506007546001600160a01b03166103e6565b34801561042857600080fd5b50610431610c8f565b60405161026091906122e9565b34801561044a57600080fd5b5061029f60125481565b34801561046057600080fd5b506014546103e6906001600160a01b031681565b34801561048057600080fd5b5061023161048f366004611f1f565b610d68565b61029f6104a2366004611f5a565b610d84565b3480156104b357600080fd5b5061029f600f5481565b3480156104c957600080fd5b50600e5461029f565b3480156104de57600080fd5b5061029f600a5481565b3480156104f457600080fd5b5061029f600e5481565b34801561050a57600080fd5b5060095461029f565b34801561051f57600080fd5b5061023161052e366004611f1f565b610edc565b34801561053f57600080fd5b5060115461029f565b610231610ef8565b34801561055c57600080fd5b5061029f60085481565b34801561057257600080fd5b50600c5461029f565b34801561058757600080fd5b5061029f60065481565b34801561059d57600080fd5b50600f5461029f565b3480156105b257600080fd5b5060085461029f565b3480156105c757600080fd5b5061029f60135481565b3480156105dd57600080fd5b5061029f600b5481565b3480156105f357600080fd5b5061029f60095481565b34801561060957600080fd5b50610231610618366004611f1f565b6113ea565b34801561062957600080fd5b50610253610638366004611f1f565b611406565b34801561064957600080fd5b506103e6610658366004611f1f565b6114b2565b34801561066957600080fd5b5061067d610678366004611ee0565b6114dc565b604051610260949392919061235e565b34801561069957600080fd5b506010546103e6906001600160a01b031681565b6060848484846040516020016106c69493929190612144565b60405160208183030381529060405290505b949350505050565b60008281526005602052604090205482906001600160a01b0316331461075e5760405162461bcd60e51b815260206004820152602860248201527f536f75726365206d75737420626520746865206f7261636c65206f6620746865604482015267081c995c5d595cdd60c21b60648201526084015b60405180910390fd5b60008181526005602052604080822080546001600160a01b03191690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a26016601c6040516107b2919061219b565b9081526040519081900360200190205460ff16156108125760405162461bcd60e51b815260206004820152601d60248201527f5472616e73616374696f6e206861736820616c726561647920757365640000006044820152606401610755565b601e546001600160a01b031660009081526018602052604090205460ff161561087d5760405162461bcd60e51b815260206004820152601b60248201527f455243203230206164647265737320616c7265616479207573656400000000006044820152606401610755565b6020829055601e546040517f3885df6f6ca9b23e3e1fdb36455f0bf26b1e5fae5338b54236764bff69dc706b916108c791601c91601d916001600160a01b039091169087906123b3565b60405180910390a160006040518060800160405280601c80546108e99061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546109159061253d565b80156109625780601f1061093757610100808354040283529160200191610962565b820191906000526020600020905b81548152906001019060200180831161094557829003601f168201915b50505050508152602001601d80546109799061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546109a59061253d565b80156109f25780601f106109c7576101008083540402835291602001916109f2565b820191906000526020600020905b8154815290600101906020018083116109d557829003601f168201915b5050509183525050601e546001600160a01b031660208083019190915254604091820152519091507facd860661c05353de519c8e4ec7cdfe6b63af2aec9188a510151ed3bb465773a90610a4890601c906123a0565b60405180910390a1601e546001600160a01b03166000908152601b60209081526040909120825180518493610a81928492910190611d04565b506020828101518051610a9a9260018501920190611d04565b5060408201516002820180546001600160a01b0319166001600160a01b0390921691909117905560609091015160039091015560178054600181018255600091909152601c80547fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590920191610b0f9061253d565b610b1a929190611d88565b5060016016601c604051610b2e919061219b565b90815260408051918290036020908101909220805493151560ff19948516179055601e546001600160a01b03166000908152601890925290208054909116600117905550505050565b6060601a805480602002602001604051908101604052809291908181526020018280548015610bcf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb1575b5050505050905090565b6014546001600160a01b03163314610bf057600080fd5b60008111610bfd57600080fd5b600c55565b6014546001600160a01b03163314610c1957600080fd5b601155565b6014546001600160a01b03163314610c3557600080fd5b600f55565b6014546001600160a01b03163314610c5157600080fd5b600d55565b6014546001600160a01b03163314610c6d57600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60606017805480602002602001604051908101604052809291908181526020016000905b82821015610d5f578382906000526020600020018054610cd29061253d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfe9061253d565b8015610d4b5780601f10610d2057610100808354040283529160200191610d4b565b820191906000526020600020905b815481529060010190602001808311610d2e57829003601f168201915b505050505081526020019060010190610cb3565b50505050905090565b6014546001600160a01b03163314610d7f57600080fd5b600e55565b6000600e54341015610d9557600080fd5b60145460405134916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610dcf573d6000803e3d6000fd5b508551610de390601c906020890190611d04565b508451610df790601d906020880190611d04565b50601e80546001600160a01b0319166001600160a01b038616179055601f839055600854600090610e3090306318c6654f60e01b61167a565b905060006040518060800160405280604781526020016125d96047913960408051808201909152601081526f267472616e73616374696f6e5f69643d60801b60208201529091508790896000610e88858585856106ad565b60408051808201909152600381526219d95d60ea1b6020820152909150610eb19087908361169f565b600754600954610ecc916001600160a01b03169088906116c2565b9c9b505050505050505050505050565b6014546001600160a01b03163314610ef357600080fd5b600955565b604080513381523460208201527f60213c45c34d8b94e495fd5871fdea7a7511f659e884ea25a0c8843b7f98bfad910160405180910390a17fd7fed576206202a4db96e35b2287b434a56512edf6759b719f171fad0b2f583d600f54604051610f6391815260200190565b60405180910390a16014546001600160a01b0316331415610f8357600080fd5b600f54341015610f9257600080fd5b600c5442108015610fa45750600b5442115b610fad57600080fd5b336000908152601b6020526040808220815160808101909252805482908290610fd59061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546110019061253d565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b505050505081526020016001820180546110679061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546110939061253d565b80156110e05780601f106110b5576101008083540402835291602001916110e0565b820191906000526020600020905b8154815290600101906020018083116110c357829003601f168201915b505050918352505060028201546001600160a01b031660208201526003909101546040918201528151905191925060169161111b9190612128565b9081526040519081900360200190205460ff1661117a5760405162461bcd60e51b815260206004820152601960248201527f7472616e73616374696f6e20646f65736e6f74206578697374000000000000006044820152606401610755565b6040808201516001600160a01b031660009081526019602052205460ff16156111e55760405162461bcd60e51b815260206004820152601860248201527f6164647265737320616c72656164792072656465656d656400000000000000006044820152606401610755565b606081810151604080840151600d548251848152602081018590523493810184905294850152919290916001600160a01b03169033907f9aca68b4919afd6392a76af73ab569982bdcc9fded4e5014148c85ef985450cf9060800160405180910390a36014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611282573d6000803e3d6000fd5b50601054604084810151905163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d9190611efd565b50604083810180516001600160a01b039081166000908152601960209081528482208054600160ff1990911681179091559351601a805495860181559092527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e90930180546001600160a01b03191691909216179055905183815233917f1023550e21956cb09c8503aa9a9ac7c10b94ff471d82191dc7c0bd327a4b4742910160405180910390a281601260008282546113c791906123d8565b9250508190555080601360008282546113e091906123d8565b9091555050505050565b6014546001600160a01b0316331461140157600080fd5b600855565b6017818154811061141657600080fd5b9060005260206000200160009150905080546114319061253d565b80601f016020809104026020016040519081016040528092919081815260200182805461145d9061253d565b80156114aa5780601f1061147f576101008083540402835291602001916114aa565b820191906000526020600020905b81548152906001019060200180831161148d57829003601f168201915b505050505081565b601a81815481106114c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6060806000806000601b6000876001600160a01b03166001600160a01b031681526020019081526020016000206040518060800160405290816000820180546115249061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546115509061253d565b801561159d5780601f106115725761010080835404028352916020019161159d565b820191906000526020600020905b81548152906001019060200180831161158057829003601f168201915b505050505081526020016001820180546115b69061253d565b80601f01602080910402602001604051908101604052809291908181526020018280546115e29061253d565b801561162f5780601f106116045761010080835404028352916020019161162f565b820191906000526020600020905b81548152906001019060200180831161161257829003601f168201915b505050918352505060028201546001600160a01b0316602080830191909152600390920154604091820152825191830151908301516060909301519199909850919650945092505050565b611682611e03565b61168a611e03565b61169681868686611755565b95945050505050565b60808301516116ae9083611792565b60808301516116bd9082611792565b505050565b6004546000906116d38160016123d8565b600455835160408086015160808701515191516000936320214ca360e11b9361170b9386938493923092918a9160019160240161220d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061174b868386846117a9565b9695505050505050565b61175d611e03565b61176d8560800151610100611916565b50509183526001600160a01b031660208301526001600160e01b031916604082015290565b61179f8260038351611981565b6116bd8282611a96565b6040516bffffffffffffffffffffffff193060601b1660208201526034810184905260009060540160408051808303601f1901815282825280516020918201206000818152600590925291812080546001600160a01b0319166001600160a01b038a1617905590925082917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af99190a2600254604051630200057560e51b81526001600160a01b0390911690634000aea09061186c90889087908790600401612275565b602060405180830381600087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be9190611efd565b6106d85760405162461bcd60e51b815260206004820152602360248201527f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261604482015262636c6560e81b6064820152608401610755565b604080518082019091526060815260006020820152611936602083612572565b1561195e57611946602083612572565b6119519060206124fa565b61195b90836123d8565b91505b506020808301829052604080518085526000815283019091019052815b92915050565b60178167ffffffffffffffff16116119ac576119a68360e0600585901b168317611ac4565b50505050565b60ff8167ffffffffffffffff16116119ea576119d3836018611fe0600586901b1617611ac4565b506119a68367ffffffffffffffff83166001611ae9565b61ffff8167ffffffffffffffff1611611a2957611a12836019611fe0600586901b1617611ac4565b506119a68367ffffffffffffffff83166002611ae9565b63ffffffff8167ffffffffffffffff1611611a6a57611a5383601a611fe0600586901b1617611ac4565b506119a68367ffffffffffffffff83166004611ae9565b611a7f83601b611fe0600586901b1617611ac4565b506119a68367ffffffffffffffff83166008611ae9565b604080518082019091526060815260006020820152611abd83846000015151848551611b0f565b9392505050565b604080518082019091526060815260006020820152611abd8384600001515184611bf9565b6040805180820190915260608152600060208201526106d8848560000151518585611c55565b6040805180820190915260608152600060208201528251821115611b3257600080fd5b6020850151611b4183866123d8565b1115611b7457611b7485611b6487602001518786611b5f91906123d8565b611cd6565b611b6f9060026124db565b611ced565b600080865180518760208301019350808887011115611b935787860182525b505050602084015b60208410611bd35780518252611bb26020836123d8565b9150611bbf6020826123d8565b9050611bcc6020856124fa565b9350611b9b565b51815160001960208690036101000a019081169019919091161790525083949350505050565b60408051808201909152606081526000602082015283602001518310611c2e57611c2e8485602001516002611b6f91906124db565b835180516020858301018481535080851415611c4b576001810182525b5093949350505050565b6040805180820190915260608152600060208201526020850151611c7985846123d8565b1115611c8d57611c8d85611b6486856123d8565b60006001611c9d84610100612433565b611ca791906124fa565b9050855183868201018583198251161781525080518487011115611ccb5783860181525b509495945050505050565b600081831115611ce757508161197b565b50919050565b8151611cf98383611916565b506119a68382611a96565b828054611d109061253d565b90600052602060002090601f016020900481019282611d325760008555611d78565b82601f10611d4b57805160ff1916838001178555611d78565b82800160010185558215611d78579182015b82811115611d78578251825591602001919060010190611d5d565b50611d84929150611e3e565b5090565b828054611d949061253d565b90600052602060002090601f016020900481019282611db65760008555611d78565b82601f10611dc75780548555611d78565b82800160010185558215611d7857600052602060002091601f016020900482015b82811115611d78578254825591600101919060010190611de8565b6040805160a0810182526000808252602080830182905282840182905260608084018390528451808601909552845283015290608082015290565b5b80821115611d845760008155600101611e3f565b600082601f830112611e6457600080fd5b813567ffffffffffffffff80821115611e7f57611e7f6125aa565b604051601f8301601f19908116603f01168101908282118183101715611ea757611ea76125aa565b81604052838152866020858801011115611ec057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611ef257600080fd5b8135611abd816125c0565b600060208284031215611f0f57600080fd5b81518015158114611abd57600080fd5b600060208284031215611f3157600080fd5b5035919050565b60008060408385031215611f4b57600080fd5b50508035926020909101359150565b60008060008060808587031215611f7057600080fd5b843567ffffffffffffffff80821115611f8857600080fd5b611f9488838901611e53565b95506020870135915080821115611faa57600080fd5b50611fb787828801611e53565b9350506040850135611fc8816125c0565b9396929550929360600135925050565b60008060008060808587031215611fee57600080fd5b843567ffffffffffffffff8082111561200657600080fd5b61201288838901611e53565b9550602087013591508082111561202857600080fd5b61203488838901611e53565b9450604087013591508082111561204a57600080fd5b61205688838901611e53565b9350606087013591508082111561206c57600080fd5b5061207987828801611e53565b91505092959194509250565b6000815180845261209d816020860160208601612511565b601f01601f19169290920160200192915050565b600081546120be8161253d565b8085526020600183811680156120db57600181146120ef5761211d565b60ff1985168884015260408801955061211d565b866000528260002060005b858110156121155781548a82018601529083019084016120fa565b890184019650505b505050505092915050565b6000825161213a818460208701612511565b9190910192915050565b60008551612156818460208a01612511565b85519083019061216a818360208a01612511565b855191019061217d818360208901612511565b8451910190612190818360208801612511565b019695505050505050565b60008083546121a98161253d565b600182811680156121c157600181146121d257612201565b60ff19841687528287019450612201565b8760005260208060002060005b858110156121f85781548a8201529084019082016121df565b50505082870194505b50929695505050505050565b6001600160a01b0389811682526020820189905260408201889052861660608201526001600160e01b03198516608082015260a0810184905260c0810183905261010060e0820181905260009061226683820185612085565b9b9a5050505050505050505050565b60018060a01b03841681528260208201526060604082015260006116966060830184612085565b6020808252825182820181905260009190848201906040850190845b818110156122dd5783516001600160a01b0316835292840192918401916001016122b8565b50909695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561233e57603f1988860301845261232c858351612085565b94509285019290850190600101612310565b5092979650505050505050565b602081526000611abd6020830184612085565b6080815260006123716080830187612085565b82810360208401526123838187612085565b6001600160a01b0395909516604084015250506060015292915050565b602081526000611abd60208301846120b1565b6080815260006123c660808301876120b1565b828103602084015261238381876120b1565b600082198211156123eb576123eb612594565b500190565b600181815b8085111561242b57816000190482111561241157612411612594565b8085161561241e57918102915b93841c93908002906123f5565b509250929050565b6000611abd83836000826124495750600161197b565b816124565750600061197b565b816001811461246c576002811461247657612492565b600191505061197b565b60ff84111561248757612487612594565b50506001821b61197b565b5060208310610133831016604e8410600b84101617156124b5575081810a61197b565b6124bf83836123f0565b80600019048211156124d3576124d3612594565b029392505050565b60008160001904831182151516156124f5576124f5612594565b500290565b60008282101561250c5761250c612594565b500390565b60005b8381101561252c578181015183820152602001612514565b838111156119a65750506000910152565b600181811c9082168061255157607f821691505b60208210811415611ce757634e487b7160e01b600052602260045260246000fd5b60008261258f57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146125d557600080fd5b5056fe68747470733a2f2f666564676f6c64776562736572766963652e6865726f6b756170702e636f6d2f676574617070726f766564666564616d6f756e743f7369676e61747572653da2646970667358221220625466ae2bc915db630edbaa015a9847f0a01b5f319c32ee01ebcb4e655e2e1464736f6c634300080700330000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000c4c6e2c87647224865a79f143d090367d3fee8490000000000000000000000000000000000000001431e0fae6d7217caa0000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000c4c6e2c87647224865a79f143d090367d3fee8490000000000000000000000000000000000000001431e0fae6d7217caa0000000

-----Decoded View---------------
Arg [0] : _tokenRate (uint256): 1000000000000000000
Arg [1] : _tokenAddress (address): 0xc4c6e2c87647224865a79f143d090367d3fee849
Arg [2] : _fundingGoal (uint256): 100000000000000000000000000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [1] : 000000000000000000000000c4c6e2c87647224865a79f143d090367d3fee849
Arg [2] : 0000000000000000000000000000000000000001431e0fae6d7217caa0000000


Deployed ByteCode Sourcemap

45599:11393:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53888:190;;;;;;;;;;-1:-1:-1;53888:190:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55983:1004;;;;;;;;;;-1:-1:-1;55983:1004:0;;;;;:::i;:::-;;:::i;46536:21::-;;;;;;;;;;;;;;;;;;;10989:25:1;;;10977:2;10962:18;46536:21:0;10843:177:1;51429:82:0;;;;;;;;;;-1:-1:-1;51495:9:0;;51429:82;;47964:24;;;;;;;;;;;;;;;;53134:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50846:115::-;;;;;;;;;;-1:-1:-1;50846:115:0;;;;;:::i;:::-;;:::i;51068:89::-;;;;;;;;;;-1:-1:-1;51068:89:0;;;;;:::i;:::-;;:::i;51724:97::-;;;;;;;;;;-1:-1:-1;51724:97:0;;;;;:::i;:::-;;:::i;46509:21::-;;;;;;;;;;;;;;;;51261:120;;;;;;;;;;-1:-1:-1;51261:120:0;;;;;:::i;:::-;;:::i;46667:23::-;;;;;;;;;;;;;;;;46244:102;;;;;;;;;;-1:-1:-1;46244:102:0;;;;;:::i;:::-;;:::i;45747:21::-;;;;;;;;;;-1:-1:-1;45747:21:0;;;;-1:-1:-1;;;;;45747:21:0;;;;;;-1:-1:-1;;;;;7610:32:1;;;7592:51;;7580:2;7565:18;45747:21:0;7446:203:1;46352:80:0;;;;;;;;;;-1:-1:-1;46418:6:0;;-1:-1:-1;;;;;46418:6:0;46352:80;;52969:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46696:26::-;;;;;;;;;;;;;;;;46757:28;;;;;;;;;;-1:-1:-1;46757:28:0;;;;-1:-1:-1;;;;;46757:28:0;;;51518:105;;;;;;;;;;-1:-1:-1;51518:105:0;;;;;:::i;:::-;;:::i;54583:1313::-;;;;;;:::i;:::-;;:::i;46597:21::-;;;;;;;;;;;;;;;;51631:86;;;;;;;;;;-1:-1:-1;51699:11:0;;51631:86;;45829:20;;;;;;;;;;;;;;;;46568:23;;;;;;;;;;;;;;;;45958:80;;;;;;;;;;-1:-1:-1;46027:3:0;;45958:80;;45856:94;;;;;;;;;;-1:-1:-1;45856:94:0;;;;;:::i;:::-;;:::i;51165:86::-;;;;;;;;;;-1:-1:-1;51233:11:0;;51165:86;;49623:1212;;;:::i;45775:20::-;;;;;;;;;;;;;;;;50969:88;;;;;;;;;;-1:-1:-1;51040:9:0;;50969:88;;45713:21;;;;;;;;;;;;;;;;51829:82;;;;;;;;;;-1:-1:-1;51895:9:0;;51829:82;;46154:84;;;;;;;;;;-1:-1:-1;46225:5:0;;46154:84;;46728:23;;;;;;;;;;;;;;;;46480;;;;;;;;;;;;;;;;45802:18;;;;;;;;;;;;;;;;46044:102;;;;;;;;;;-1:-1:-1;46044:102:0;;;;;:::i;:::-;;:::i;47435:33::-;;;;;;;;;;-1:-1:-1;47435:33:0;;;;;:::i;:::-;;:::i;47567:39::-;;;;;;;;;;-1:-1:-1;47567:39:0;;;;;:::i;:::-;;:::i;53307:568::-;;;;;;;;;;-1:-1:-1;53307:568:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;46629:29::-;;;;;;;;;;-1:-1:-1;46629:29:0;;;;-1:-1:-1;;;;;46629:29:0;;;53888:190;53995:13;54052:1;54057;54062;54067;54035:34;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54021:49;;53888:190;;;;;;;:::o;55983:1004::-;44701:28;;;;:17;:28;;;;;;;;-1:-1:-1;;;;;44701:28:0;44687:10;:42;44679:95;;;;-1:-1:-1;;;44679:95:0;;14148:2:1;44679:95:0;;;14130:21:1;14187:2;14167:18;;;14160:30;14226:34;14206:18;;;14199:62;-1:-1:-1;;;14277:18:1;;;14270:38;14325:19;;44679:95:0;;;;;;;;;44788:28;;;;:17;:28;;;;;;44781:35;;-1:-1:-1;;;;;;44781:35:0;;;44828:29;44806:9;;44828:29;;;56177:19:::1;56197:21;56177:42;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;::::1;;56176:43;56168:85;;;::::0;-1:-1:-1;;;56168:85:0;;14557:2:1;56168:85:0::1;::::0;::::1;14539:21:1::0;14596:2;14576:18;;;14569:30;14635:31;14615:18;;;14608:59;14684:18;;56168:85:0::1;14355:353:1::0;56168:85:0::1;56339:18;::::0;-1:-1:-1;;;;;56339:18:0::1;56324:34;::::0;;;:14:::1;:34;::::0;;;;;::::1;;56323:35;56315:74;;;::::0;-1:-1:-1;;;56315:74:0;;14915:2:1;56315:74:0::1;::::0;::::1;14897:21:1::0;14954:2;14934:18;;;14927:30;14993:29;14973:18;;;14966:57;15040:18;;56315:74:0::1;14713:351:1::0;56315:74:0::1;56402:9;:22:::0;;;56520:18:::1;::::0;56450:99:::1;::::0;::::1;::::0;::::1;::::0;56474:21:::1;::::0;56496:23:::1;::::0;-1:-1:-1;;;;;56520:18:0;;::::1;::::0;56414:10;;56450:99:::1;:::i;:::-;;;;;;;;56562:36;56601:92;;;;;;;;56616:21;56601:92;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56638:23;56601:92;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;56601:92:0;;;-1:-1:-1;;56663:18:0::1;::::0;-1:-1:-1;;;;;56663:18:0::1;56601:92;::::0;;::::1;::::0;;;;56682:9;56601:92;;;;;56709:40;56562:131;;-1:-1:-1;56709:40:0::1;::::0;::::1;::::0;56727:21:::1;::::0;56709:40:::1;:::i;:::-;;;;;;;;56776:18;::::0;-1:-1:-1;;;;;56776:18:0::1;56760:35;::::0;;;:15:::1;:35;::::0;;;;;;;:52;;;;56798:14;;56760:52:::1;::::0;:35;;:52;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;56760:52:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;56760:52:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;56760:52:0::1;-1:-1:-1::0;;;;;56760:52:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;56823:17:::1;:45:::0;;-1:-1:-1;56823:45:0;::::1;::::0;;-1:-1:-1;56823:45:0;;;;56846:21:::1;56823:45:::0;;;;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;:::i;:::-;;56924:4;56879:19;56899:21;56879:42;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;:49;;;::::1;;-1:-1:-1::0;;56879:49:0;;::::1;;::::0;;56954:18:::1;::::0;-1:-1:-1;;;;;56954:18:0::1;56879:42;56939:34:::0;;;:14:::1;:34:::0;;;;;:40;;;;::::1;56879:49:::0;56939:40:::1;::::0;;-1:-1:-1;;;;55983:1004:0:o;53134:116::-;53186:16;53222:22;53215:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53215:29:0;;;;;;;;;;;;;;;;;;;;;;;53134:116;:::o;50846:115::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;50924:1:::1;50919:4;:6;50911:15;;;::::0;::::1;;50937:9;:16:::0;50846:115::o;51068:89::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;51131:11:::1;:18:::0;51068:89::o;51724:97::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;51791:9:::1;:22:::0;51724:97::o;51261:120::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;51340:9:::1;:34:::0;51261:120::o;46244:102::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;46315:6:::1;:23:::0;;-1:-1:-1;;;;;;46315:23:0::1;-1:-1:-1::0;;;;;46315:23:0;;;::::1;::::0;;;::::1;::::0;;46244:102::o;52969:105::-;53016:15;53051:17;53044:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52969:105;:::o;51518:::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;51589:11:::1;:26:::0;51518:105::o;54583:1313::-;54734:17;54789:11;;54778:9;:22;;54770:31;;;;;;54849:5;;:25;;54829:9;;-1:-1:-1;;;;;54849:5:0;;:25;;;;;54829:9;;54812:14;54849:25;54812:14;54849:25;54829:9;54849:5;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54887:37:0;;;;:21;;:37;;;;;:::i;:::-;-1:-1:-1;54935:35:0;;;;:23;;:35;;;;;:::i;:::-;-1:-1:-1;54981:18:0;:31;;-1:-1:-1;;;;;;54981:31:0;-1:-1:-1;;;;;54981:31:0;;;;;55023:13;:24;;;55134:5;;-1:-1:-1;;55112:67:0;;55149:4;-1:-1:-1;;;55112:21:0;:67::i;:::-;55077:102;;55192:23;:99;;;;;;;;;;;;;;;;;55354:52;;;;;;;;;;;;-1:-1:-1;;;55354:52:0;;;;55192:99;;-1:-1:-1;55334:9:0;;55449:13;55302:29;55501:72;55192:99;55334:9;55354:52;55449:13;55501:11;:72::i;:::-;55755:31;;;;;;;;;;;;-1:-1:-1;;;55755:31:0;;;;55473:100;;-1:-1:-1;55755:31:0;;:7;;55473:100;55755:11;:31::i;:::-;55867:6;;55884:3;;55844:44;;-1:-1:-1;;;;;55867:6:0;;55875:7;;55844:22;:44::i;:::-;55837:51;54583:1313;-1:-1:-1;;;;;;;;;;;;54583:1313:0:o;45856:94::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;45926:3:::1;:16:::0;45856:94::o;49623:1212::-;49672:37;;;49686:10;8052:51:1;;49699:9:0;8134:2:1;8119:18;;8112:34;49672:37:0;;8025:18:1;49672:37:0;;;;;;;49720:24;49734:9;;49720:24;;;;10989:25:1;;10977:2;10962:18;;10843:177;49720:24:0;;;;;;;;49775:5;;-1:-1:-1;;;;;49775:5:0;49763:10;:17;;49755:26;;;;;;49809:9;;49798;:20;;49790:29;;;;;;49854:9;;49836:15;:27;:60;;;;;49885:11;;49867:15;:29;49836:60;49828:69;;;;;;49947:10;49905:23;49931:27;;;:15;:27;;;;;;49905:53;;;;;;;;;;;;49931:27;;49905:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;49905:53:0;;;-1:-1:-1;;49905:53:0;;;;-1:-1:-1;;;;;49905:53:0;;;;;;;;;;;;;;;50076:15;;50056:36;;49905:53;;-1:-1:-1;50056:19:0;;:36;;50076:15;50056:36;:::i;:::-;;;;;;;;;;;;;;;;;50048:73;;;;-1:-1:-1;;;50048:73:0;;13794:2:1;50048:73:0;;;13776:21:1;13833:2;13813:18;;;13806:30;13872:27;13852:18;;;13845:55;13917:18;;50048:73:0;13592:349:1;50048:73:0;50206:20;;;;;-1:-1:-1;;;;;50190:37:0;;;;;:15;:37;;;;;;50189:38;50181:74;;;;-1:-1:-1;;;50181:74:0;;13441:2:1;50181:74:0;;;13423:21:1;13480:2;13460:18;;;13453:30;13519:26;13499:18;;;13492:54;13563:18;;50181:74:0;13239:348:1;50181:74:0;50340:13;;;;;50406:20;;;;;50467:9;;50369:108;;15482:25:1;;;15538:2;15523:18;;15516:34;;;50308:9:0;15566:18:1;;;15559:34;;;15609:18;;;15602:34;50340:13:0;;50308:9;;-1:-1:-1;;;;;50369:108:0;;50394:10;;50369:108;;15469:3:1;15454:19;50369:108:0;;;;;;;50486:5;;:25;;-1:-1:-1;;;;;50486:5:0;;;;:25;;;;;50501:9;;50486:5;:25;:5;:25;50501:9;50486:5;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50528:5:0;;50543:20;;;;;50528:49;;-1:-1:-1;;;50528:49:0;;-1:-1:-1;;;;;8070:32:1;;;50528:49:0;;;8052:51:1;8119:18;;;8112:34;;;50528:5:0;;;:14;;8025:18:1;;50528:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50604:20:0;;;;;;-1:-1:-1;;;;;50588:37:0;;;;;;;:15;:37;;;;;;;:44;;50628:4;-1:-1:-1;;50588:44:0;;;;;;;;50669:20;;50641:22;:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;50641:49:0;;;;;;;;50712:37;;10989:25:1;;;50725:10:0;;50712:37;;10962:18:1;50712:37:0;;;;;;;50784:11;50766:14;;:29;;;;;;;:::i;:::-;;;;;;;;50819:9;50804:11;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;49623:1212:0:o;46044:102::-;48349:5;;-1:-1:-1;;;;;48349:5:0;48335:10;:19;48327:28;;;;;;46118:5:::1;:20:::0;46044:102::o;47435:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47567:39::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47567:39:0;;-1:-1:-1;47567:39:0;:::o;53307:568::-;53383:25;53410:19;53431:20;53453:10;53513:23;53539:15;:27;53555:10;-1:-1:-1;;;;;53539:27:0;-1:-1:-1;;;;;53539:27:0;;;;;;;;;;;;53513:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53513:53:0;;;-1:-1:-1;;53513:53:0;;;;-1:-1:-1;;;;;53513:53:0;;;;;;;;;;;;;;;;;;;53797:15;;53814:17;;;;53833:20;;;;53855:13;;;;;53797:15;;53814:17;;-1:-1:-1;53833:20:0;;-1:-1:-1;53855:13:0;-1:-1:-1;53307:568:0;-1:-1:-1;;;53307:568:0:o;34674:290::-;34820:24;;:::i;:::-;34853:28;;:::i;:::-;34895:63;:3;34910:6;34918:12;34932:25;34895:14;:63::i;:::-;34888:70;34674:290;-1:-1:-1;;;;;34674:290:0:o;31163:182::-;31278:8;;;;:26;;31300:3;31278:21;:26::i;:::-;31311:8;;;;:28;;31333:5;31311:21;:28::i;:::-;31163:182;;;:::o;36556:775::-;36738:14;;36696:17;;36776:9;36738:14;36784:1;36776:9;:::i;:::-;36759:14;:26;37125:6;;37162:22;;;;;37235:7;;;;:11;36822:431;;36792:27;;-1:-1:-1;;;36853:48:0;36822:431;;36792:27;;;;37125:6;37148:4;;37162:22;37193:5;;33637:1;;36822:431;;;:::i;:::-;;;;-1:-1:-1;;36822:431:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36822:431:0;-1:-1:-1;;;;;;36822:431:0;;;;;;;;;;;-1:-1:-1;37267:58:0;37279:13;37294:5;37301:7;36822:431;37267:11;:58::i;:::-;37260:65;36556:775;-1:-1:-1;;;;;;36556:775:0:o;30169:362::-;30316:24;;:::i;:::-;30349:49;30370:4;:8;;;29522:3;30349:20;:49::i;:::-;-1:-1:-1;;30405:15:0;;;-1:-1:-1;;;;;30427:35:0;:20;;;:35;-1:-1:-1;;;;;;30469:38:0;:23;;;:38;30405:15;30169:362::o;28616:207::-;28715:71;28734:3;26156:1;28771:5;28765:19;28715:18;:71::i;:::-;28793:24;:3;28810:5;28793:10;:24::i;39570:440::-;39765:29;;-1:-1:-1;;39782:4:0;5059:2:1;5055:15;5051:53;39765:29:0;;;5039:66:1;5121:12;;;5114:28;;;39717:17:0;;5158:12:1;;39765:29:0;;;;;;-1:-1:-1;;39765:29:0;;;;;;39755:40;;39765:29;39755:40;;;;39802:28;;;;:17;:28;;;;;;:44;;-1:-1:-1;;;;;;39802:44:0;-1:-1:-1;;;;;39802:44:0;;;;;39755:40;;-1:-1:-1;39755:40:0;;39858:29;;39802:28;39858:29;39902:6;;:62;;-1:-1:-1;;;39902:62:0;;-1:-1:-1;;;;;39902:6:0;;;;:22;;:62;;39925:13;;39940:7;;39949:14;;39902:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39894:110;;;;-1:-1:-1;;;39894:110:0;;13037:2:1;39894:110:0;;;13019:21:1;13076:2;13056:18;;;13049:30;13115:34;13095:18;;;13088:62;-1:-1:-1;;;13166:18:1;;;13159:33;13209:19;;39894:110:0;12835:399:1;16398:412:0;-1:-1:-1;;;;;;;;;;;;;;;;;16498:13:0;16509:2;16498:8;:13;:::i;:::-;:18;16494:73;;16545:13;16556:2;16545:8;:13;:::i;:::-;16539:20;;:2;:20;:::i;:::-;16527:32;;;;:::i;:::-;;;16494:73;-1:-1:-1;16616:12:0;;;;:23;;;16681:4;16675:11;;16694:16;;;-1:-1:-1;16718:14:0;;16761:18;;16753:27;;;16740:41;;16616:3;16398:412;;;;;:::o;26464:641::-;26586:2;26577:5;:11;;;26574:526;;26599:44;:3;26621:20;26631:1;26622:10;;;26621:20;;;26599:15;:44::i;:::-;;31163:182;;;:::o;26574:526::-;26670:4;26661:5;:13;;;26657:443;;26685:41;:3;26722:2;26708:10;26717:1;26708:10;;;;26707:17;26685:15;:41::i;:::-;-1:-1:-1;26735:23:0;:3;:23;;;26756:1;26735:13;:23::i;26657:443::-;26785:6;26776:5;:15;;;26772:328;;26802:41;:3;26839:2;26825:10;26834:1;26825:10;;;;26824:17;26802:15;:41::i;:::-;-1:-1:-1;26852:23:0;:3;:23;;;26873:1;26852:13;:23::i;26772:328::-;26902:10;26893:5;:19;;;26889:211;;26923:41;:3;26960:2;26946:10;26955:1;26946:10;;;;26945:17;26923:15;:41::i;:::-;-1:-1:-1;26973:23:0;:3;:23;;;26994:1;26973:13;:23::i;26889:211::-;27019:41;:3;27056:2;27042:10;27051:1;27042:10;;;;27041:17;27019:15;:41::i;:::-;-1:-1:-1;27069:23:0;:3;:23;;;27090:1;27069:13;:23::i;20225:157::-;-1:-1:-1;;;;;;;;;;;;;;;;;20331:45:0;20337:3;20342;:7;;;:14;20358:4;20364;:11;20331:5;:45::i;:::-;20324:52;20225:157;-1:-1:-1;;;20225:157:0:o;21617:147::-;-1:-1:-1;;;;;;;;;;;;;;;;;21721:37:0;21732:3;21737;:7;;;:14;21753:4;21721:10;:37::i;25592:183::-;-1:-1:-1;;;;;;;;;;;;;;;;;25729:40:0;25738:3;25743;:7;;;:14;25759:4;25765:3;25729:8;:40::i;18205:1258::-;-1:-1:-1;;;;;;;;;;;;;;;;;18369:4:0;:11;18362:3;:18;;18354:27;;;;;;18406:12;;;;18394:9;18400:3;18394;:9;:::i;:::-;:24;18390:92;;;18429:45;18436:3;18441:28;18445:3;:12;;;18465:3;18459;:9;;;;:::i;:::-;18441:3;:28::i;:::-;:32;;18472:1;18441:32;:::i;:::-;18429:6;:45::i;:::-;18490:12;18509:11;18609:3;18603:10;18682:6;18676:13;18800:3;18795:2;18787:6;18783:15;18779:25;18771:33;;18886:6;18880:3;18875;18871:13;18868:25;18865:78;;;18929:3;18924;18920:13;18912:6;18905:29;18865:78;-1:-1:-1;;;18968:2:0;18958:13;;19033:135;19047:2;19040:3;:9;19033:135;;19104:10;;19091:24;;19132:10;19140:2;19098:4;19132:10;:::i;:::-;;-1:-1:-1;19151:9:0;19158:2;19151:9;;:::i;:::-;;-1:-1:-1;19051:9:0;19058:2;19051:9;;:::i;:::-;;;19033:135;;;19308:10;19360:11;;-1:-1:-1;;19246:2:0;:8;;;19240:3;:15;19239:21;19356:22;;;19320:9;;19304:26;;;;19401:21;19388:35;;-1:-1:-1;19454:3:0;18205:1258;;;;;;:::o;20693:662::-;-1:-1:-1;;;;;;;;;;;;;;;;;20833:3:0;:12;;;20826:3;:19;20822:71;;20856:29;20863:3;20868;:12;;;20883:1;20868:16;;;;:::i;20856:29::-;20983:3;20977:10;21056:6;21050:13;21170:2;21164:3;21156:6;21152:16;21148:25;21195:4;21189;21181:19;;21268:6;21263:3;21260:15;21257:69;;;21314:1;21306:6;21302:14;21294:6;21287:30;21257:69;-1:-1:-1;21346:3:0;;20693:662;-1:-1:-1;;;;20693:662:0:o;24640:698::-;-1:-1:-1;;;;;;;;;;;;;;;;;24802:12:0;;;;24790:9;24796:3;24790;:9;:::i;:::-;:24;24786:75;;;24825:28;24832:3;24838:9;24844:3;24838;:9;:::i;24825:28::-;24869:12;24897:1;24885:8;24890:3;24885;:8;:::i;:::-;24884:14;;;;:::i;:::-;24869:29;;24987:3;24981:10;25104:3;25098;25090:6;25086:16;25082:26;25161:4;25153;25149:9;25142:4;25136:11;25132:27;25129:37;25123:4;25116:51;;25251:6;25245:13;25239:3;25234;25230:13;25227:32;25224:85;;;25295:3;25290;25286:13;25278:6;25271:29;25224:85;-1:-1:-1;25329:3:0;;24640:698;-1:-1:-1;;;;;24640:698:0:o;17392:129::-;17449:7;17473:1;17469;:5;17465:36;;;-1:-1:-1;17492:1:0;17485:8;;17465:36;-1:-1:-1;17514:1:0;17392:129;-1:-1:-1;17392:129:0:o;17226:160::-;17321:7;;17335:19;17321:3;17345:8;17335:4;:19::i;:::-;;17361;17368:3;17373:6;17361;:19::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:719:1;57:5;110:3;103:4;95:6;91:17;87:27;77:55;;128:1;125;118:12;77:55;164:6;151:20;190:18;227:2;223;220:10;217:36;;;233:18;;:::i;:::-;308:2;302:9;276:2;362:13;;-1:-1:-1;;358:22:1;;;382:2;354:31;350:40;338:53;;;406:18;;;426:22;;;403:46;400:72;;;452:18;;:::i;:::-;492:10;488:2;481:22;527:2;519:6;512:18;573:3;566:4;561:2;553:6;549:15;545:26;542:35;539:55;;;590:1;587;580:12;539:55;654:2;647:4;639:6;635:17;628:4;620:6;616:17;603:54;701:1;694:4;689:2;681:6;677:15;673:26;666:37;721:6;712:15;;;;;;14:719;;;;:::o;738:247::-;797:6;850:2;838:9;829:7;825:23;821:32;818:52;;;866:1;863;856:12;818:52;905:9;892:23;924:31;949:5;924:31;:::i;1250:277::-;1317:6;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1418:9;1412:16;1471:5;1464:13;1457:21;1450:5;1447:32;1437:60;;1493:1;1490;1483:12;1532:180;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:52;;;1660:1;1657;1650:12;1612:52;-1:-1:-1;1683:23:1;;1532:180;-1:-1:-1;1532:180:1:o;1717:248::-;1785:6;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:52;;;1862:1;1859;1852:12;1814:52;-1:-1:-1;;1885:23:1;;;1955:2;1940:18;;;1927:32;;-1:-1:-1;1717:248:1:o;1970:747::-;2076:6;2084;2092;2100;2153:3;2141:9;2132:7;2128:23;2124:33;2121:53;;;2170:1;2167;2160:12;2121:53;2210:9;2197:23;2239:18;2280:2;2272:6;2269:14;2266:34;;;2296:1;2293;2286:12;2266:34;2319:50;2361:7;2352:6;2341:9;2337:22;2319:50;:::i;:::-;2309:60;;2422:2;2411:9;2407:18;2394:32;2378:48;;2451:2;2441:8;2438:16;2435:36;;;2467:1;2464;2457:12;2435:36;;2490:52;2534:7;2523:8;2512:9;2508:24;2490:52;:::i;:::-;2480:62;;;2592:2;2581:9;2577:18;2564:32;2605:31;2630:5;2605:31;:::i;:::-;1970:747;;;;-1:-1:-1;2655:5:1;;2707:2;2692:18;2679:32;;-1:-1:-1;;1970:747:1:o;2722:944::-;2848:6;2856;2864;2872;2925:3;2913:9;2904:7;2900:23;2896:33;2893:53;;;2942:1;2939;2932:12;2893:53;2982:9;2969:23;3011:18;3052:2;3044:6;3041:14;3038:34;;;3068:1;3065;3058:12;3038:34;3091:50;3133:7;3124:6;3113:9;3109:22;3091:50;:::i;:::-;3081:60;;3194:2;3183:9;3179:18;3166:32;3150:48;;3223:2;3213:8;3210:16;3207:36;;;3239:1;3236;3229:12;3207:36;3262:52;3306:7;3295:8;3284:9;3280:24;3262:52;:::i;:::-;3252:62;;3367:2;3356:9;3352:18;3339:32;3323:48;;3396:2;3386:8;3383:16;3380:36;;;3412:1;3409;3402:12;3380:36;3435:52;3479:7;3468:8;3457:9;3453:24;3435:52;:::i;:::-;3425:62;;3540:2;3529:9;3525:18;3512:32;3496:48;;3569:2;3559:8;3556:16;3553:36;;;3585:1;3582;3575:12;3553:36;;3608:52;3652:7;3641:8;3630:9;3626:24;3608:52;:::i;:::-;3598:62;;;2722:944;;;;;;;:::o;3856:257::-;3897:3;3935:5;3929:12;3962:6;3957:3;3950:19;3978:63;4034:6;4027:4;4022:3;4018:14;4011:4;4004:5;4000:16;3978:63;:::i;:::-;4095:2;4074:15;-1:-1:-1;;4070:29:1;4061:39;;;;4102:4;4057:50;;3856:257;-1:-1:-1;;3856:257:1:o;4118:735::-;4168:3;4209:5;4203:12;4238:36;4264:9;4238:36;:::i;:::-;4283:19;;;4321:4;4344:1;4361:18;;;4388:109;;;;4511:1;4506:341;;;;4354:493;;4388:109;-1:-1:-1;;4430:24:1;;4416:12;;;4409:46;4484:2;4475:12;;;-1:-1:-1;4388:109:1;;4506:341;4537:5;4534:1;4527:16;4584:2;4581:1;4571:16;4609:1;4623:174;4637:6;4634:1;4631:13;4623:174;;;4724:14;;4706:11;;;4702:20;;4695:44;4767:16;;;;4652:10;;4623:174;;;4821:11;;4817:20;;;-1:-1:-1;;4354:493:1;;;;;;4118:735;;;;:::o;5181:276::-;5312:3;5350:6;5344:13;5366:53;5412:6;5407:3;5400:4;5392:6;5388:17;5366:53;:::i;:::-;5435:16;;;;;5181:276;-1:-1:-1;;5181:276:1:o;5462:1161::-;6040:3;6078:6;6072:13;6094:53;6140:6;6135:3;6128:4;6120:6;6116:17;6094:53;:::i;:::-;6210:13;;6169:16;;;;6232:57;6210:13;6169:16;6266:4;6254:17;;6232:57;:::i;:::-;6356:13;;6311:20;;;6378:57;6356:13;6311:20;6412:4;6400:17;;6378:57;:::i;:::-;6502:13;;6457:20;;;6524:57;6502:13;6457:20;6558:4;6546:17;;6524:57;:::i;:::-;6597:20;;5462:1161;-1:-1:-1;;;;;;5462:1161:1:o;6628:813::-;6756:3;6785:1;6818:6;6812:13;6848:36;6874:9;6848:36;:::i;:::-;6903:1;6920:18;;;6947:104;;;;7065:1;7060:356;;;;6913:503;;6947:104;-1:-1:-1;;6980:24:1;;6968:37;;7025:16;;;;-1:-1:-1;6947:104:1;;7060:356;7091:6;7088:1;7081:17;7121:4;7166:2;7163:1;7153:16;7191:1;7205:165;7219:6;7216:1;7213:13;7205:165;;;7297:14;;7284:11;;;7277:35;7340:16;;;;7234:10;;7205:165;;;7209:3;;;7399:6;7394:3;7390:16;7383:23;;6913:503;-1:-1:-1;7432:3:1;;6628:813;-1:-1:-1;;;;;;6628:813:1:o;8157:821::-;-1:-1:-1;;;;;8558:15:1;;;8540:34;;8605:2;8590:18;;8583:34;;;8648:2;8633:18;;8626:34;;;8696:15;;8691:2;8676:18;;8669:43;-1:-1:-1;;;;;;8749:33:1;;8743:3;8728:19;;8721:62;8520:3;8799:19;;8792:35;;;8858:3;8843:19;;8836:35;;;8490:3;8765;8887:19;;8880:31;;;8461:4;;8928:44;8953:18;;;8945:6;8928:44;:::i;:::-;8920:52;8157:821;-1:-1:-1;;;;;;;;;;;8157:821:1:o;8983:385::-;9215:1;9211;9206:3;9202:11;9198:19;9190:6;9186:32;9175:9;9168:51;9255:6;9250:2;9239:9;9235:18;9228:34;9298:2;9293;9282:9;9278:18;9271:30;9149:4;9318:44;9358:2;9347:9;9343:18;9335:6;9318:44;:::i;9373:658::-;9544:2;9596:21;;;9666:13;;9569:18;;;9688:22;;;9515:4;;9544:2;9767:15;;;;9741:2;9726:18;;;9515:4;9810:195;9824:6;9821:1;9818:13;9810:195;;;9889:13;;-1:-1:-1;;;;;9885:39:1;9873:52;;9980:15;;;;9945:12;;;;9921:1;9839:9;9810:195;;;-1:-1:-1;10022:3:1;;9373:658;-1:-1:-1;;;;;;9373:658:1:o;10036:802::-;10198:4;10227:2;10267;10256:9;10252:18;10297:2;10286:9;10279:21;10320:6;10355;10349:13;10386:6;10378;10371:22;10424:2;10413:9;10409:18;10402:25;;10486:2;10476:6;10473:1;10469:14;10458:9;10454:30;10450:39;10436:53;;10524:2;10516:6;10512:15;10545:1;10555:254;10569:6;10566:1;10563:13;10555:254;;;10662:2;10658:7;10646:9;10638:6;10634:22;10630:36;10625:3;10618:49;10690:39;10722:6;10713;10707:13;10690:39;:::i;:::-;10680:49;-1:-1:-1;10787:12:1;;;;10752:15;;;;10591:1;10584:9;10555:254;;;-1:-1:-1;10826:6:1;;10036:802;-1:-1:-1;;;;;;;10036:802:1:o;11257:219::-;11406:2;11395:9;11388:21;11369:4;11426:44;11466:2;11455:9;11451:18;11443:6;11426:44;:::i;11481:551::-;11734:3;11723:9;11716:22;11697:4;11761:45;11801:3;11790:9;11786:19;11778:6;11761:45;:::i;:::-;11854:9;11846:6;11842:22;11837:2;11826:9;11822:18;11815:50;11882:32;11907:6;11899;11882:32;:::i;:::-;-1:-1:-1;;;;;11950:32:1;;;;11945:2;11930:18;;11923:60;-1:-1:-1;;12014:2:1;11999:18;11992:34;11874:40;11481:551;-1:-1:-1;;11481:551:1:o;12037:225::-;12183:2;12172:9;12165:21;12146:4;12203:53;12252:2;12241:9;12237:18;12229:6;12203:53;:::i;12267:563::-;12514:3;12503:9;12496:22;12477:4;12541:54;12590:3;12579:9;12575:19;12567:6;12541:54;:::i;:::-;12643:9;12635:6;12631:22;12626:2;12615:9;12611:18;12604:50;12671:41;12705:6;12697;12671:41;:::i;15647:128::-;15687:3;15718:1;15714:6;15711:1;15708:13;15705:39;;;15724:18;;:::i;:::-;-1:-1:-1;15760:9:1;;15647:128::o;15780:422::-;15869:1;15912:5;15869:1;15926:270;15947:7;15937:8;15934:21;15926:270;;;16006:4;16002:1;15998:6;15994:17;15988:4;15985:27;15982:53;;;16015:18;;:::i;:::-;16065:7;16055:8;16051:22;16048:55;;;16085:16;;;;16048:55;16164:22;;;;16124:15;;;;15926:270;;;15930:3;15780:422;;;;;:::o;16207:131::-;16267:5;16296:36;16323:8;16317:4;16392:5;16422:8;16412:80;;-1:-1:-1;16463:1:1;16477:5;;16412:80;16511:4;16501:76;;-1:-1:-1;16548:1:1;16562:5;;16501:76;16593:4;16611:1;16606:59;;;;16679:1;16674:130;;;;16586:218;;16606:59;16636:1;16627:10;;16650:5;;;16674:130;16711:3;16701:8;16698:17;16695:43;;;16718:18;;:::i;:::-;-1:-1:-1;;16774:1:1;16760:16;;16789:5;;16586:218;;16888:2;16878:8;16875:16;16869:3;16863:4;16860:13;16856:36;16850:2;16840:8;16837:16;16832:2;16826:4;16823:12;16819:35;16816:77;16813:159;;;-1:-1:-1;16925:19:1;;;16957:5;;16813:159;17004:34;17029:8;17023:4;17004:34;:::i;:::-;17074:6;17070:1;17066:6;17062:19;17053:7;17050:32;17047:58;;;17085:18;;:::i;:::-;17123:20;;16343:806;-1:-1:-1;;;16343:806:1:o;17154:168::-;17194:7;17260:1;17256;17252:6;17248:14;17245:1;17242:21;17237:1;17230:9;17223:17;17219:45;17216:71;;;17267:18;;:::i;:::-;-1:-1:-1;17307:9:1;;17154:168::o;17327:125::-;17367:4;17395:1;17392;17389:8;17386:34;;;17400:18;;:::i;:::-;-1:-1:-1;17437:9:1;;17327:125::o;17457:258::-;17529:1;17539:113;17553:6;17550:1;17547:13;17539:113;;;17629:11;;;17623:18;17610:11;;;17603:39;17575:2;17568:10;17539:113;;;17670:6;17667:1;17664:13;17661:48;;;-1:-1:-1;;17705:1:1;17687:16;;17680:27;17457:258::o;17720:380::-;17799:1;17795:12;;;;17842;;;17863:61;;17917:4;17909:6;17905:17;17895:27;;17863:61;17970:2;17962:6;17959:14;17939:18;17936:38;17933:161;;;18016:10;18011:3;18007:20;18004:1;17997:31;18051:4;18048:1;18041:15;18079:4;18076:1;18069:15;18105:209;18137:1;18163;18153:132;;18207:10;18202:3;18198:20;18195:1;18188:31;18242:4;18239:1;18232:15;18270:4;18267:1;18260:15;18153:132;-1:-1:-1;18299:9:1;;18105:209::o;18319:127::-;18380:10;18375:3;18371:20;18368:1;18361:31;18411:4;18408:1;18401:15;18435:4;18432:1;18425:15;18451:127;18512:10;18507:3;18503:20;18500:1;18493:31;18543:4;18540:1;18533:15;18567:4;18564:1;18557:15;18583:131;-1:-1:-1;;;;;18658:31:1;;18648:42;;18638:70;;18704:1;18701;18694:12;18638:70;18583:131;:::o

Swarm Source

ipfs://625466ae2bc915db630edbaa015a9847f0a01b5f319c32ee01ebcb4e655e2e14
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.