Contract 0x637aeabc614e95da58f232e493fca63d09e15b8f 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x1768c76661cb5f6c88f87b04ba4af9f60595497dcf051c50517e160a18bd2ffbPublish Personal...332290242022-09-17 18:20:10136 days 16 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  0x637aeabc614e95da58f232e493fca63d09e15b8f0 MATIC0.0046573 50
0x59ae6575208cefa640e7407abf8046d3d4fe1edf93f7a27acd8e53a9681ea2c8Publish Verifica...283086362022-05-14 13:03:45262 days 21 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  0x637aeabc614e95da58f232e493fca63d09e15b8f0 MATIC0.004427022619 44.100000196
0x53e57675b576fc33090faec329fe5708c5b5a3325617bdc10cc0e0c57a5dada10x60806040283081832022-05-14 12:48:11262 days 21 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  Create: Verification0 MATIC0.0831993660
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Verification

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-14
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

contract Verification {
  address private _owner;
  address private signer;
  IERC20 private feeToken;
  uint private feeAmount;

  struct VerifiedPassport {
    uint expiration;
    bytes32 countryAndDocNumberHash;
  }

  struct PersonalDetails {
    bool over18;
    bool over21;
    uint countryCode;
  }

  mapping(address => VerifiedPassport) private accounts;
  mapping(address => PersonalDetails) private personalData;
  mapping(bytes32 => address) private idHashToAccount;
  mapping(address => uint) private hasPaidFee;

  event FeePaid(address indexed account);
  event VerificationUpdated(address indexed account, uint256 expiration);
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  event FeeTokenChanged(address indexed previousFeeToken, address indexed newFeeToken);
  event FeeAmountChanged(uint previousFeeAmount, uint newFeeAmount);
  event IsOver18(address indexed account);
  event IsOver21(address indexed account);
  event CountryOfOrigin(address indexed account, uint countryCode);

  constructor(address _signer, address _feeToken, uint _feeAmount) {
    require(_signer != address(0), "Signer must not be zero address");
    require(_feeToken != address(0), "Fee token must not be zero address");
    _transferOwnership(msg.sender);
    signer = _signer;
    feeToken = IERC20(_feeToken);
    feeAmount = _feeAmount;
  }

  function getFeeToken() external view returns (address) {
    return address(feeToken);
  }

  function getFeeAmount() external view returns (uint) {
    return feeAmount;
  }

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

  function payFeeFor(address account) public {
    emit FeePaid(account);
    hasPaidFee[account] = block.number;
    bool received = feeToken.transferFrom(msg.sender, address(this), feeAmount);
    require(received, "Fee transfer failed");
  }

  function payFee() external {
    payFeeFor(msg.sender);
  }

  function unsetPaidFee(address account) external onlyOwner {
    delete hasPaidFee[account];
  }

  function feePaidFor(address account) external view returns (uint) {
    return hasPaidFee[account];
  }

  function publishVerification(
    uint256 expiration,
    bytes32 countryAndDocNumberHash,
    bytes calldata signature
  ) external {
    // Signing server will only provide signature if fee has been paid,
    //  not necessary to require it here
    delete hasPaidFee[msg.sender];
    // Recreate hash as built by the client
    bytes32 hash = keccak256(abi.encode(msg.sender, expiration, countryAndDocNumberHash));
    (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);
    bytes32 ethSignedHash = keccak256(
      abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

    address sigAddr = ecrecover(ethSignedHash, v, r, s);
    require(sigAddr == signer, "Invalid Signature");

    // Revoke verification for any other account that uses
    //  the same document number/country
    //  e.g. for case of stolen keys
    if(idHashToAccount[countryAndDocNumberHash] != address(0x0)) {
      _revokeVerification(idHashToAccount[countryAndDocNumberHash]);
    }
    // Update account state
    idHashToAccount[countryAndDocNumberHash] = msg.sender;
    accounts[msg.sender] = VerifiedPassport(expiration, countryAndDocNumberHash);
    emit VerificationUpdated(msg.sender, expiration);
  }

  function revokeVerification() external {
    require(accounts[msg.sender].expiration > 0, "Account not verified");
    _revokeVerification(msg.sender);
  }

  function revokeVerificationOf(address account) external onlyOwner {
    require(accounts[account].expiration > 0, "Account not verified");
    _revokeVerification(account);
  }

  function _revokeVerification(address account) internal {
    // Do not need to delete from idHashToAccount since that data is
    //  not used for determining account status
    delete accounts[account];
    // Revoking the verification also redacts the personal data
    delete personalData[account];
    emit VerificationUpdated(account, 0);
  }

  function addressActive(address toCheck) public view returns (bool) {
    return accounts[toCheck].expiration > block.timestamp;
  }

  function addressExpiration(address toCheck) external view returns (uint) {
    return accounts[toCheck].expiration;
  }

  function addressIdHash(address toCheck) external view returns(bytes32) {
    return accounts[toCheck].countryAndDocNumberHash;
  }

  function publishPersonalData(
    bool over18,
    bytes calldata over18Signature,
    bool over21,
    bytes calldata over21Signature,
    uint countryCode,
    bytes calldata countrySignature
  ) external {
    require(addressActive(msg.sender), "Account must be active");
    if(over18Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over18 ? "over18" : "notOver18"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over18Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over18 = over18;
      if(over18) {
        emit IsOver18(msg.sender);
      }
    }
    if(over21Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over21 ? "over21" : "notOver21"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over21Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over21 = over21;
      if(over21) {
        emit IsOver21(msg.sender);
      }
    }
    if(countrySignature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, countryCode));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(countrySignature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].countryCode = countryCode;
      emit CountryOfOrigin(msg.sender, countryCode);
    }
  }

  function redactPersonalData() external {
    delete personalData[msg.sender];
  }

  function isOver18(address toCheck) external view returns (bool) {
    return personalData[toCheck].over18;
  }

  function isOver21(address toCheck) external view returns (bool) {
    return personalData[toCheck].over21;
  }

  function getCountryCode(address toCheck) external view returns (uint) {
    return personalData[toCheck].countryCode;
  }

  function setSigner(address newSigner) external onlyOwner {
    require(newSigner != address(0), "Signer cannot be zero address");
    signer = newSigner;
  }

  function setFeeToken(address newFeeToken) external onlyOwner {
    require(newFeeToken != address(0), "Fee Token cannot be zero address");
    address oldFeeToken = address(feeToken);
    feeToken = IERC20(newFeeToken);
    emit FeeTokenChanged(oldFeeToken, newFeeToken);
  }

  function setFeeAmount(uint newFeeAmount) external onlyOwner {
    uint oldFeeAmount = feeAmount;
    feeAmount = newFeeAmount;
    emit FeeAmountChanged(oldFeeAmount, newFeeAmount);
  }

  function _transferOwnership(address newOwner) internal {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }

  function transferOwnership(address newOwner) external onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function transferFeeToken(address recipient, uint amount) external onlyOwner {
    bool sent = feeToken.transfer(recipient, amount);
    require(sent, "Fee transfer failed");
  }

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

  // From https://solidity-by-example.org/signature/
  function splitSignature(bytes memory sig) internal pure
    returns (bytes32 r, bytes32 s, uint8 v)
  {
    require(sig.length == 65, "invalid signature length");
    assembly {
        // first 32 bytes, after the length prefix
        r := mload(add(sig, 32))
        // second 32 bytes
        s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
        v := byte(0, mload(add(sig, 96)))
    }
  }

}

interface IERC20 {
  function totalSupply() external view returns (uint);
  function balanceOf(address account) external view returns (uint);
  function transfer(address recipient, uint amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint);
  function approve(address spender, uint amount) external returns (bool);
  function transferFrom(
    address sender,
    address recipient,
    uint amount
  ) external returns (bool);

  event Transfer(address indexed from, address indexed to, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_feeToken","type":"address"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"countryCode","type":"uint256"}],"name":"CountryOfOrigin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousFeeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"FeeAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"FeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousFeeToken","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeToken","type":"address"}],"name":"FeeTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver18","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver21","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"VerificationUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressExpiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressIdHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feePaidFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"getCountryCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver18","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver21","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"payFeeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"over18","type":"bool"},{"internalType":"bytes","name":"over18Signature","type":"bytes"},{"internalType":"bool","name":"over21","type":"bool"},{"internalType":"bytes","name":"over21Signature","type":"bytes"},{"internalType":"uint256","name":"countryCode","type":"uint256"},{"internalType":"bytes","name":"countrySignature","type":"bytes"}],"name":"publishPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"countryAndDocNumberHash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"publishVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redactPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeVerificationOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"setFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeToken","type":"address"}],"name":"setFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unsetPaidFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200184b3803806200184b8339810160408190526200003491620001a4565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601f60248201527f5369676e6572206d757374206e6f74206265207a65726f20616464726573730060448201526064015b60405180910390fd5b6001600160a01b038216620000f35760405162461bcd60e51b815260206004820152602260248201527f46656520746f6b656e206d757374206e6f74206265207a65726f206164647265604482015261737360f01b606482015260840162000087565b620000fe3362000137565b600180546001600160a01b039485166001600160a01b0319918216179091556002805493909416921691909117909155600355620001e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019f57600080fd5b919050565b600080600060608486031215620001ba57600080fd5b620001c58462000187565b9250620001d56020850162000187565b9150604084015190509250925092565b61165680620001f56000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80636b392680116100c3578063c33dc9161161007c578063c33dc91614610341578063ca709a2514610349578063d79729301461035a578063f2fde38b1461036d578063fdb3200f14610380578063fe0c346c146103a957600080fd5b80636b392680146102a15780636c19e783146102b457806381ba6ce2146102c75780638691bdf5146102f35780638da5cb5b14610314578063bf5c98221461033957600080fd5b806318b8064f1161011557806318b8064f1461021c578063296102521461022f5780632e7d24d114610237578063447597cc1461024a5780634a529aad1461025d5780635b19acd91461028e57600080fd5b80621b428a146101515780630567763d146101665780630ac07226146101a557806315cce224146101e05780631616129d146101f3575b600080fd5b61016461015f36600461135e565b6103d5565b005b6101926101743660046113cd565b6001600160a01b031660009081526004602052604090206001015490565b6040519081526020015b60405180910390f35b6101d06101b33660046113cd565b6001600160a01b0316600090815260046020526040902054421090565b604051901515815260200161019c565b6101646101ee3660046113cd565b6105f1565b6101926102013660046113cd565b6001600160a01b031660009081526007602052604090205490565b61016461022a3660046113cd565b6106d2565b6101646107e5565b6101646102453660046113cd565b6107f0565b6101646102583660046113ef565b610891565b6101d061026b3660046113cd565b6001600160a01b0316600090815260056020526040902054610100900460ff1690565b61016461029c3660046113cd565b61098c565b6101646102af366004611419565b6109df565b6101646102c23660046113cd565b610a5d565b6101926102d53660046113cd565b6001600160a01b031660009081526005602052604090206001015490565b610164336000908152600560205260408120805461ffff1916815560010155565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b600354610192565b610164610b0e565b6002546001600160a01b0316610321565b610164610368366004611440565b610b6a565b61016461037b3660046113cd565b61113e565b61019261038e3660046113cd565b6001600160a01b031660009081526004602052604090205490565b6101d06103b73660046113cd565b6001600160a01b031660009081526005602052604090205460ff1690565b3360008181526007602090815260408083208390558051918201939093529182018690526060820185905290608001604051602081830303815290604052805190602001209050600080600061046086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610479919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156104e4573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506105295760405162461bcd60e51b81526004016105209061153e565b60405180910390fd5b6000898152600660205260409020546001600160a01b03161561056757600089815260066020526040902054610567906001600160a01b0316611259565b600089815260066020908152604080832080546001600160a01b03191633908117909155815180830183528e81528084018e8152828652600485529483902090518155935160019490940193909355518c81527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250505050505050505050565b336106046000546001600160a01b031690565b6001600160a01b03161461062a5760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166106805760405162461bcd60e51b815260206004820181905260248201527f46656520546f6b656e2063616e6e6f74206265207a65726f20616464726573736044820152606401610520565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1080b8de45190ac9d8745f3724225c9b50b849890e73595c4403edd52b94937090600090a35050565b6040516001600160a01b038216907fd6eb8f1fd49548df938b7af028bb8422b4f4c5e08343a426a0dbd647d08af5d790600090a26001600160a01b0381811660009081526007602052604080822043905560025460035491516323b872dd60e01b81523360048201523060248201526044810192909252919291909116906323b872dd906064016020604051808303816000875af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c919061159e565b9050806107e15760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b5050565b6107ee336106d2565b565b336108036000546001600160a01b031690565b6001600160a01b0316146108295760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166000908152600460205260409020546108855760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b61088e81611259565b50565b336108a46000546001600160a01b031690565b6001600160a01b0316146108ca5760405162461bcd60e51b815260040161052090611569565b60025460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610942919061159e565b9050806109875760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b505050565b3361099f6000546001600160a01b031690565b6001600160a01b0316146109c55760405162461bcd60e51b815260040161052090611569565b6001600160a01b0316600090815260076020526040812055565b336109f26000546001600160a01b031690565b6001600160a01b031614610a185760405162461bcd60e51b815260040161052090611569565b600380549082905560408051828152602081018490527f628999ddb8cc6bb99cec0350ca6e43277be4a15b13e849d3e532cada20effa82910160405180910390a15050565b33610a706000546001600160a01b031690565b6001600160a01b031614610a965760405162461bcd60e51b815260040161052090611569565b6001600160a01b038116610aec5760405162461bcd60e51b815260206004820152601d60248201527f5369676e65722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610520565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260046020526040902054610b615760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b6107ee33611259565b336000908152600460205260409020544210610bc15760405162461bcd60e51b81526020600482015260166024820152754163636f756e74206d7573742062652061637469766560501b6044820152606401610520565b6041879003610dbf576000338a610bf957604051806040016040528060098152602001680dcdee89eeccae462760bb1b815250610c19565b604051806040016040528060068152602001650deeccae462760d31b8152505b604051602001610c2a9291906115bb565b6040516020818303038152906040528051906020012090506000806000610c868c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610c9f919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d0a573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610d465760405162461bcd60e51b81526004016105209061153e565b8e60056000336001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508e15610db85760405133907f2aa4cbf8be8bf94e25edcb601f989fa2efb2fd98aa89b5df364b00a6b7de31d790600090a25b5050505050505b6041849003610fa25760003387610df757604051806040016040528060098152602001686e6f744f766572323160b81b815250610e17565b604051806040016040528060068152602001656f766572323160d01b8152505b604051602001610e289291906115bb565b6040516020818303038152906040528051906020012090506000806000610e8489898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610e9d919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610f08573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610f445760405162461bcd60e51b81526004016105209061153e565b33600090815260056020526040902080548d1580156101000261ff001990921691909117909155610f9b5760405133907f3e6e8b4440c2877b4ddd16c21023f8701e5ffdec53a22c19fee7778ac47fb82390600090a25b5050505050505b60418190036111335760408051336020820152908101849052600090606001604051602081830303815290604052805190602001209050600080600061101d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001611036919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156110a1573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506110dd5760405162461bcd60e51b81526004016105209061153e565b33600081815260056020526040908190206001018b9055517f237210580d7aea49bb2ba2a10d934288f4d26c3bc785d9ff382e764c4108555290611124908c815260200190565b60405180910390a25050505050505b505050505050505050565b336111516000546001600160a01b031690565b6001600160a01b0316146111775760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610520565b61088e816112c5565b6000806000835160411461123b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610520565b50505060208101516040820151606090920151909260009190911a90565b6001600160a01b0381166000818152600460209081526040808320838155600190810184905560058352818420805461ffff1916815501839055519182527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261132757600080fd5b50813567ffffffffffffffff81111561133f57600080fd5b60208301915083602082850101111561135757600080fd5b9250929050565b6000806000806060858703121561137457600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561139957600080fd5b6113a587828801611315565b95989497509550505050565b80356001600160a01b03811681146113c857600080fd5b919050565b6000602082840312156113df57600080fd5b6113e8826113b1565b9392505050565b6000806040838503121561140257600080fd5b61140b836113b1565b946020939093013593505050565b60006020828403121561142b57600080fd5b5035919050565b801515811461088e57600080fd5b600080600080600080600080600060c08a8c03121561145e57600080fd5b893561146981611432565b985060208a013567ffffffffffffffff8082111561148657600080fd5b6114928d838e01611315565b909a50985060408c013591506114a782611432565b90965060608b013590808211156114bd57600080fd5b6114c98d838e01611315565b909750955060808c0135945060a08c01359150808211156114e957600080fd5b506114f68c828d01611315565b915080935050809150509295985092959850929598565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b602080825260119082015270496e76616c6964205369676e617475726560781b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156115b057600080fd5b81516113e881611432565b60018060a01b038316815260006020604081840152835180604085015260005b818110156115f7578581018301518582016060015282016115db565b81811115611609576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220dd29d05c004982bbfef8de24287c489ef6da3bbfa4f1407bf734324a4ce07b9164736f6c634300080d0033000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa8417400000000000000000000000000000000000000000000000000000000002dc6c0

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

000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa8417400000000000000000000000000000000000000000000000000000000002dc6c0

-----Decoded View---------------
Arg [0] : _signer (address): 0xcd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : _feeToken (address): 0x2791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [2] : _feeAmount (uint256): 3000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [2] : 00000000000000000000000000000000000000000000000000000000002dc6c0


Deployed ByteCode Sourcemap

60:8785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:1233;;;;;;:::i;:::-;;:::i;:::-;;4500:132;;;;;;:::i;:::-;-1:-1:-1;;;;;4585:17:0;4562:7;4585:17;;;:8;:17;;;;;:41;;;;4500:132;;;;1431:25:1;;;1419:2;1404:18;4500:132:0;;;;;;;;4234:133;;;;;;:::i;:::-;-1:-1:-1;;;;;4315:17:0;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4315:46:0;4234:133;;;;1632:14:1;;1625:22;1607:41;;1595:2;1580:18;4234:133:0;1467:187:1;7197:280:0;;;;;;:::i;:::-;;:::i;2175:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2255:19:0;2235:4;2255:19;;;:10;:19;;;;;;;2175:105;1752:247;;;;;;:::i;:::-;;:::i;2005:61::-;;;:::i;3689:179::-;;;;;;:::i;:::-;;:::i;8044:181::-;;;;;;:::i;:::-;;:::i;6784:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6862:21:0;6842:4;6862:21;;;:12;:21;;;;;:28;;;;;;;6784:112;2072:97;;;;;;:::i;:::-;;:::i;7483:189::-;;;;;;:::i;:::-;;:::i;7031:160::-;;;;;;:::i;:::-;;:::i;6902:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6986:21:0;6966:4;6986:21;;;:12;:21;;;;;:33;;;;6902:123;6577:83;;6643:10;6630:24;;;;:12;:24;;;;;6623:31;;-1:-1:-1;;6623:31:0;;;;;;6577:83;1673:73;1711:7;1734:6;-1:-1:-1;;;;;1734:6:0;1673:73;;;-1:-1:-1;;;;;2449:32:1;;;2431:51;;2419:2;2404:18;1673:73:0;2285:203:1;1585:82:0;1652:9;;1585:82;;3525:158;;;:::i;1487:92::-;1564:8;;-1:-1:-1;;;;;1564:8:0;1487:92;;4638:1933;;;;;;:::i;:::-;;:::i;7853:185::-;;;;;;:::i;:::-;;:::i;4373:121::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4460:17:0;4440:4;4460:17;;;:8;:17;;;;;:28;;4373:121;6666:112;;;;;;:::i;:::-;-1:-1:-1;;;;;6744:21:0;6724:4;6744:21;;;:12;:21;;;;;:28;;;;6666:112;2286:1233;2563:10;2552:22;;;;:10;:22;;;;;;;;2545:29;;;2651:59;;;;;4162:51:1;;;;4229:18;;;4222:34;;;4272:18;;;4265:34;;;2552:22:0;4135:18:1;;2651:59:0;;;;;;;;;;;;2641:70;;;;;;2626:85;;2719:9;2730;2741:7;2752:25;2767:9;;2752:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2752:14:0;;-1:-1:-1;;;2752:25:0:i;:::-;2718:59;;;;;;2784:21;2879:4;2826:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2826:58:0;;;;;;;;;2808:77;;2826:58;2808:77;;;;2894:15;2912:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;2808:77:0;;-1:-1:-1;2894:15:0;2912:33;;4894:19:1;;2912:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2912:33:0;;-1:-1:-1;;2912:33:0;;2971:6;;2912:33;;-1:-1:-1;;;;;;2960:17:0;;;2971:6;;2960:17;;-1:-1:-1;2952:47:0;;;;-1:-1:-1;;;2952:47:0;;;;;;;:::i;:::-;;;;;;;;;3203:3;3151:40;;;:15;:40;;;;;;-1:-1:-1;;;;;3151:40:0;:56;3148:139;;3238:40;;;;:15;:40;;;;;;3218:61;;-1:-1:-1;;;;;3238:40:0;3218:19;:61::i;:::-;3322:40;;;;:15;:40;;;;;;;;:53;;-1:-1:-1;;;;;;3322:53:0;3365:10;3322:53;;;;;;3405;;;;;;;;;;;;;;;;3382:20;;;:8;:20;;;;;;:76;;;;;;-1:-1:-1;3382:76:0;;;;;;;;3470:43;1431:25:1;;;3470:43:0;;1404:18:1;3470:43:0;;;;;;;2423:1096;;;;;;2286:1233;;;;:::o;7197:280::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7273:25:0;::::1;7265:70;;;::::0;-1:-1:-1;;;7265:70:0;;6007:2:1;7265:70:0::1;::::0;::::1;5989:21:1::0;;;6026:18;;;6019:30;6085:34;6065:18;;;6058:62;6137:18;;7265:70:0::1;5805:356:1::0;7265:70:0::1;7372:8;::::0;;-1:-1:-1;;;;;7388:30:0;;::::1;-1:-1:-1::0;;;;;;7388:30:0;::::1;::::0;::::1;::::0;;;7430:41:::1;::::0;7372:8;::::1;::::0;7388:30;7372:8;;7430:41:::1;::::0;7342:19:::1;::::0;7430:41:::1;7258:219;7197:280:::0;:::o;1752:247::-;1807:16;;-1:-1:-1;;;;;1807:16:0;;;;;;;;-1:-1:-1;;;;;1830:19:0;;;;;;;:10;:19;;;;;;1852:12;1830:34;;1887:8;;1936:9;;1887:59;;-1:-1:-1;;;1887:59:0;;1909:10;1887:59;;;6406:34:1;1929:4:0;6456:18:1;;;6449:43;6508:18;;;6501:34;;;;1830:19:0;;1887:8;;;;;:21;;6341:18:1;;1887:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1871:75;;1961:8;1953:40;;;;-1:-1:-1;;;1953:40:0;;6998:2:1;1953:40:0;;;6980:21:1;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;1953:40:0;6796:343:1;1953:40:0;1795:204;1752:247;:::o;2005:61::-;2039:21;2049:10;2039:9;:21::i;:::-;2005:61::o;3689:179::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3770:17:0;::::1;3801:1;3770:17:::0;;;:8:::1;:17;::::0;;;;:28;3762:65:::1;;;::::0;-1:-1:-1;;;3762:65:0;;7346:2:1;3762:65:0::1;::::0;::::1;7328:21:1::0;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3762:65:0::1;7144:344:1::0;3762:65:0::1;3834:28;3854:7;3834:19;:28::i;:::-;3689:179:::0;:::o;8044:181::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;8140:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;8140:36:0;;-1:-1:-1;;;;;7685:32:1;;;8140:36:0::1;::::0;::::1;7667:51:1::0;7734:18;;;7727:34;;;8128:9:0::1;::::0;8140:8:::1;::::0;:17:::1;::::0;7640:18:1;;8140:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8128:48;;8191:4;8183:36;;;::::0;-1:-1:-1;;;8183:36:0;;6998:2:1;8183:36:0::1;::::0;::::1;6980:21:1::0;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;8183:36:0::1;6796:343:1::0;8183:36:0::1;8121:104;8044:181:::0;;:::o;2072:97::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2144:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;2137:26;2072:97::o;7483:189::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;7570:9:::1;::::0;;7586:24;;;;7622:44:::1;::::0;;7946:25:1;;;8002:2;7987:18;;7980:34;;;7622:44:0::1;::::0;7919:18:1;7622:44:0::1;;;;;;;7543:129;7483:189:::0;:::o;7031:160::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7103:23:0;::::1;7095:65;;;::::0;-1:-1:-1;;;7095:65:0;;8227:2:1;7095:65:0::1;::::0;::::1;8209:21:1::0;8266:2;8246:18;;;8239:30;8305:31;8285:18;;;8278:59;8354:18;;7095:65:0::1;8025:353:1::0;7095:65:0::1;7167:6;:18:::0;;-1:-1:-1;;;;;;7167:18:0::1;-1:-1:-1::0;;;;;7167:18:0;;;::::1;::::0;;;::::1;::::0;;7031:160::o;3525:158::-;3588:10;3613:1;3579:20;;;:8;:20;;;;;:31;3571:68;;;;-1:-1:-1;;;3571:68:0;;7346:2:1;3571:68:0;;;7328:21:1;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3571:68:0;7144:344:1;3571:68:0;3646:31;3666:10;3646:19;:31::i;4638:1933::-;4881:10;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4859:60:0;;;;-1:-1:-1;;;4859:60:0;;8585:2:1;4859:60:0;;;8567:21:1;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:52;8705:18;;4859:60:0;8383:346:1;4859:60:0;4955:2;4929:28;;;4926:549;;4968:12;5004:10;5016:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;4993:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4983:66;;;;;;4968:81;;5059:9;5070;5081:7;5092:31;5107:15;;5092:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5092:14:0;;-1:-1:-1;;;5092:31:0:i;:::-;5058:65;;;;;;5132:21;5229:4;5176:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5176:58:0;;;;;;;;;5156:79;;5176:58;5156:79;;;;5246:15;5264:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5156:79:0;;-1:-1:-1;5246:15:0;5264:33;;4894:19:1;;5264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5264:33:0;;-1:-1:-1;;5264:33:0;;5325:6;;5264:33;;-1:-1:-1;;;;;;5314:17:0;;;5325:6;;5314:17;;-1:-1:-1;5306:47:0;;;;-1:-1:-1;;;5306:47:0;;;;;;;:::i;:::-;5396:6;5362:12;:24;5375:10;-1:-1:-1;;;;;5362:24:0;-1:-1:-1;;;;;5362:24:0;;;;;;;;;;;;:31;;;:40;;;;;;;;;;;;;;;;;;5414:6;5411:57;;;5438:20;;5447:10;;5438:20;;;;;5411:57;4959:516;;;;;;4926:549;5510:2;5484:28;;;5481:549;;5523:12;5559:10;5571:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;5548:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5538:66;;;;;;5523:81;;5614:9;5625;5636:7;5647:31;5662:15;;5647:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5647:14:0;;-1:-1:-1;;;5647:31:0:i;:::-;5613:65;;;;;;5687:21;5784:4;5731:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5731:58:0;;;;;;;;;5711:79;;5731:58;5711:79;;;;5801:15;5819:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5711:79:0;;-1:-1:-1;5801:15:0;5819:33;;4894:19:1;;5819:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5819:33:0;;-1:-1:-1;;5819:33:0;;5880:6;;5819:33;;-1:-1:-1;;;;;;5869:17:0;;;5880:6;;5869:17;;-1:-1:-1;5861:47:0;;;;-1:-1:-1;;;5861:47:0;;;;;;;:::i;:::-;5930:10;5917:24;;;;:12;:24;;;;;:40;;;;;;;;-1:-1:-1;;5917:40:0;;;;;;;;;;5966:57;;5993:20;;6002:10;;5993:20;;;;;5966:57;5514:516;;;;;;5481:549;6066:2;6039:29;;;6036:530;;6104:35;;;6115:10;6104:35;;;7667:51:1;7734:18;;;7727:34;;;6079:12:0;;7640:18:1;;6104:35:0;;;;;;;;;;;;6094:46;;;;;;6079:61;;6150:9;6161;6172:7;6183:32;6198:16;;6183:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6183:14:0;;-1:-1:-1;;;6183:32:0:i;:::-;6149:66;;;;;;6224:21;6321:4;6268:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6268:58:0;;;;;;;;;6248:79;;6268:58;6248:79;;;;6338:15;6356:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;6248:79:0;;-1:-1:-1;6338:15:0;6356:33;;4894:19:1;;6356:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6356:33:0;;-1:-1:-1;;6356:33:0;;6417:6;;6356:33;;-1:-1:-1;;;;;;6406:17:0;;;6417:6;;6406:17;;-1:-1:-1;6398:47:0;;;;-1:-1:-1;;;6398:47:0;;;;;;;:::i;:::-;6467:10;6454:24;;;;:12;:24;;;;;;;:36;;:50;;;6518:40;;;;;6493:11;1431:25:1;;1419:2;1404:18;;1285:177;6518:40:0;;;;;;;;6070:496;;;;;;6036:530;4638:1933;;;;;;;;;:::o;7853:185::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7932:22:0;::::1;7924:73;;;::::0;-1:-1:-1;;;7924:73:0;;9635:2:1;7924:73:0::1;::::0;::::1;9617:21:1::0;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:36;9810:19;;7924:73:0::1;9433:402:1::0;7924:73:0::1;8004:28;8023:8;8004:18;:28::i;8399:441::-:0;8469:9;8480;8491:7;8518:3;:10;8532:2;8518:16;8510:53;;;;-1:-1:-1;;;8510:53:0;;10042:2:1;8510:53:0;;;10024:21:1;10081:2;10061:18;;;10054:30;10120:26;10100:18;;;10093:54;10164:18;;8510:53:0;9840:348:1;8510:53:0;-1:-1:-1;;;8662:2:0;8653:12;;8647:19;8724:2;8715:12;;8709:19;8823:2;8814:12;;;8808:19;8647;;8805:1;8800:28;;;;;8399:441::o;3874:354::-;-1:-1:-1;;;;;4062:17:0;;;;;;:8;:17;;;;;;;;4055:24;;;;;;;;;;4158:12;:21;;;;;4151:28;;-1:-1:-1;;4151:28:0;;;;;;;4191:31;1431:25:1;;;4191:31:0;;1404:18:1;4191:31:0;;;;;;;3874:354;:::o;7678:169::-;7740:16;7759:6;;-1:-1:-1;;;;;7772:17:0;;;-1:-1:-1;;;;;;7772:17:0;;;;;;7801:40;;7759:6;;;;;;;7801:40;;7740:16;7801:40;7733:114;7678:169;:::o;14:347:1:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:545::-;454:6;462;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;583:9;570:23;560:33;;640:2;629:9;625:18;612:32;602:42;;695:2;684:9;680:18;667:32;722:18;714:6;711:30;708:50;;;754:1;751;744:12;708:50;793:58;843:7;834:6;823:9;819:22;793:58;:::i;:::-;366:545;;;;-1:-1:-1;870:8:1;-1:-1:-1;;;;366:545:1:o;916:173::-;984:20;;-1:-1:-1;;;;;1033:31:1;;1023:42;;1013:70;;1079:1;1076;1069:12;1013:70;916:173;;;:::o;1094:186::-;1153:6;1206:2;1194:9;1185:7;1181:23;1177:32;1174:52;;;1222:1;1219;1212:12;1174:52;1245:29;1264:9;1245:29;:::i;:::-;1235:39;1094:186;-1:-1:-1;;;1094:186:1:o;1841:254::-;1909:6;1917;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:29;2028:9;2009:29;:::i;:::-;1999:39;2085:2;2070:18;;;;2057:32;;-1:-1:-1;;;1841:254:1:o;2100:180::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;-1:-1:-1;2251:23:1;;2100:180;-1:-1:-1;2100:180:1:o;2493:118::-;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2616:1339;2747:6;2755;2763;2771;2779;2787;2795;2803;2811;2864:3;2852:9;2843:7;2839:23;2835:33;2832:53;;;2881:1;2878;2871:12;2832:53;2920:9;2907:23;2939:28;2961:5;2939:28;:::i;:::-;2986:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3065:18;3095:14;;;3092:34;;;3122:1;3119;3112:12;3092:34;3161:58;3211:7;3202:6;3191:9;3187:22;3161:58;:::i;:::-;3238:8;;-1:-1:-1;3135:84:1;-1:-1:-1;3325:2:1;3310:18;;3297:32;;-1:-1:-1;3338:30:1;3297:32;3338:30;:::i;:::-;3387:7;;-1:-1:-1;3447:2:1;3432:18;;3419:32;;3463:16;;;3460:36;;;3492:1;3489;3482:12;3460:36;3531:60;3583:7;3572:8;3561:9;3557:24;3531:60;:::i;:::-;3610:8;;-1:-1:-1;3505:86:1;-1:-1:-1;3692:3:1;3677:19;;3664:33;;-1:-1:-1;3750:3:1;3735:19;;3722:33;;-1:-1:-1;3767:16:1;;;3764:36;;;3796:1;3793;3786:12;3764:36;;3835:60;3887:7;3876:8;3865:9;3861:24;3835:60;:::i;:::-;3809:86;;3914:8;3904:18;;;3941:8;3931:18;;;2616:1339;;;;;;;;;;;:::o;4310:380::-;4552:66;4540:79;;4644:2;4635:12;;4628:28;;;;4681:2;4672:12;;4310:380::o;5098:341::-;5300:2;5282:21;;;5339:2;5319:18;;;5312:30;-1:-1:-1;;;5373:2:1;5358:18;;5351:47;5430:2;5415:18;;5098:341::o;5444:356::-;5646:2;5628:21;;;5665:18;;;5658:30;5724:34;5719:2;5704:18;;5697:62;5791:2;5776:18;;5444:356::o;6546:245::-;6613:6;6666:2;6654:9;6645:7;6641:23;6637:32;6634:52;;;6682:1;6679;6672:12;6634:52;6714:9;6708:16;6733:28;6755:5;6733:28;:::i;8734:694::-;8940:1;8936;8931:3;8927:11;8923:19;8915:6;8911:32;8900:9;8893:51;8874:4;8963:2;9001;8996;8985:9;8981:18;8974:30;9033:6;9027:13;9076:6;9071:2;9060:9;9056:18;9049:34;9101:1;9111:140;9125:6;9122:1;9119:13;9111:140;;;9220:14;;;9216:23;;9210:30;9186:17;;;9205:2;9182:26;9175:66;9140:10;;9111:140;;;9269:6;9266:1;9263:13;9260:91;;;9339:1;9334:2;9325:6;9314:9;9310:22;9306:31;9299:42;9260:91;-1:-1:-1;9412:2:1;9391:15;-1:-1:-1;;9387:29:1;9372:45;;;;9419:2;9368:54;;8734:694;-1:-1:-1;;;;8734:694:1:o

Swarm Source

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