ETH Price: $2,287.33 (+8.40%)

Contract

0xcafea41C0fa5Fb882f2C965d00a4b8bAfF2F1231
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Expire Cover165688932023-02-06 9:37:111134 days ago1675676231IN
Nexus Mutual: Quotation 2
0 ETH0.0019750618.11737756
Expire Cover165667542023-02-06 2:27:111134 days ago1675650431IN
Nexus Mutual: Quotation 2
0 ETH0.0019922418.27498796
Expire Cover165655612023-02-05 22:27:111134 days ago1675636031IN
Nexus Mutual: Quotation 2
0 ETH0.0022413720.56020316
Expire Cover165642202023-02-05 17:57:351134 days ago1675619855IN
Nexus Mutual: Quotation 2
0 ETH0.00309928.42730787
Expire Cover165642192023-02-05 17:57:231134 days ago1675619843IN
Nexus Mutual: Quotation 2
0 ETH0.0027791125.49298631
Expire Cover165630752023-02-05 14:07:111134 days ago1675606031IN
Nexus Mutual: Quotation 2
0 ETH0.0025574323.4594483
Expire Cover165605392023-02-05 5:37:111135 days ago1675575431IN
Nexus Mutual: Quotation 2
0 ETH0.0019138617.55600162
Buy Cover With M...165598842023-02-05 3:25:591135 days ago1675567559IN
Nexus Mutual: Quotation 2
0.13453798 ETH0.0100642818
Buy Cover With M...165589552023-02-05 0:19:471135 days ago1675556387IN
Nexus Mutual: Quotation 2
0 ETH0.0097295618.25619907
Expire Cover165577492023-02-04 20:17:111135 days ago1675541831IN
Nexus Mutual: Quotation 2
0 ETH0.0029193926.77976875
Expire Cover165561542023-02-04 14:57:111135 days ago1675522631IN
Nexus Mutual: Quotation 2
0 ETH0.0023834921.8639044
Expire Cover165552122023-02-04 11:46:591136 days ago1675511219IN
Nexus Mutual: Quotation 2
0 ETH0.0027807125.50760863
Expire Cover165551622023-02-04 11:36:591136 days ago1675510619IN
Nexus Mutual: Quotation 2
0 ETH0.0019776518.14117034
Expire Cover165535772023-02-04 6:17:111136 days ago1675491431IN
Nexus Mutual: Quotation 2
0 ETH0.0023311121.38341667
Expire Cover165530332023-02-04 4:27:111136 days ago1675484831IN
Nexus Mutual: Quotation 2
0 ETH0.0020904419.17578532
Expire Cover165528842023-02-04 3:57:111136 days ago1675483031IN
Nexus Mutual: Quotation 2
0 ETH0.0025950623.80462812
Expire Cover165522352023-02-04 1:47:111136 days ago1675475231IN
Nexus Mutual: Quotation 2
0 ETH0.0023344921.41441466
Buy Cover With M...165509592023-02-03 21:31:231136 days ago1675459883IN
Nexus Mutual: Quotation 2
0 ETH0.0248360746.58364485
Expire Cover165503902023-02-03 19:37:111136 days ago1675453031IN
Nexus Mutual: Quotation 2
0 ETH0.0042769439.2325832
Buy Cover With M...165496592023-02-03 17:10:111136 days ago1675444211IN
Nexus Mutual: Quotation 2
0 ETH0.016650132.44350209
Buy Cover With M...165495192023-02-03 16:41:591136 days ago1675442519IN
Nexus Mutual: Quotation 2
0 ETH0.0207343538.88765293
Expire Cover165490472023-02-03 15:07:231136 days ago1675436843IN
Nexus Mutual: Quotation 2
0 ETH0.0040013136.70422139
Expire Cover165490462023-02-03 15:07:111136 days ago1675436831IN
Nexus Mutual: Quotation 2
0 ETH0.0040661437.29892772
Expire Cover165485462023-02-03 13:26:591136 days ago1675430819IN
Nexus Mutual: Quotation 2
0 ETH0.0027547925.26989313
Expire Cover165483972023-02-03 12:56:591136 days ago1675429019IN
Nexus Mutual: Quotation 2
0 ETH0.0024696522.65430002
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer165598842023-02-05 3:25:591135 days ago1675567559
Nexus Mutual: Quotation 2
0.13453798 ETH
Transfer164653602023-01-22 22:35:231148 days ago1674426923
Nexus Mutual: Quotation 2
0.16016427 ETH
Transfer164152942023-01-15 22:51:231155 days ago1673823083
Nexus Mutual: Quotation 2
0.25199178 ETH
Transfer163678242023-01-09 7:43:351162 days ago1673250215
Nexus Mutual: Quotation 2
0.98732375 ETH
Transfer163305612023-01-04 2:53:111167 days ago1672800791
Nexus Mutual: Quotation 2
0.80544832 ETH
Transfer163305482023-01-04 2:50:351167 days ago1672800635
Nexus Mutual: Quotation 2
1.53295003 ETH
Transfer162415632022-12-22 16:53:231179 days ago1671728003
Nexus Mutual: Quotation 2
0.16016427 ETH
Transfer162138552022-12-18 20:05:231183 days ago1671393923
Nexus Mutual: Quotation 2
0.0640657 ETH
Transfer161892652022-12-15 9:41:231187 days ago1671097283
Nexus Mutual: Quotation 2
0.00640657 ETH
Transfer161700912022-12-12 17:24:111189 days ago1670865851
Nexus Mutual: Quotation 2
0.13667351 ETH
Transfer159763532022-11-15 15:32:471216 days ago1668526367
Nexus Mutual: Quotation 2
0.02135523 ETH
Transfer159389472022-11-10 10:13:111222 days ago1668075191
Nexus Mutual: Quotation 2
0.00854209 ETH
Transfer159080912022-11-06 2:48:231226 days ago1667702903
Nexus Mutual: Quotation 2
0.19219712 ETH
Transfer158798282022-11-02 4:03:591230 days ago1667361839
Nexus Mutual: Quotation 2
0.16016427 ETH
Transfer157307802022-10-12 8:16:351251 days ago1665562595
Nexus Mutual: Quotation 2
0.00213552 ETH
Transfer156188592022-09-26 16:53:111266 days ago1664211191
Nexus Mutual: Quotation 2
3.20328542 ETH
Transfer156188562022-09-26 16:52:351266 days ago1664211155
Nexus Mutual: Quotation 2
3.20328542 ETH
Transfer155396852022-09-15 14:27:231277 days ago1663252043
Nexus Mutual: Quotation 2
6.08624229 ETH
Transfer155193752022-09-12 6:19:471281 days ago1662963587
Nexus Mutual: Quotation 2
0.20501026 ETH
Transfer153586552022-08-17 12:14:161307 days ago1660738456
Nexus Mutual: Quotation 2
0.00213552 ETH
Transfer153463912022-08-15 13:54:481308 days ago1660571688
Nexus Mutual: Quotation 2
0.64065708 ETH
Transfer153461752022-08-15 13:05:101308 days ago1660568710
Nexus Mutual: Quotation 2
0.00213552 ETH
Transfer153213152022-08-11 14:49:521312 days ago1660229392
Nexus Mutual: Quotation 2
0.64065708 ETH
Transfer153212952022-08-11 14:45:401312 days ago1660229140
Nexus Mutual: Quotation 2
1.24928131 ETH
Transfer153212022022-08-11 14:23:261312 days ago1660227806
Nexus Mutual: Quotation 2
3.89733059 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
Quotation

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.5.0;

import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "../../abstract/MasterAware.sol";
import "../../interfaces/IClaimsReward.sol";
import "../../interfaces/IIncidents.sol";
import "../../interfaces/IPool.sol";
import "../../interfaces/IPooledStaking.sol";
import "../../interfaces/IQuotation.sol";
import "../../interfaces/IQuotationData.sol";
import "../../interfaces/ITokenController.sol";
import "../../interfaces/ITokenData.sol";

contract Quotation is IQuotation, MasterAware, ReentrancyGuard {
  using SafeMath for uint;

  IClaimsReward public cr;
  IPool public pool;
  IPooledStaking public pooledStaking;
  IQuotationData public qd;
  ITokenController public tc;
  ITokenData public td;
  IIncidents public incidents;
  mapping(uint => string) public coverMetadata;

  /**
   * @dev Iupgradable Interface to update dependent contract address
   */
  function changeDependentContractAddress() public onlyInternal {
    cr = IClaimsReward(master.getLatestAddress("CR"));
    pool = IPool(master.getLatestAddress("P1"));
    pooledStaking = IPooledStaking(master.getLatestAddress("PS"));
    qd = IQuotationData(master.getLatestAddress("QD"));
    tc = ITokenController(master.getLatestAddress("TC"));
    td = ITokenData(master.getLatestAddress("TD"));
    incidents = IIncidents(master.getLatestAddress("IC"));
  }

  // solhint-disable-next-line no-empty-blocks
  function sendEther() public payable {}

  /**
   * @dev Expires a cover after a set period of time and changes the status of the cover
   * @dev Reduces the total and contract sum assured
   * @param coverId Cover Id.
   */
  function expireCover(uint coverId) external {

    uint expirationDate = qd.getValidityOfCover(coverId);
    require(expirationDate < now, "Quotation: cover is not due to expire");

    uint coverStatus = qd.getCoverStatusNo(coverId);
    require(coverStatus != uint(IQuotationData.CoverStatus.CoverExpired), "Quotation: cover already expired");

    (/* claim count */, bool hasOpenClaim, /* accepted */) = tc.coverInfo(coverId);
    require(!hasOpenClaim, "Quotation: cover has an open claim");

    if (coverStatus != uint(IQuotationData.CoverStatus.ClaimAccepted)) {
      (,, address contractAddress, bytes4 currency, uint amount,) = qd.getCoverDetailsByCoverID1(coverId);
      qd.subFromTotalSumAssured(currency, amount);
      qd.subFromTotalSumAssuredSC(contractAddress, currency, amount);
    }

    qd.changeCoverStatusNo(coverId, uint8(IQuotationData.CoverStatus.CoverExpired));
  }

  function withdrawCoverNote(address coverOwner, uint[] calldata coverIds, uint[] calldata reasonIndexes) external {

    uint gracePeriod = tc.claimSubmissionGracePeriod();

    for (uint i = 0; i < coverIds.length; i++) {
      uint expirationDate = qd.getValidityOfCover(coverIds[i]);
      require(expirationDate.add(gracePeriod) < now, "Quotation: cannot withdraw before grace period expiration");
    }

    tc.withdrawCoverNote(coverOwner, coverIds, reasonIndexes);
  }

  function getWithdrawableCoverNoteCoverIds(
    address coverOwner
  ) public view returns (
    uint[] memory expiredCoverIds,
    bytes32[] memory lockReasons
  ) {

    uint[] memory coverIds = qd.getAllCoversOfUser(coverOwner);
    uint[] memory expiredIdsQueue = new uint[](coverIds.length);
    uint gracePeriod = tc.claimSubmissionGracePeriod();
    uint expiredQueueLength = 0;

    for (uint i = 0; i < coverIds.length; i++) {

      uint coverExpirationDate = qd.getValidityOfCover(coverIds[i]);
      uint gracePeriodExpirationDate = coverExpirationDate.add(gracePeriod);
      (/* claimCount */, bool hasOpenClaim, /* hasAcceptedClaim */) = tc.coverInfo(coverIds[i]);

      if (!hasOpenClaim && gracePeriodExpirationDate < now) {
        expiredIdsQueue[expiredQueueLength] = coverIds[i];
        expiredQueueLength++;
      }
    }

    expiredCoverIds = new uint[](expiredQueueLength);
    lockReasons = new bytes32[](expiredQueueLength);

    for (uint i = 0; i < expiredQueueLength; i++) {
      expiredCoverIds[i] = expiredIdsQueue[i];
      lockReasons[i] = keccak256(abi.encodePacked("CN", coverOwner, expiredIdsQueue[i]));
    }
  }

  function getWithdrawableCoverNotesAmount(address coverOwner) external view returns (uint) {

    uint withdrawableAmount;
    bytes32[] memory lockReasons;
    (/*expiredCoverIds*/, lockReasons) = getWithdrawableCoverNoteCoverIds(coverOwner);

    for (uint i = 0; i < lockReasons.length; i++) {
      uint coverNoteAmount = tc.tokensLocked(coverOwner, lockReasons[i]);
      withdrawableAmount = withdrawableAmount.add(coverNoteAmount);
    }

    return withdrawableAmount;
  }

  /**
   * @dev Makes Cover funded via NXM tokens.
   * @param smartCAdd Smart Contract Address
   */
  function makeCoverUsingNXMTokens(
    uint[] calldata coverDetails,
    uint16 coverPeriod,
    bytes4 coverCurr,
    address smartCAdd,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) external onlyMember whenNotPaused {
    tc.burnFrom(msg.sender, coverDetails[2]); // needs allowance
    _verifyCoverDetails(
      msg.sender,
      smartCAdd,
      coverCurr,
      coverDetails,
      coverPeriod,
      _v,
      _r,
      _s,
      true
    );
  }

  /// Creates cover with offchain metadata that can be used as a commitment when claiming.
  function buyCoverWithMetadata(
    uint[] calldata coverDetails,
    uint16 coverPeriod,
    bytes4 coverCurr,
    address smartCAdd,
    uint8 _v,
    bytes32 _r,
    bytes32 _s,
    bool payWithNXM,
    string calldata ipfsMetadata
  ) external payable onlyMember whenNotPaused {

    if (payWithNXM) {
      tc.burnFrom(msg.sender, coverDetails[2]);
    } else if (coverCurr == "ETH") {
      require(msg.value == coverDetails[1], "Quotation: ETH amount does not match premium");
      // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
      (bool ok, /* data */) = address(pool).call.value(msg.value)("");
      require(ok, "Quotation: Transfer to Pool failed");
    }

    _verifyCoverDetails(
      msg.sender,
      smartCAdd,
      coverCurr,
      coverDetails,
      coverPeriod,
      _v,
      _r,
      _s,
      payWithNXM
    );

    uint coverId = qd.getCoverLength().sub(1);
    coverMetadata[coverId] = ipfsMetadata;
  }

  /**
   * @dev Verifies cover details signed off chain.
   * @param from address of funder.
   * @param scAddress Smart Contract Address
   */
  function verifyCoverDetails(
    address payable from,
    address scAddress,
    bytes4 coverCurr,
    uint[] memory coverDetails,
    uint16 coverPeriod,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) public onlyInternal {
    _verifyCoverDetails(
      from,
      scAddress,
      coverCurr,
      coverDetails,
      coverPeriod,
      _v,
      _r,
      _s,
      false
    );
  }

  /**
   * @dev Verifies signature.
   * @param coverDetails details related to cover.
   * @param coverPeriod validity of cover.
   * @param contractAddress smart contract address.
   * @param _v argument from vrs hash.
   * @param _r argument from vrs hash.
   * @param _s argument from vrs hash.
   */
  function verifySignature(
    uint[] memory coverDetails,
    uint16 coverPeriod,
    bytes4 currency,
    address contractAddress,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) public view returns (bool) {
    require(contractAddress != address(0));
    bytes32 hash = getOrderHash(coverDetails, coverPeriod, currency, contractAddress);
    return isValidSignature(hash, _v, _r, _s);
  }

  /**
   * @dev Gets order hash for given cover details.
   * @param coverDetails details realted to cover.
   * @param coverPeriod validity of cover.
   * @param contractAddress smart contract address.
   */
  function getOrderHash(
    uint[] memory coverDetails,
    uint16 coverPeriod,
    bytes4 currency,
    address contractAddress
  ) public view returns (bytes32) {
    return keccak256(
      abi.encodePacked(
        coverDetails[0],
        currency,
        coverPeriod,
        contractAddress,
        coverDetails[1],
        coverDetails[2],
        coverDetails[3],
        coverDetails[4],
        address(this)
      )
    );
  }

  /**
   * @dev Verifies signature.
   * @param hash order hash
   * @param v argument from vrs hash.
   * @param r argument from vrs hash.
   * @param s argument from vrs hash.
   */
  function isValidSignature(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public view returns (bool) {
    bytes memory prefix = "\x19Ethereum Signed Message:\n32";
    bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, hash));
    address a = ecrecover(prefixedHash, v, r, s);
    return (a == qd.getAuthQuoteEngine());
  }

  /**
   * @dev Creates cover of the quotation, changes the status of the quotation ,
   * updates the total sum assured and locks the tokens of the cover against a quote.
   * @param from Quote member Ethereum address.
   */
  function _makeCover(//solhint-disable-line
    address payable from,
    address contractAddress,
    bytes4 coverCurrency,
    uint[] memory coverDetails,
    uint16 coverPeriod
  ) internal {

    address underlyingToken = incidents.underlyingToken(contractAddress);

    if (underlyingToken != address(0)) {
      address coverAsset = cr.getCurrencyAssetAddress(coverCurrency);
      require(coverAsset == underlyingToken, "Quotation: Unsupported cover asset for this product");
    }

    uint cid = qd.getCoverLength();

    qd.addCover(
      coverPeriod,
      coverDetails[0],
      from,
      coverCurrency,
      contractAddress,
      coverDetails[1],
      coverDetails[2]
    );

    uint coverNoteAmount = coverDetails[2].mul(qd.tokensRetained()).div(100);

    uint gracePeriod = tc.claimSubmissionGracePeriod();
    uint claimSubmissionPeriod = uint(coverPeriod).mul(1 days).add(gracePeriod);
    bytes32 reason = keccak256(abi.encodePacked("CN", from, cid));

    // mint and lock cover note
    td.setDepositCNAmount(cid, coverNoteAmount);
    tc.mintCoverNote(from, reason, coverNoteAmount, claimSubmissionPeriod);

    qd.addInTotalSumAssured(coverCurrency, coverDetails[0]);
    qd.addInTotalSumAssuredSC(contractAddress, coverCurrency, coverDetails[0]);

    uint coverPremiumInNXM = coverDetails[2];
    uint stakersRewardPercentage = td.stakerCommissionPer();
    uint rewardValue = coverPremiumInNXM.mul(stakersRewardPercentage).div(100);
    pooledStaking.accumulateReward(contractAddress, rewardValue);
  }

  /**
   * @dev Makes a cover.
   * @param from address of funder.
   * @param scAddress Smart Contract Address
   */
  function _verifyCoverDetails(
    address payable from,
    address scAddress,
    bytes4 coverCurr,
    uint[] memory coverDetails,
    uint16 coverPeriod,
    uint8 _v,
    bytes32 _r,
    bytes32 _s,
    bool isNXM
  ) internal {

    require(coverDetails[3] > now, "Quotation: Quote has expired");
    require(coverPeriod >= 30 && coverPeriod <= 365, "Quotation: Cover period out of bounds");
    require(!qd.timestampRepeated(coverDetails[4]), "Quotation: Quote already used");
    qd.setTimestampRepeated(coverDetails[4]);

    address asset = cr.getCurrencyAssetAddress(coverCurr);
    if (coverCurr != "ETH" && !isNXM) {
      pool.transferAssetFrom(asset, from, coverDetails[1]);
    }

    require(verifySignature(coverDetails, coverPeriod, coverCurr, scAddress, _v, _r, _s), "Quotation: signature mismatch");
    _makeCover(from, scAddress, coverCurr, coverDetails, coverPeriod);
  }

  function createCover(
    address payable from,
    address scAddress,
    bytes4 currency,
    uint[] calldata coverDetails,
    uint16 coverPeriod,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) external onlyInternal {

    require(coverDetails[3] > now, "Quotation: Quote has expired");
    require(coverPeriod >= 30 && coverPeriod <= 365, "Quotation: Cover period out of bounds");
    require(!qd.timestampRepeated(coverDetails[4]), "Quotation: Quote already used");
    qd.setTimestampRepeated(coverDetails[4]);

    require(verifySignature(coverDetails, coverPeriod, currency, scAddress, _v, _r, _s), "Quotation: signature mismatch");
    _makeCover(from, scAddress, currency, coverDetails, coverPeriod);
  }

  // referenced in master, keeping for now
  // solhint-disable-next-line no-empty-blocks
  function transferAssetsToNewContract(address) external pure {}

}

pragma solidity ^0.5.0;

/**
 * @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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 15 : ReentrancyGuard.sol
pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.5.0;

import "../interfaces/INXMMaster.sol";

contract MasterAware {

  INXMMaster public master;

  modifier onlyMember {
    require(master.isMember(msg.sender), "Caller is not a member");
    _;
  }

  modifier onlyInternal {
    require(master.isInternal(msg.sender), "Caller is not an internal contract");
    _;
  }

  modifier onlyMaster {
    if (address(master) != address(0)) {
      require(address(master) == msg.sender, "Not master");
    }
    _;
  }

  modifier onlyGovernance {
    require(
      master.checkIsAuthToGoverned(msg.sender),
      "Caller is not authorized to govern"
    );
    _;
  }

  modifier whenPaused {
    require(master.isPause(), "System is not paused");
    _;
  }

  modifier whenNotPaused {
    require(!master.isPause(), "System is paused");
    _;
  }

  function changeDependentContractAddress() external;

  function changeMasterAddress(address masterAddress) public onlyMaster {
    master = INXMMaster(masterAddress);
  }
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IClaimsReward {

  /// @dev Decides the next course of action for a given claim.
  function changeClaimStatus(uint claimid) external;

  function getCurrencyAssetAddress(bytes4 currency) external view returns (address);

  function getRewardToBeGiven(
    uint check,
    uint voteid,
    uint flag
  )
  external
  view
  returns (
    uint tokenCalculated,
    bool lastClaimedCheck,
    uint tokens,
    uint perc
  );

  function upgrade(address _newAdd) external;

  function getRewardToBeDistributedByUser(address _add) external view returns (uint total);

  function getRewardAndClaimedStatus(uint check, uint claimId) external view returns (uint reward, bool claimed);

  function claimAllPendingReward(uint records) external;

  function getAllPendingRewardOfUser(address _add) external view returns (uint);

  function unlockCoverNote(uint coverId) external;
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IIncidents {

  function underlyingToken(address) external view returns (address);

  function coveredToken(address) external view returns (address);

  function claimPayout(uint) external view returns (uint);

  function incidentCount() external view returns (uint);

  function addIncident(
    address productId,
    uint incidentDate,
    uint priceBefore
  ) external;

  function redeemPayoutForMember(
    uint coverId,
    uint incidentId,
    uint coveredTokenAmount,
    address member
  ) external returns (uint claimId, uint payoutAmount, address payoutToken);

  function redeemPayout(
    uint coverId,
    uint incidentId,
    uint coveredTokenAmount
  ) external returns (uint claimId, uint payoutAmount, address payoutToken);

  function pushBurns(address productId, uint maxIterations) external;

  function withdrawAsset(address asset, address destination, uint amount) external;
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

import "./IPriceFeedOracle.sol";

interface IPool {
  function sellNXM(uint tokenAmount, uint minEthOut) external;

  function sellNXMTokens(uint tokenAmount) external returns (bool);

  function minPoolEth() external returns (uint);

  function transferAssetToSwapOperator(address asset, uint amount) external;

  function setAssetDataLastSwapTime(address asset, uint32 lastSwapTime) external;

  function getAssetDetails(address _asset) external view returns (
    uint112 min,
    uint112 max,
    uint32 lastAssetSwapTime,
    uint maxSlippageRatio
  );

  function sendClaimPayout (
    address asset,
    address payable payoutAddress,
    uint amount
  ) external returns (bool success);

  function transferAsset(
    address asset,
    address payable destination,
    uint amount
  ) external;

  function upgradeCapitalPool(address payable newPoolAddress) external;

  function priceFeedOracle() external view returns (IPriceFeedOracle);

  function getPoolValueInEth() external view returns (uint);


  function transferAssetFrom(address asset, address from, uint amount) external;

  function getEthForNXM(uint nxmAmount) external view returns (uint ethAmount);

  function calculateEthForNXM(
    uint nxmAmount,
    uint currentTotalAssetValue,
    uint mcrEth
  ) external pure returns (uint);

  function calculateMCRRatio(uint totalAssetValue, uint mcrEth) external pure returns (uint);

  function calculateTokenSpotPrice(uint totalAssetValue, uint mcrEth) external pure returns (uint tokenPrice);

  function getTokenPrice(address asset) external view returns (uint tokenPrice);

  function getMCRRatio() external view returns (uint);
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IPooledStaking {

  function accumulateReward(address contractAddress, uint amount) external;

  function pushBurn(address contractAddress, uint amount) external;

  function hasPendingActions() external view returns (bool);

  function processPendingActions(uint maxIterations) external returns (bool finished);

  function contractStake(address contractAddress) external view returns (uint);

  function stakerReward(address staker) external view returns (uint);

  function stakerDeposit(address staker) external view returns (uint);

  function stakerContractStake(address staker, address contractAddress) external view returns (uint);

  function withdraw(uint amount) external;

  function stakerMaxWithdrawable(address stakerAddress) external view returns (uint);

  function withdrawReward(address stakerAddress) external;
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IQuotation {
  function verifyCoverDetails(
    address payable from,
    address scAddress,
    bytes4 coverCurr,
    uint[] calldata coverDetails,
    uint16 coverPeriod,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) external;

  function createCover(
    address payable from,
    address scAddress,
    bytes4 currency,
    uint[] calldata coverDetails,
    uint16 coverPeriod,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) external;
}

File 11 of 15 : IQuotationData.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IQuotationData {

  function authQuoteEngine() external view returns (address);
  function stlp() external view returns (uint);
  function stl() external view returns (uint);
  function pm() external view returns (uint);
  function minDays() external view returns (uint);
  function tokensRetained() external view returns (uint);
  function kycAuthAddress() external view returns (address);

  function refundEligible(address) external view returns (bool);
  function holdedCoverIDStatus(uint) external view returns (uint);
  function timestampRepeated(uint) external view returns (bool);

  enum HCIDStatus {NA, kycPending, kycPass, kycFailedOrRefunded, kycPassNoCover}
  enum CoverStatus {Active, ClaimAccepted, ClaimDenied, CoverExpired, ClaimSubmitted, Requested}

  function addInTotalSumAssuredSC(address _add, bytes4 _curr, uint _amount) external;

  function subFromTotalSumAssuredSC(address _add, bytes4 _curr, uint _amount) external;

  function subFromTotalSumAssured(bytes4 _curr, uint _amount) external;

  function addInTotalSumAssured(bytes4 _curr, uint _amount) external;

  function setTimestampRepeated(uint _timestamp) external;

  /// @dev Creates a blank new cover.
  function addCover(
    uint16 _coverPeriod,
    uint _sumAssured,
    address payable _userAddress,
    bytes4 _currencyCode,
    address _scAddress,
    uint premium,
    uint premiumNXM
  ) external;


  function addHoldCover(
    address payable from,
    address scAddress,
    bytes4 coverCurr,
    uint[] calldata coverDetails,
    uint16 coverPeriod
  ) external;

  function setRefundEligible(address _add, bool status) external;

  function setHoldedCoverIDStatus(uint holdedCoverID, uint status) external;

  function setKycAuthAddress(address _add) external;

  function changeAuthQuoteEngine(address _add) external;

  function getUintParameters(bytes8 code) external view returns (bytes8 codeVal, uint val);

  function getProductDetails()
  external
  view
  returns (
    uint _minDays,
    uint _pm,
    uint _stl,
    uint _stlp
  );

  function getCoverLength() external view returns (uint len);

  function getAuthQuoteEngine() external view returns (address _add);

  function getTotalSumAssured(bytes4 _curr) external view returns (uint amount);

  function getAllCoversOfUser(address _add) external view returns (uint[] memory allCover);

  function getUserCoverLength(address _add) external view returns (uint len);

  function getCoverStatusNo(uint _cid) external view returns (uint8);

  function getCoverPeriod(uint _cid) external view returns (uint32 cp);

  function getCoverSumAssured(uint _cid) external view returns (uint sa);

  function getCurrencyOfCover(uint _cid) external view returns (bytes4 curr);

  function getValidityOfCover(uint _cid) external view returns (uint date);

  function getscAddressOfCover(uint _cid) external view returns (uint, address);

  function getCoverMemberAddress(uint _cid) external view returns (address payable _add);

  function getCoverPremiumNXM(uint _cid) external view returns (uint _premiumNXM);

  function getCoverDetailsByCoverID1(
    uint _cid
  )
  external
  view
  returns (
    uint cid,
    address _memberAddress,
    address _scAddress,
    bytes4 _currencyCode,
    uint _sumAssured,
    uint premiumNXM
  );

  function getCoverDetailsByCoverID2(
    uint _cid
  )
  external
  view
  returns (
    uint cid,
    uint8 status,
    uint sumAssured,
    uint16 coverPeriod,
    uint validUntil
  );

  function getHoldedCoverDetailsByID1(
    uint _hcid
  )
  external
  view
  returns (
    uint hcid,
    address scAddress,
    bytes4 coverCurr,
    uint16 coverPeriod
  );

  function getUserHoldedCoverLength(address _add) external view returns (uint);

  function getUserHoldedCoverByIndex(address _add, uint index) external view returns (uint);

  function getHoldedCoverDetailsByID2(
    uint _hcid
  )
  external
  view
  returns (
    uint hcid,
    address payable memberAddress,
    uint[] memory coverDetails
  );

  function getTotalSumAssuredSC(address _add, bytes4 _curr) external view returns (uint amount);

  function changeCoverStatusNo(uint _cid, uint8 _stat) external;

}

File 12 of 15 : ITokenController.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface ITokenController {

  function coverInfo(uint id) external view returns (uint16 claimCount, bool hasOpenClaim, bool hasAcceptedClaim);

  function claimSubmissionGracePeriod() external view returns (uint);

  function withdrawCoverNote(
    address _of,
    uint[] calldata _coverIds,
    uint[] calldata _indexes
  ) external;

  function markCoverClaimOpen(uint coverId) external;

  function markCoverClaimClosed(uint coverId, bool isAccepted) external;

  function changeOperator(address _newOperator) external;

  function operatorTransfer(address _from, address _to, uint _value) external returns (bool);

  function lockClaimAssessmentTokens(uint256 _amount, uint256 _time) external;

  function lockOf(address _of, bytes32 _reason, uint256 _amount, uint256 _time) external returns (bool);

  function mintCoverNote(
    address _of,
    bytes32 _reason,
    uint256 _amount,
    uint256 _time
  ) external;

  function extendClaimAssessmentLock(uint256 _time) external;

  function extendLockOf(address _of, bytes32 _reason, uint256 _time) external returns (bool);

  function increaseClaimAssessmentLock(uint256 _amount) external;

  function burnFrom(address _of, uint amount) external returns (bool);

  function burnLockedTokens(address _of, bytes32 _reason, uint256 _amount) external;

  function reduceLock(address _of, bytes32 _reason, uint256 _time) external;

  function releaseLockedTokens(address _of, bytes32 _reason, uint256 _amount) external;

  function addToWhitelist(address _member) external;

  function removeFromWhitelist(address _member) external;

  function mint(address _member, uint _amount) external;

  function lockForMemberVote(address _of, uint _days) external;
  function withdrawClaimAssessmentTokens(address _of) external;

  function getLockReasons(address _of) external view returns (bytes32[] memory reasons);

  function getLockedTokensValidity(address _of, bytes32 reason) external view returns (uint256 validity);

  function getUnlockableTokens(address _of) external view returns (uint256 unlockableTokens);

  function tokensLocked(address _of, bytes32 _reason) external view returns (uint256 amount);

  function tokensLockedWithValidity(address _of, bytes32 _reason)
  external
  view
  returns (uint256 amount, uint256 validity);

  function tokensUnlockable(address _of, bytes32 _reason) external view returns (uint256 amount);

  function totalSupply() external view returns (uint256);

  function tokensLockedAtTime(address _of, bytes32 _reason, uint256 _time) external view returns (uint256 amount);
  function totalBalanceOf(address _of) external view returns (uint256 amount);

  function totalLockedBalance(address _of) external view returns (uint256 amount);
}

File 13 of 15 : ITokenData.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface ITokenData {

  function walletAddress() external view returns (address payable);
  function lockTokenTimeAfterCoverExp() external view returns (uint);
  function bookTime() external view returns (uint);
  function lockCADays() external view returns (uint);
  function lockMVDays() external view returns (uint);
  function scValidDays() external view returns (uint);
  function joiningFee() external view returns (uint);
  function stakerCommissionPer() external view returns (uint);
  function stakerMaxCommissionPer() external view returns (uint);
  function tokenExponent() external view returns (uint);
  function priceStep() external view returns (uint);

  function depositedCN(uint) external view returns (uint amount, bool isDeposited);

  function lastCompletedStakeCommission(address) external view returns (uint);

  function changeWalletAddress(address payable _address) external;

  function getStakerStakedContractByIndex(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (address stakedContractAddress);

  function getStakerStakedBurnedByIndex(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint burnedAmount);

  function getStakerStakedUnlockableBeforeLastBurnByIndex(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint unlockable);

  function getStakerStakedContractIndex(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint scIndex);

  function getStakedContractStakerIndex(
    address _stakedContractAddress,
    uint _stakedContractIndex
  )
  external
  view
  returns (uint sIndex);

  function getStakerInitialStakedAmountOnContract(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint amount);

  function getStakerStakedContractLength(
    address _stakerAddress
  )
  external
  view
  returns (uint length);

  function getStakerUnlockedStakedTokens(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint amount);

  function pushUnlockedStakedTokens(
    address _stakerAddress,
    uint _stakerIndex,
    uint _amount
  ) external;


  function pushBurnedTokens(
    address _stakerAddress,
    uint _stakerIndex,
    uint _amount
  ) external;

  function pushUnlockableBeforeLastBurnTokens(
    address _stakerAddress,
    uint _stakerIndex,
    uint _amount
  ) external;

  function setUnlockableBeforeLastBurnTokens(
    address _stakerAddress,
    uint _stakerIndex,
    uint _amount
  ) external;

  function pushEarnedStakeCommissions(
    address _stakerAddress,
    address _stakedContractAddress,
    uint _stakedContractIndex,
    uint _commissionAmount
  ) external;

  function pushRedeemedStakeCommissions(
    address _stakerAddress,
    uint _stakerIndex,
    uint _amount
  ) external;

  function getStakerEarnedStakeCommission(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint);

  function getStakerRedeemedStakeCommission(
    address _stakerAddress,
    uint _stakerIndex
  )
  external
  view
  returns (uint);

  function getStakerTotalEarnedStakeCommission(
    address _stakerAddress
  )
  external
  view
  returns (uint totalCommissionEarned);

  function getStakerTotalReedmedStakeCommission(
    address _stakerAddress
  )
  external
  view
  returns (uint totalCommissionRedeemed);

  function setDepositCN(uint coverId, bool flag) external;

  function getStakedContractStakerByIndex(
    address _stakedContractAddress,
    uint _stakedContractIndex
  )
  external
  view
  returns (address stakerAddress);

  function getStakedContractStakersLength(
    address _stakedContractAddress
  ) external view returns (uint length);

  function addStake(
    address _stakerAddress,
    address _stakedContractAddress,
    uint _amount
  ) external returns (uint scIndex);

  function bookCATokens(address _of) external;

  function isCATokensBooked(address _of) external view returns (bool res);

  function setStakedContractCurrentCommissionIndex(
    address _stakedContractAddress,
    uint _index
  ) external;

  function setLastCompletedStakeCommissionIndex(
    address _stakerAddress,
    uint _index
  ) external;


  function setStakedContractCurrentBurnIndex(
    address _stakedContractAddress,
    uint _index
  ) external;

  function setDepositCNAmount(uint coverId, uint amount) external;
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface INXMMaster {

  function tokenAddress() external view returns (address);

  function owner() external view returns (address);

  function masterInitialized() external view returns (bool);

  function isInternal(address _add) external view returns (bool);

  function isPause() external view returns (bool check);

  function isOwner(address _add) external view returns (bool);

  function isMember(address _add) external view returns (bool);

  function checkIsAuthToGoverned(address _add) external view returns (bool);

  function dAppLocker() external view returns (address _add);

  function getLatestAddress(bytes2 _contractName) external view returns (address payable contractAddress);

  function upgradeMultipleContracts(
    bytes2[] calldata _contractCodes,
    address payable[] calldata newAddresses
  ) external;

  function removeContracts(bytes2[] calldata contractCodesToRemove) external;

  function addNewInternalContracts(
    bytes2[] calldata _contractCodes,
    address payable[] calldata newAddresses,
    uint[] calldata _types
  ) external;

  function updateOwnerParameters(bytes8 code, address payable val) external;
}

// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IPriceFeedOracle {

  function daiAddress() external view returns (address);
  function stETH() external view returns (address);
  function ETH() external view returns (address);

  function getAssetToEthRate(address asset) external view returns (uint);
  function getAssetForEth(address asset, uint ethIn) external view returns (uint);

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"bytes4","name":"coverCurr","type":"bytes4"},{"internalType":"address","name":"smartCAdd","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"bool","name":"payWithNXM","type":"bool"},{"internalType":"string","name":"ipfsMetadata","type":"string"}],"name":"buyCoverWithMetadata","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"changeDependentContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"masterAddress","type":"address"}],"name":"changeMasterAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"coverMetadata","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cr","outputs":[{"internalType":"contract IClaimsReward","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"from","type":"address"},{"internalType":"address","name":"scAddress","type":"address"},{"internalType":"bytes4","name":"currency","type":"bytes4"},{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"createCover","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coverId","type":"uint256"}],"name":"expireCover","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"bytes4","name":"currency","type":"bytes4"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"coverOwner","type":"address"}],"name":"getWithdrawableCoverNoteCoverIds","outputs":[{"internalType":"uint256[]","name":"expiredCoverIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"lockReasons","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"coverOwner","type":"address"}],"name":"getWithdrawableCoverNotesAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incidents","outputs":[{"internalType":"contract IIncidents","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"isValidSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"bytes4","name":"coverCurr","type":"bytes4"},{"internalType":"address","name":"smartCAdd","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"makeCoverUsingNXMTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"master","outputs":[{"internalType":"contract INXMMaster","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pooledStaking","outputs":[{"internalType":"contract IPooledStaking","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"qd","outputs":[{"internalType":"contract IQuotationData","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sendEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tc","outputs":[{"internalType":"contract ITokenController","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"td","outputs":[{"internalType":"contract ITokenData","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferAssetsToNewContract","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"from","type":"address"},{"internalType":"address","name":"scAddress","type":"address"},{"internalType":"bytes4","name":"coverCurr","type":"bytes4"},{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"verifyCoverDetails","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"coverDetails","type":"uint256[]"},{"internalType":"uint16","name":"coverPeriod","type":"uint16"},{"internalType":"bytes4","name":"currency","type":"bytes4"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"verifySignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"coverOwner","type":"address"},{"internalType":"uint256[]","name":"coverIds","type":"uint256[]"},{"internalType":"uint256[]","name":"reasonIndexes","type":"uint256[]"}],"name":"withdrawCoverNote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000805460ff60a01b1916600160a01b179055613b2f806100266000396000f3fe60806040526004361061014b5760003560e01c80638b257d3d116100b6578063d46655f41161006f578063d46655f4146109ee578063da3ca8b514610a21578063e262997414610a36578063ee97f7f314610a69578063f4136f7f14610a7e578063f6420e1514610aa85761014b565b80638b257d3d146106885780639b92c7fd146106db578063a3ffac0d146107c0578063b1d6ed0c146107d5578063b87ea891146108d9578063d077e3b11461091e5761014b565b80634ae0d08c116101085780634ae0d08c146103815780634b227336146104205780635afd9ee31461043557806362eb33e31461050157806363f0b1571461051657806379c84328146105d55761014b565b8063026c0b5f146101505780630e29df221461022d5780630ea9c98414610235578063133663f91461024a57806316f0115b1461027b5780634a17847214610290575b600080fd5b34801561015c57600080fd5b5061022b6004803603606081101561017357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561019d57600080fd5b8201836020820111156101af57600080fd5b803590602001918460208302840111600160201b831117156101d057600080fd5b919390929091602081019035600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460208302840111600160201b8311171561022057600080fd5b509092509050610abd565b005b61022b610cf5565b34801561024157600080fd5b5061022b610cf7565b34801561025657600080fd5b5061025f61119f565b604080516001600160a01b039092168252519081900360200190f35b34801561028757600080fd5b5061025f6111ae565b34801561029c57600080fd5b5061022b60048036036101008110156102b457600080fd5b6001600160a01b0382358116926020810135909116916001600160e01b03196040830135169190810190608081016060820135600160201b8111156102f857600080fd5b82018360208201111561030a57600080fd5b803590602001918460208302840111600160201b8311171561032b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505061ffff83351693505060ff6020830135169160408101359150606001356111bd565b34801561038d57600080fd5b506103ab600480360360208110156103a457600080fd5b503561128b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e55781810151838201526020016103cd565b50505050905090810190601f1680156104125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042c57600080fd5b5061025f611326565b34801561044157600080fd5b506104686004803603602081101561045857600080fd5b50356001600160a01b0316611335565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ac578181015183820152602001610494565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104eb5781810151838201526020016104d3565b5050505090500194505050505060405180910390f35b34801561050d57600080fd5b5061025f6117b3565b34801561052257600080fd5b5061022b600480360361010081101561053a57600080fd5b6001600160a01b0382358116926020810135909116916001600160e01b03196040830135169190810190608081016060820135600160201b81111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460208302840111600160201b831117156105b157600080fd5b919350915061ffff8135169060ff60208201351690604081013590606001356117c2565b3480156105e157600080fd5b5061022b600480360360e08110156105f857600080fd5b810190602081018135600160201b81111561061257600080fd5b82018360208201111561062457600080fd5b803590602001918460208302840111600160201b8311171561064557600080fd5b919350915061ffff813516906001600160e01b0319602082013516906001600160a01b036040820135169060ff6060820135169060808101359060a00135611b62565b34801561069457600080fd5b506106c7600480360360808110156106ab57600080fd5b5080359060ff6020820135169060408101359060600135611dc9565b604080519115158252519081900360200190f35b3480156106e757600080fd5b506106c7600480360360e08110156106fe57600080fd5b810190602081018135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505061ffff8335169350506001600160e01b0319602083013516916001600160a01b03604082013516915060ff6060820135169060808101359060a00135611f5e565b3480156107cc57600080fd5b5061025f611f9c565b61022b60048036036101208110156107ec57600080fd5b810190602081018135600160201b81111561080657600080fd5b82018360208201111561081857600080fd5b803590602001918460208302840111600160201b8311171561083957600080fd5b9193909261ffff833516926001600160e01b0319602082013516926001600160a01b036040830135169260ff6060840135169260808101359260a08201359260c083013515159261010081019060e00135600160201b81111561089b57600080fd5b8201836020820111156108ad57600080fd5b803590602001918460018302840111600160201b831117156108ce57600080fd5b509092509050611fab565b3480156108e557600080fd5b5061090c600480360360208110156108fc57600080fd5b50356001600160a01b03166123de565b60408051918252519081900360200190f35b34801561092a57600080fd5b5061090c6004803603608081101561094157600080fd5b810190602081018135600160201b81111561095b57600080fd5b82018360208201111561096d57600080fd5b803590602001918460208302840111600160201b8311171561098e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050813561ffff1692505060208101356001600160e01b03191690604001356001600160a01b03166124c9565b3480156109fa57600080fd5b5061022b60048036036020811015610a1157600080fd5b50356001600160a01b03166125ca565b348015610a2d57600080fd5b5061025f612649565b348015610a4257600080fd5b5061022b60048036036020811015610a5957600080fd5b50356001600160a01b0316612658565b348015610a7557600080fd5b5061025f61265b565b348015610a8a57600080fd5b5061022b60048036036020811015610aa157600080fd5b503561266a565b348015610ab457600080fd5b5061025f612aae565b6005546040805163207638ad60e01b815290516000926001600160a01b03169163207638ad916004808301926020929190829003018186803b158015610b0257600080fd5b505afa158015610b16573d6000803e3d6000fd5b505050506040513d6020811015610b2c57600080fd5b5051905060005b84811015610c1a576004546000906001600160a01b031663711acf86888885818110610b5b57fe5b905060200201356040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d6020811015610bc057600080fd5b5051905042610bd5828563ffffffff612abd16565b10610c115760405162461bcd60e51b81526004018080602001828103825260398152602001806139b76039913960400191505060405180910390fd5b50600101610b33565b5060055460405163026c0b5f60e01b81526001600160a01b038881166004830190815260606024840190815260648401899052919093169263026c0b5f928a928a928a928a928a92916044810190608401876020880280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b50505050505050505050565b565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b158015610d4257600080fd5b505afa158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b5051610da95760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b600054604080516227050b60e31b81526121a960f11b600482015290516001600160a01b0390921691630138285891602480820192602092909190829003018186803b158015610df857600080fd5b505afa158015610e0c573d6000803e3d6000fd5b505050506040513d6020811015610e2257600080fd5b5051600180546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261503160f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610e8757600080fd5b505afa158015610e9b573d6000803e3d6000fd5b505050506040513d6020811015610eb157600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261505360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610f1657600080fd5b505afa158015610f2a573d6000803e3d6000fd5b505050506040513d6020811015610f4057600080fd5b5051600380546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261145160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610fa557600080fd5b505afa158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155600054604080516227050b60e31b815261544360f01b9381019390935251921691630138285891602480820192602092909190829003018186803b15801561103457600080fd5b505afa158015611048573d6000803e3d6000fd5b505050506040513d602081101561105e57600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261151160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261494360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d602081101561117c57600080fd5b5051600780546001600160a01b0319166001600160a01b03909216919091179055565b6003546001600160a01b031681565b6002546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561120857600080fd5b505afa15801561121c573d6000803e3d6000fd5b505050506040513d602081101561123257600080fd5b505161126f5760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b61128188888888888888886000612b20565b5050505050505050565b60086020908152600091825260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452909183018282801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b6007546001600160a01b031681565b6004805460408051633f9f3eff60e21b81526001600160a01b038581169482019490945290516060938493849391169163fe7cfbfc91602480820192600092909190829003018186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156113c857600080fd5b8101908080516040519392919084600160201b8211156113e757600080fd5b9083019060208201858111156113fc57600080fd5b82518660208202830111600160201b8211171561141857600080fd5b82525081516020918201928201910280838360005b8381101561144557818101518382015260200161142d565b50505050905001604052505050905060608151604051908082528060200260200182016040528015611481578160200160208202803883390190505b5090506000600560009054906101000a90046001600160a01b03166001600160a01b031663207638ad6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d60208110156114fe57600080fd5b505190506000805b84518110156116945760045485516000916001600160a01b03169063711acf869088908590811061153357fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051905060006115af828663ffffffff612abd16565b60055488519192506000916001600160a01b03909116906322133fdd908a90879081106115d857fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b15801561161457600080fd5b505afa158015611628573d6000803e3d6000fd5b505050506040513d606081101561163e57600080fd5b506020015190508015801561165257504282105b156116895787848151811061166357fe5b602002602001015187868151811061167757fe5b60209081029190910101526001909401935b505050600101611506565b50806040519080825280602002602001820160405280156116bf578160200160208202803883390190505b509550806040519080825280602002602001820160405280156116ec578160200160208202803883390190505b50945060005b818110156117a95783818151811061170657fe5b602002602001015187828151811061171a57fe5b6020026020010181815250508784828151811061173357fe5b602002602001015160405160200180806121a760f11b815250600201836001600160a01b03166001600160a01b031660601b8152601401828152602001925050506040516020818303038152906040528051906020012086828151811061179657fe5b60209081029190910101526001016116f2565b5050505050915091565b6001546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561180d57600080fd5b505afa158015611821573d6000803e3d6000fd5b505050506040513d602081101561183757600080fd5b50516118745760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b428686600381811061188257fe5b90506020020135116118db576040805162461bcd60e51b815260206004820152601c60248201527f51756f746174696f6e3a2051756f746520686173206578706972656400000000604482015290519081900360640190fd5b601e8461ffff16101580156118f6575061016d8461ffff1611155b6119315760405162461bcd60e51b8152600401808060200182810382526025815260200180613a126025913960400191505060405180910390fd5b600480546001600160a01b03169063922fd67f908890889081811061195257fe5b905060200201356040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d60208110156119b757600080fd5b505115611a0b576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a2051756f746520616c72656164792075736564000000604482015290519081900360640190fd5b600480546001600160a01b0316906383fa95859088908890818110611a2c57fe5b905060200201356040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b50505050611ac58686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508b91508c9050878787611f5e565b611b16576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a207369676e6174757265206d69736d61746368000000604482015290519081900360640190fd5b611b578989898989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250612ef6915050565b505050505050505050565b6000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b158015611bad57600080fd5b505afa158015611bc1573d6000803e3d6000fd5b505050506040513d6020811015611bd757600080fd5b5051611c23576040805162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba10309036b2b6b132b960511b604482015290519081900360640190fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d6020811015611c9a57600080fd5b505115611ce1576040805162461bcd60e51b815260206004820152601060248201526f14de5cdd195b481a5cc81c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03166379cc6790338a8a6002818110611d0057fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b505050506040513d6020811015611d8057600080fd5b5050604080516020898102828101820190935289825261128192339288928a928e918e9182918501908490808284376000920191909152508d92508a9150899050886001612b20565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310611e3b5780518252601f199092019160209182019101611e1c565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815284830180835281519184019190912060009182905282860180845281905260ff8d166060870152608086018c905260a086018b90529151919650945060019360c08082019450601f19830192918290030190855afa158015611eca573d6000803e3d6000fd5b505060408051601f1981015160048054633a34eba760e21b845293519195506001600160a01b03909316935063e8d3ae9c92808301926020929190829003018186803b158015611f1957600080fd5b505afa158015611f2d573d6000803e3d6000fd5b505050506040513d6020811015611f4357600080fd5b50516001600160a01b03908116911614979650505050505050565b60006001600160a01b038516611f7357600080fd5b6000611f81898989896124c9565b9050611f8f81868686611dc9565b9998505050505050505050565b6006546001600160a01b031681565b6000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b158015611ff657600080fd5b505afa15801561200a573d6000803e3d6000fd5b505050506040513d602081101561202057600080fd5b505161206c576040805162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba10309036b2b6b132b960511b604482015290519081900360640190fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b957600080fd5b505afa1580156120cd573d6000803e3d6000fd5b505050506040513d60208110156120e357600080fd5b50511561212a576040805162461bcd60e51b815260206004820152601060248201526f14de5cdd195b481a5cc81c185d5cd95960821b604482015290519081900360640190fd5b82156121d7576005546001600160a01b03166379cc6790338d8d600281811061214f57fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156121a557600080fd5b505af11580156121b9573d6000803e3d6000fd5b505050506040513d60208110156121cf57600080fd5b506122d49050565b6208aa8960eb1b6001600160e01b0319891614156122d4578a8a60018181106121fc57fe5b9050602002013534146122405760405162461bcd60e51b815260040180806020018281038252602c815260200180613a58602c913960400191505060405180910390fd5b6002546040516000916001600160a01b03169034908381818185875af1925050503d806000811461228d576040519150601f19603f3d011682016040523d82523d6000602084013e612292565b606091505b50509050806122d25760405162461bcd60e51b81526004018080602001828103825260228152602001806139f06022913960400191505060405180910390fd5b505b61232633888a8e8e80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d8b8b8b8b612b20565b60006123b36001600460009054906101000a90046001600160a01b03166001600160a01b03166367157ff06040518163ffffffff1660e01b815260040160206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d60208110156123a557600080fd5b50519063ffffffff61371d16565b60008181526008602052604090209091506123cf9084846138f6565b50505050505050505050505050565b60008060606123ec84611335565b9150600090505b81518110156124c05760055482516000916001600160a01b031690635ca48d8c90889086908690811061242257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b15801561247757600080fd5b505afa15801561248b573d6000803e3d6000fd5b505050506040513d60208110156124a157600080fd5b505190506124b5848263ffffffff612abd16565b9350506001016123f3565b50909392505050565b6000846000815181106124d857fe5b6020026020010151838584886001815181106124f057fe5b60200260200101518960028151811061250557fe5b60200260200101518a60038151811061251a57fe5b60200260200101518b60048151811061252f57fe5b602090810291909101810151604080518084019a909a526001600160e01b0319989098168989015260f09690961b6001600160f01b0319166044890152606094851b6bffffffffffffffffffffffff19166046890152605a880193909352607a870191909152609a86015260ba85019290925230901b60da840152815180840360ce01815260ee909301909152815191012095945050505050565b6000546001600160a01b031615612627576000546001600160a01b03163314612627576040805162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b50565b6000546001600160a01b031681565b600480546040805163388d67c360e11b8152928301849052516000926001600160a01b039092169163711acf86916024808301926020929190829003018186803b1580156126b757600080fd5b505afa1580156126cb573d6000803e3d6000fd5b505050506040513d60208110156126e157600080fd5b505190504281106127235760405162461bcd60e51b81526004018080602001828103825260258152602001806139926025913960400191505060405180910390fd5b6004805460408051634b2cc0a160e01b8152928301859052516000926001600160a01b0390921691634b2cc0a1916024808301926020929190829003018186803b15801561277057600080fd5b505afa158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b505160ff16905060038114156127f7576040805162461bcd60e51b815260206004820181905260248201527f51756f746174696f6e3a20636f76657220616c72656164792065787069726564604482015290519081900360640190fd5b600554604080516322133fdd60e01b81526004810186905290516000926001600160a01b0316916322133fdd916024808301926060929190829003018186803b15801561284357600080fd5b505afa158015612857573d6000803e3d6000fd5b505050506040513d606081101561286d57600080fd5b5060200151905080156128b15760405162461bcd60e51b8152600401808060200182810382526022815260200180613a846022913960400191505060405180910390fd5b60018214612a4857600480546040805163df09fea760e01b815292830187905251600092839283926001600160a01b039091169163df09fea79160248083019260c0929190829003018186803b15801561290a57600080fd5b505afa15801561291e573d6000803e3d6000fd5b505050506040513d60c081101561293457600080fd5b5060408082015160608301516080909301516004805484516360a230e760e01b81526001600160e01b031987169281019290925260248201839052935192975093955093506001600160a01b03909116916360a230e791604480830192600092919082900301818387803b1580156129ab57600080fd5b505af11580156129bf573d6000803e3d6000fd5b505060048054604080516340ebb05760e11b81526001600160a01b03898116948201949094526001600160e01b0319881660248201526044810187905290519290911693506381d760ae925060648082019260009290919082900301818387803b158015612a2c57600080fd5b505af1158015612a40573d6000803e3d6000fd5b505050505050505b600480546040805163570e2f6560e11b815292830187905260036024840152516001600160a01b039091169163ae1c5eca91604480830192600092919082900301818387803b158015612a9a57600080fd5b505af1158015611281573d6000803e3d6000fd5b6005546001600160a01b031681565b600082820183811015612b17576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b4286600381518110612b2e57fe5b602002602001015111612b88576040805162461bcd60e51b815260206004820152601c60248201527f51756f746174696f6e3a2051756f746520686173206578706972656400000000604482015290519081900360640190fd5b601e8561ffff1610158015612ba3575061016d8561ffff1611155b612bde5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a126025913960400191505060405180910390fd5b6004805487516001600160a01b039091169163922fd67f918991908110612c0157fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612c3d57600080fd5b505afa158015612c51573d6000803e3d6000fd5b505050506040513d6020811015612c6757600080fd5b505115612cbb576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a2051756f746520616c72656164792075736564000000604482015290519081900360640190fd5b6004805487516001600160a01b03909116916383fa9585918991908110612cde57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d1c57600080fd5b505af1158015612d30573d6000803e3d6000fd5b50506001546040805163e3dee23960e01b81526001600160e01b03198c1660048201529051600094506001600160a01b03909216925063e3dee239916024808301926020929190829003018186803b158015612d8b57600080fd5b505afa158015612d9f573d6000803e3d6000fd5b505050506040513d6020811015612db557600080fd5b505190506208aa8960eb1b6001600160e01b0319891614801590612dd7575081155b15612e8d5760025487516001600160a01b039091169063d311afb49083908d908b906001908110612e0457fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050505b612e9c87878a8c898989611f5e565b612eed576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a207369676e6174757265206d69736d61746368000000604482015290519081900360640190fd5b610ce98a8a8a8a8a5b6007546040805163f7480d3b60e01b81526001600160a01b0387811660048301529151600093929092169163f7480d3b91602480820192602092909190829003018186803b158015612f4757600080fd5b505afa158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b505190506001600160a01b03811615613053576001546040805163e3dee23960e01b81526001600160e01b03198716600482015290516000926001600160a01b03169163e3dee239916024808301926020929190829003018186803b158015612fd957600080fd5b505afa158015612fed573d6000803e3d6000fd5b505050506040513d602081101561300357600080fd5b505190506001600160a01b03808216908316146130515760405162461bcd60e51b8152600401808060200182810382526033815260200180613ac86033913960400191505060405180910390fd5b505b6000600460009054906101000a90046001600160a01b03166001600160a01b03166367157ff06040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a357600080fd5b505afa1580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b505160045485519192506001600160a01b031690638ce80a6590859087906000906130f457fe5b60200260200101518a898b8a60018151811061310c57fe5b60200260200101518b60028151811061312157fe5b60200260200101516040518863ffffffff1660e01b8152600401808861ffff1661ffff168152602001878152602001866001600160a01b03166001600160a01b03168152602001856001600160e01b0319166001600160e01b0319168152602001846001600160a01b03166001600160a01b03168152602001838152602001828152602001975050505050505050600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b50506004805460408051633ceac9b360e21b815290516000955061328b945060649361327f936001600160a01b03169263f3ab26cc9281830192602092829003018186803b15801561322e57600080fd5b505afa158015613242573d6000803e3d6000fd5b505050506040513d602081101561325857600080fd5b505188518990600290811061326957fe5b602002602001015161375f90919063ffffffff16565b9063ffffffff6137b816565b90506000600560009054906101000a90046001600160a01b03166001600160a01b031663207638ad6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132dd57600080fd5b505afa1580156132f1573d6000803e3d6000fd5b505050506040513d602081101561330757600080fd5b5051905060006133348261332861ffff89166201518063ffffffff61375f16565b9063ffffffff612abd16565b604080516121a760f11b60208083019190915260608e901b6bffffffffffffffffffffffff191660228301526036808301899052835180840390910181526056830180855281519190920120600654634e71865960e01b909252605a8301899052607a8301889052925193945091926001600160a01b0390921691634e71865991609a8082019260009290919082900301818387803b1580156133d657600080fd5b505af11580156133ea573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b031663c5facba28c8387866040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561347357600080fd5b505af1158015613487573d6000803e3d6000fd5b50506004548a516001600160a01b03909116925063a2c6bc2591508b908b906000906134af57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160e01b0319166001600160e01b031916815260200182815260200192505050600060405180830381600087803b15801561350857600080fd5b505af115801561351c573d6000803e3d6000fd5b50506004548a516001600160a01b039091169250633994b3d591508c908c908c9060009061354657fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160e01b0319166001600160e01b03191681526020018281526020019350505050600060405180830381600087803b1580156135b857600080fd5b505af11580156135cc573d6000803e3d6000fd5b505050506000886002815181106135df57fe5b602002602001015190506000600660009054906101000a90046001600160a01b03166001600160a01b031663e22648506040518163ffffffff1660e01b815260040160206040518083038186803b15801561363957600080fd5b505afa15801561364d573d6000803e3d6000fd5b505050506040513d602081101561366357600080fd5b50519050600061367e606461327f858563ffffffff61375f16565b9050600360009054906101000a90046001600160a01b03166001600160a01b031663f0f923c08e836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000612b1783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137fa565b60008261376e57506000612b1a565b8282028284828161377b57fe5b0414612b175760405162461bcd60e51b8152600401808060200182810382526021815260200180613a376021913960400191505060405180910390fd5b6000612b1783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613891565b600081848411156138895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561384e578181015183820152602001613836565b50505050905090810190601f16801561387b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836138e05760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561384e578181015183820152602001613836565b5060008385816138ec57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139375782800160ff19823516178555613964565b82800160010185558215613964579182015b82811115613964578235825591602001919060010190613949565b50613970929150613974565b5090565b61398e91905b80821115613970576000815560010161397a565b9056fe51756f746174696f6e3a20636f766572206973206e6f742064756520746f2065787069726551756f746174696f6e3a2063616e6e6f74207769746864726177206265666f726520677261636520706572696f642065787069726174696f6e51756f746174696f6e3a205472616e7366657220746f20506f6f6c206661696c656451756f746174696f6e3a20436f76657220706572696f64206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7751756f746174696f6e3a2045544820616d6f756e7420646f6573206e6f74206d61746368207072656d69756d51756f746174696f6e3a20636f7665722068617320616e206f70656e20636c61696d43616c6c6572206973206e6f7420616e20696e7465726e616c20636f6e747261637451756f746174696f6e3a20556e737570706f7274656420636f76657220617373657420666f7220746869732070726f64756374a265627a7a723158206cf0b8c2d04bec4f1bac9cb1d61bbd757c4b9fab033b161c019af1b6e000343064736f6c63430005110032

Deployed Bytecode

0x60806040526004361061014b5760003560e01c80638b257d3d116100b6578063d46655f41161006f578063d46655f4146109ee578063da3ca8b514610a21578063e262997414610a36578063ee97f7f314610a69578063f4136f7f14610a7e578063f6420e1514610aa85761014b565b80638b257d3d146106885780639b92c7fd146106db578063a3ffac0d146107c0578063b1d6ed0c146107d5578063b87ea891146108d9578063d077e3b11461091e5761014b565b80634ae0d08c116101085780634ae0d08c146103815780634b227336146104205780635afd9ee31461043557806362eb33e31461050157806363f0b1571461051657806379c84328146105d55761014b565b8063026c0b5f146101505780630e29df221461022d5780630ea9c98414610235578063133663f91461024a57806316f0115b1461027b5780634a17847214610290575b600080fd5b34801561015c57600080fd5b5061022b6004803603606081101561017357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561019d57600080fd5b8201836020820111156101af57600080fd5b803590602001918460208302840111600160201b831117156101d057600080fd5b919390929091602081019035600160201b8111156101ed57600080fd5b8201836020820111156101ff57600080fd5b803590602001918460208302840111600160201b8311171561022057600080fd5b509092509050610abd565b005b61022b610cf5565b34801561024157600080fd5b5061022b610cf7565b34801561025657600080fd5b5061025f61119f565b604080516001600160a01b039092168252519081900360200190f35b34801561028757600080fd5b5061025f6111ae565b34801561029c57600080fd5b5061022b60048036036101008110156102b457600080fd5b6001600160a01b0382358116926020810135909116916001600160e01b03196040830135169190810190608081016060820135600160201b8111156102f857600080fd5b82018360208201111561030a57600080fd5b803590602001918460208302840111600160201b8311171561032b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505061ffff83351693505060ff6020830135169160408101359150606001356111bd565b34801561038d57600080fd5b506103ab600480360360208110156103a457600080fd5b503561128b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e55781810151838201526020016103cd565b50505050905090810190601f1680156104125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042c57600080fd5b5061025f611326565b34801561044157600080fd5b506104686004803603602081101561045857600080fd5b50356001600160a01b0316611335565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ac578181015183820152602001610494565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156104eb5781810151838201526020016104d3565b5050505090500194505050505060405180910390f35b34801561050d57600080fd5b5061025f6117b3565b34801561052257600080fd5b5061022b600480360361010081101561053a57600080fd5b6001600160a01b0382358116926020810135909116916001600160e01b03196040830135169190810190608081016060820135600160201b81111561057e57600080fd5b82018360208201111561059057600080fd5b803590602001918460208302840111600160201b831117156105b157600080fd5b919350915061ffff8135169060ff60208201351690604081013590606001356117c2565b3480156105e157600080fd5b5061022b600480360360e08110156105f857600080fd5b810190602081018135600160201b81111561061257600080fd5b82018360208201111561062457600080fd5b803590602001918460208302840111600160201b8311171561064557600080fd5b919350915061ffff813516906001600160e01b0319602082013516906001600160a01b036040820135169060ff6060820135169060808101359060a00135611b62565b34801561069457600080fd5b506106c7600480360360808110156106ab57600080fd5b5080359060ff6020820135169060408101359060600135611dc9565b604080519115158252519081900360200190f35b3480156106e757600080fd5b506106c7600480360360e08110156106fe57600080fd5b810190602081018135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505061ffff8335169350506001600160e01b0319602083013516916001600160a01b03604082013516915060ff6060820135169060808101359060a00135611f5e565b3480156107cc57600080fd5b5061025f611f9c565b61022b60048036036101208110156107ec57600080fd5b810190602081018135600160201b81111561080657600080fd5b82018360208201111561081857600080fd5b803590602001918460208302840111600160201b8311171561083957600080fd5b9193909261ffff833516926001600160e01b0319602082013516926001600160a01b036040830135169260ff6060840135169260808101359260a08201359260c083013515159261010081019060e00135600160201b81111561089b57600080fd5b8201836020820111156108ad57600080fd5b803590602001918460018302840111600160201b831117156108ce57600080fd5b509092509050611fab565b3480156108e557600080fd5b5061090c600480360360208110156108fc57600080fd5b50356001600160a01b03166123de565b60408051918252519081900360200190f35b34801561092a57600080fd5b5061090c6004803603608081101561094157600080fd5b810190602081018135600160201b81111561095b57600080fd5b82018360208201111561096d57600080fd5b803590602001918460208302840111600160201b8311171561098e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050813561ffff1692505060208101356001600160e01b03191690604001356001600160a01b03166124c9565b3480156109fa57600080fd5b5061022b60048036036020811015610a1157600080fd5b50356001600160a01b03166125ca565b348015610a2d57600080fd5b5061025f612649565b348015610a4257600080fd5b5061022b60048036036020811015610a5957600080fd5b50356001600160a01b0316612658565b348015610a7557600080fd5b5061025f61265b565b348015610a8a57600080fd5b5061022b60048036036020811015610aa157600080fd5b503561266a565b348015610ab457600080fd5b5061025f612aae565b6005546040805163207638ad60e01b815290516000926001600160a01b03169163207638ad916004808301926020929190829003018186803b158015610b0257600080fd5b505afa158015610b16573d6000803e3d6000fd5b505050506040513d6020811015610b2c57600080fd5b5051905060005b84811015610c1a576004546000906001600160a01b031663711acf86888885818110610b5b57fe5b905060200201356040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d6020811015610bc057600080fd5b5051905042610bd5828563ffffffff612abd16565b10610c115760405162461bcd60e51b81526004018080602001828103825260398152602001806139b76039913960400191505060405180910390fd5b50600101610b33565b5060055460405163026c0b5f60e01b81526001600160a01b038881166004830190815260606024840190815260648401899052919093169263026c0b5f928a928a928a928a928a92916044810190608401876020880280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b50505050505050505050565b565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b158015610d4257600080fd5b505afa158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b5051610da95760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b600054604080516227050b60e31b81526121a960f11b600482015290516001600160a01b0390921691630138285891602480820192602092909190829003018186803b158015610df857600080fd5b505afa158015610e0c573d6000803e3d6000fd5b505050506040513d6020811015610e2257600080fd5b5051600180546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261503160f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610e8757600080fd5b505afa158015610e9b573d6000803e3d6000fd5b505050506040513d6020811015610eb157600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261505360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610f1657600080fd5b505afa158015610f2a573d6000803e3d6000fd5b505050506040513d6020811015610f4057600080fd5b5051600380546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261145160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b158015610fa557600080fd5b505afa158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155600054604080516227050b60e31b815261544360f01b9381019390935251921691630138285891602480820192602092909190829003018186803b15801561103457600080fd5b505afa158015611048573d6000803e3d6000fd5b505050506040513d602081101561105e57600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261151160f21b6004820152905191909216916301382858916024808301926020929190829003018186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055600054604080516227050b60e31b815261494360f01b6004820152905191909216916301382858916024808301926020929190829003018186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d602081101561117c57600080fd5b5051600780546001600160a01b0319166001600160a01b03909216919091179055565b6003546001600160a01b031681565b6002546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561120857600080fd5b505afa15801561121c573d6000803e3d6000fd5b505050506040513d602081101561123257600080fd5b505161126f5760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b61128188888888888888886000612b20565b5050505050505050565b60086020908152600091825260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452909183018282801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b6007546001600160a01b031681565b6004805460408051633f9f3eff60e21b81526001600160a01b038581169482019490945290516060938493849391169163fe7cfbfc91602480820192600092909190829003018186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156113c857600080fd5b8101908080516040519392919084600160201b8211156113e757600080fd5b9083019060208201858111156113fc57600080fd5b82518660208202830111600160201b8211171561141857600080fd5b82525081516020918201928201910280838360005b8381101561144557818101518382015260200161142d565b50505050905001604052505050905060608151604051908082528060200260200182016040528015611481578160200160208202803883390190505b5090506000600560009054906101000a90046001600160a01b03166001600160a01b031663207638ad6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d60208110156114fe57600080fd5b505190506000805b84518110156116945760045485516000916001600160a01b03169063711acf869088908590811061153357fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b5051905060006115af828663ffffffff612abd16565b60055488519192506000916001600160a01b03909116906322133fdd908a90879081106115d857fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060606040518083038186803b15801561161457600080fd5b505afa158015611628573d6000803e3d6000fd5b505050506040513d606081101561163e57600080fd5b506020015190508015801561165257504282105b156116895787848151811061166357fe5b602002602001015187868151811061167757fe5b60209081029190910101526001909401935b505050600101611506565b50806040519080825280602002602001820160405280156116bf578160200160208202803883390190505b509550806040519080825280602002602001820160405280156116ec578160200160208202803883390190505b50945060005b818110156117a95783818151811061170657fe5b602002602001015187828151811061171a57fe5b6020026020010181815250508784828151811061173357fe5b602002602001015160405160200180806121a760f11b815250600201836001600160a01b03166001600160a01b031660601b8152601401828152602001925050506040516020818303038152906040528051906020012086828151811061179657fe5b60209081029190910101526001016116f2565b5050505050915091565b6001546001600160a01b031681565b600054604080516323c5b10760e21b815233600482015290516001600160a01b0390921691638f16c41c91602480820192602092909190829003018186803b15801561180d57600080fd5b505afa158015611821573d6000803e3d6000fd5b505050506040513d602081101561183757600080fd5b50516118745760405162461bcd60e51b8152600401808060200182810382526022815260200180613aa66022913960400191505060405180910390fd5b428686600381811061188257fe5b90506020020135116118db576040805162461bcd60e51b815260206004820152601c60248201527f51756f746174696f6e3a2051756f746520686173206578706972656400000000604482015290519081900360640190fd5b601e8461ffff16101580156118f6575061016d8461ffff1611155b6119315760405162461bcd60e51b8152600401808060200182810382526025815260200180613a126025913960400191505060405180910390fd5b600480546001600160a01b03169063922fd67f908890889081811061195257fe5b905060200201356040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d60208110156119b757600080fd5b505115611a0b576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a2051756f746520616c72656164792075736564000000604482015290519081900360640190fd5b600480546001600160a01b0316906383fa95859088908890818110611a2c57fe5b905060200201356040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b50505050611ac58686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508b91508c9050878787611f5e565b611b16576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a207369676e6174757265206d69736d61746368000000604482015290519081900360640190fd5b611b578989898989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250612ef6915050565b505050505050505050565b6000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b158015611bad57600080fd5b505afa158015611bc1573d6000803e3d6000fd5b505050506040513d6020811015611bd757600080fd5b5051611c23576040805162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba10309036b2b6b132b960511b604482015290519081900360640190fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d6020811015611c9a57600080fd5b505115611ce1576040805162461bcd60e51b815260206004820152601060248201526f14de5cdd195b481a5cc81c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03166379cc6790338a8a6002818110611d0057fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b505050506040513d6020811015611d8057600080fd5b5050604080516020898102828101820190935289825261128192339288928a928e918e9182918501908490808284376000920191909152508d92508a9150899050886001612b20565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310611e3b5780518252601f199092019160209182019101611e1c565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815284830180835281519184019190912060009182905282860180845281905260ff8d166060870152608086018c905260a086018b90529151919650945060019360c08082019450601f19830192918290030190855afa158015611eca573d6000803e3d6000fd5b505060408051601f1981015160048054633a34eba760e21b845293519195506001600160a01b03909316935063e8d3ae9c92808301926020929190829003018186803b158015611f1957600080fd5b505afa158015611f2d573d6000803e3d6000fd5b505050506040513d6020811015611f4357600080fd5b50516001600160a01b03908116911614979650505050505050565b60006001600160a01b038516611f7357600080fd5b6000611f81898989896124c9565b9050611f8f81868686611dc9565b9998505050505050505050565b6006546001600160a01b031681565b6000546040805163288c314960e21b815233600482015290516001600160a01b039092169163a230c52491602480820192602092909190829003018186803b158015611ff657600080fd5b505afa15801561200a573d6000803e3d6000fd5b505050506040513d602081101561202057600080fd5b505161206c576040805162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba10309036b2b6b132b960511b604482015290519081900360640190fd5b6000809054906101000a90046001600160a01b03166001600160a01b031663ff0938a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b957600080fd5b505afa1580156120cd573d6000803e3d6000fd5b505050506040513d60208110156120e357600080fd5b50511561212a576040805162461bcd60e51b815260206004820152601060248201526f14de5cdd195b481a5cc81c185d5cd95960821b604482015290519081900360640190fd5b82156121d7576005546001600160a01b03166379cc6790338d8d600281811061214f57fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156121a557600080fd5b505af11580156121b9573d6000803e3d6000fd5b505050506040513d60208110156121cf57600080fd5b506122d49050565b6208aa8960eb1b6001600160e01b0319891614156122d4578a8a60018181106121fc57fe5b9050602002013534146122405760405162461bcd60e51b815260040180806020018281038252602c815260200180613a58602c913960400191505060405180910390fd5b6002546040516000916001600160a01b03169034908381818185875af1925050503d806000811461228d576040519150601f19603f3d011682016040523d82523d6000602084013e612292565b606091505b50509050806122d25760405162461bcd60e51b81526004018080602001828103825260228152602001806139f06022913960400191505060405180910390fd5b505b61232633888a8e8e80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d8b8b8b8b612b20565b60006123b36001600460009054906101000a90046001600160a01b03166001600160a01b03166367157ff06040518163ffffffff1660e01b815260040160206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d60208110156123a557600080fd5b50519063ffffffff61371d16565b60008181526008602052604090209091506123cf9084846138f6565b50505050505050505050505050565b60008060606123ec84611335565b9150600090505b81518110156124c05760055482516000916001600160a01b031690635ca48d8c90889086908690811061242257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b031681526020018281526020019250505060206040518083038186803b15801561247757600080fd5b505afa15801561248b573d6000803e3d6000fd5b505050506040513d60208110156124a157600080fd5b505190506124b5848263ffffffff612abd16565b9350506001016123f3565b50909392505050565b6000846000815181106124d857fe5b6020026020010151838584886001815181106124f057fe5b60200260200101518960028151811061250557fe5b60200260200101518a60038151811061251a57fe5b60200260200101518b60048151811061252f57fe5b602090810291909101810151604080518084019a909a526001600160e01b0319989098168989015260f09690961b6001600160f01b0319166044890152606094851b6bffffffffffffffffffffffff19166046890152605a880193909352607a870191909152609a86015260ba85019290925230901b60da840152815180840360ce01815260ee909301909152815191012095945050505050565b6000546001600160a01b031615612627576000546001600160a01b03163314612627576040805162461bcd60e51b815260206004820152600a6024820152692737ba1036b0b9ba32b960b11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031681565b50565b6000546001600160a01b031681565b600480546040805163388d67c360e11b8152928301849052516000926001600160a01b039092169163711acf86916024808301926020929190829003018186803b1580156126b757600080fd5b505afa1580156126cb573d6000803e3d6000fd5b505050506040513d60208110156126e157600080fd5b505190504281106127235760405162461bcd60e51b81526004018080602001828103825260258152602001806139926025913960400191505060405180910390fd5b6004805460408051634b2cc0a160e01b8152928301859052516000926001600160a01b0390921691634b2cc0a1916024808301926020929190829003018186803b15801561277057600080fd5b505afa158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b505160ff16905060038114156127f7576040805162461bcd60e51b815260206004820181905260248201527f51756f746174696f6e3a20636f76657220616c72656164792065787069726564604482015290519081900360640190fd5b600554604080516322133fdd60e01b81526004810186905290516000926001600160a01b0316916322133fdd916024808301926060929190829003018186803b15801561284357600080fd5b505afa158015612857573d6000803e3d6000fd5b505050506040513d606081101561286d57600080fd5b5060200151905080156128b15760405162461bcd60e51b8152600401808060200182810382526022815260200180613a846022913960400191505060405180910390fd5b60018214612a4857600480546040805163df09fea760e01b815292830187905251600092839283926001600160a01b039091169163df09fea79160248083019260c0929190829003018186803b15801561290a57600080fd5b505afa15801561291e573d6000803e3d6000fd5b505050506040513d60c081101561293457600080fd5b5060408082015160608301516080909301516004805484516360a230e760e01b81526001600160e01b031987169281019290925260248201839052935192975093955093506001600160a01b03909116916360a230e791604480830192600092919082900301818387803b1580156129ab57600080fd5b505af11580156129bf573d6000803e3d6000fd5b505060048054604080516340ebb05760e11b81526001600160a01b03898116948201949094526001600160e01b0319881660248201526044810187905290519290911693506381d760ae925060648082019260009290919082900301818387803b158015612a2c57600080fd5b505af1158015612a40573d6000803e3d6000fd5b505050505050505b600480546040805163570e2f6560e11b815292830187905260036024840152516001600160a01b039091169163ae1c5eca91604480830192600092919082900301818387803b158015612a9a57600080fd5b505af1158015611281573d6000803e3d6000fd5b6005546001600160a01b031681565b600082820183811015612b17576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b4286600381518110612b2e57fe5b602002602001015111612b88576040805162461bcd60e51b815260206004820152601c60248201527f51756f746174696f6e3a2051756f746520686173206578706972656400000000604482015290519081900360640190fd5b601e8561ffff1610158015612ba3575061016d8561ffff1611155b612bde5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a126025913960400191505060405180910390fd5b6004805487516001600160a01b039091169163922fd67f918991908110612c0157fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612c3d57600080fd5b505afa158015612c51573d6000803e3d6000fd5b505050506040513d6020811015612c6757600080fd5b505115612cbb576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a2051756f746520616c72656164792075736564000000604482015290519081900360640190fd5b6004805487516001600160a01b03909116916383fa9585918991908110612cde57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d1c57600080fd5b505af1158015612d30573d6000803e3d6000fd5b50506001546040805163e3dee23960e01b81526001600160e01b03198c1660048201529051600094506001600160a01b03909216925063e3dee239916024808301926020929190829003018186803b158015612d8b57600080fd5b505afa158015612d9f573d6000803e3d6000fd5b505050506040513d6020811015612db557600080fd5b505190506208aa8960eb1b6001600160e01b0319891614801590612dd7575081155b15612e8d5760025487516001600160a01b039091169063d311afb49083908d908b906001908110612e0457fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015612e7457600080fd5b505af1158015612e88573d6000803e3d6000fd5b505050505b612e9c87878a8c898989611f5e565b612eed576040805162461bcd60e51b815260206004820152601d60248201527f51756f746174696f6e3a207369676e6174757265206d69736d61746368000000604482015290519081900360640190fd5b610ce98a8a8a8a8a5b6007546040805163f7480d3b60e01b81526001600160a01b0387811660048301529151600093929092169163f7480d3b91602480820192602092909190829003018186803b158015612f4757600080fd5b505afa158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b505190506001600160a01b03811615613053576001546040805163e3dee23960e01b81526001600160e01b03198716600482015290516000926001600160a01b03169163e3dee239916024808301926020929190829003018186803b158015612fd957600080fd5b505afa158015612fed573d6000803e3d6000fd5b505050506040513d602081101561300357600080fd5b505190506001600160a01b03808216908316146130515760405162461bcd60e51b8152600401808060200182810382526033815260200180613ac86033913960400191505060405180910390fd5b505b6000600460009054906101000a90046001600160a01b03166001600160a01b03166367157ff06040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a357600080fd5b505afa1580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b505160045485519192506001600160a01b031690638ce80a6590859087906000906130f457fe5b60200260200101518a898b8a60018151811061310c57fe5b60200260200101518b60028151811061312157fe5b60200260200101516040518863ffffffff1660e01b8152600401808861ffff1661ffff168152602001878152602001866001600160a01b03166001600160a01b03168152602001856001600160e01b0319166001600160e01b0319168152602001846001600160a01b03166001600160a01b03168152602001838152602001828152602001975050505050505050600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b50506004805460408051633ceac9b360e21b815290516000955061328b945060649361327f936001600160a01b03169263f3ab26cc9281830192602092829003018186803b15801561322e57600080fd5b505afa158015613242573d6000803e3d6000fd5b505050506040513d602081101561325857600080fd5b505188518990600290811061326957fe5b602002602001015161375f90919063ffffffff16565b9063ffffffff6137b816565b90506000600560009054906101000a90046001600160a01b03166001600160a01b031663207638ad6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132dd57600080fd5b505afa1580156132f1573d6000803e3d6000fd5b505050506040513d602081101561330757600080fd5b5051905060006133348261332861ffff89166201518063ffffffff61375f16565b9063ffffffff612abd16565b604080516121a760f11b60208083019190915260608e901b6bffffffffffffffffffffffff191660228301526036808301899052835180840390910181526056830180855281519190920120600654634e71865960e01b909252605a8301899052607a8301889052925193945091926001600160a01b0390921691634e71865991609a8082019260009290919082900301818387803b1580156133d657600080fd5b505af11580156133ea573d6000803e3d6000fd5b50505050600560009054906101000a90046001600160a01b03166001600160a01b031663c5facba28c8387866040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561347357600080fd5b505af1158015613487573d6000803e3d6000fd5b50506004548a516001600160a01b03909116925063a2c6bc2591508b908b906000906134af57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160e01b0319166001600160e01b031916815260200182815260200192505050600060405180830381600087803b15801561350857600080fd5b505af115801561351c573d6000803e3d6000fd5b50506004548a516001600160a01b039091169250633994b3d591508c908c908c9060009061354657fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160e01b0319166001600160e01b03191681526020018281526020019350505050600060405180830381600087803b1580156135b857600080fd5b505af11580156135cc573d6000803e3d6000fd5b505050506000886002815181106135df57fe5b602002602001015190506000600660009054906101000a90046001600160a01b03166001600160a01b031663e22648506040518163ffffffff1660e01b815260040160206040518083038186803b15801561363957600080fd5b505afa15801561364d573d6000803e3d6000fd5b505050506040513d602081101561366357600080fd5b50519050600061367e606461327f858563ffffffff61375f16565b9050600360009054906101000a90046001600160a01b03166001600160a01b031663f0f923c08e836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000612b1783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137fa565b60008261376e57506000612b1a565b8282028284828161377b57fe5b0414612b175760405162461bcd60e51b8152600401808060200182810382526021815260200180613a376021913960400191505060405180910390fd5b6000612b1783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613891565b600081848411156138895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561384e578181015183820152602001613836565b50505050905090810190601f16801561387b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836138e05760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561384e578181015183820152602001613836565b5060008385816138ec57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106139375782800160ff19823516178555613964565b82800160010185558215613964579182015b82811115613964578235825591602001919060010190613949565b50613970929150613974565b5090565b61398e91905b80821115613970576000815560010161397a565b9056fe51756f746174696f6e3a20636f766572206973206e6f742064756520746f2065787069726551756f746174696f6e3a2063616e6e6f74207769746864726177206265666f726520677261636520706572696f642065787069726174696f6e51756f746174696f6e3a205472616e7366657220746f20506f6f6c206661696c656451756f746174696f6e3a20436f76657220706572696f64206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7751756f746174696f6e3a2045544820616d6f756e7420646f6573206e6f74206d61746368207072656d69756d51756f746174696f6e3a20636f7665722068617320616e206f70656e20636c61696d43616c6c6572206973206e6f7420616e20696e7465726e616c20636f6e747261637451756f746174696f6e3a20556e737570706f7274656420636f76657220617373657420666f7220746869732070726f64756374a265627a7a723158206cf0b8c2d04bec4f1bac9cb1d61bbd757c4b9fab033b161c019af1b6e000343064736f6c63430005110032

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

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