Contract 0x7d655c57f71464B6f83811C55D84009Cd9f5221C 12

 
Txn Hash Method
Block
From
To
Value
0x258b9356ff9826681afef7754fe81366250c77e79dacf62f1537a3171fc0557b0x9120491c(pending)2021-10-26 15:26:303 hrs 32 mins ago0x9207b27514f6fe86bfc342fd0f3b5e89b91a31da IN Gitcoin: Bulk Checkout0.0003465 Ether(Pending)(Pending)
0x1575b67deae43a20cce85fae94add55575942fc97fcf1e2b54561bdde83dc6d10x9120491c(pending)2021-10-25 19:29:3123 hrs 29 mins ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.0003591 Ether(Pending)(Pending)
0x90d285aafd22101dca02d529c5c7d76546a291780e133275f8030466311f78390x9120491c(pending)2021-10-25 19:29:3123 hrs 29 mins ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.0003591 Ether(Pending)(Pending)
0x0f09c1c0021779b87a69537e39fbd723b79ca78a4a0f3fd61d6b8975bc0d82d30x9120491c(pending)2021-10-25 19:29:3123 hrs 29 mins ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.000315 Ether(Pending)(Pending)
0xe4506f90c102c5a44382d9b03c7f73ca28d5a24d9627b534f64364bac3b1d8c70x9120491c(pending)2021-10-25 19:29:3123 hrs 29 mins ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.000315 Ether(Pending)(Pending)
0xdd1e0bd70fc3e0d81caf885edd982cdfb32ad09862d6be20803a837b53911d330x9120491c(pending)2021-10-24 11:59:102 days 7 hrs ago0x6926e6e4e131b20800c0310b48e7247a6a508fcc IN Gitcoin: Bulk Checkout0 Ether(Pending)(Pending)
0x0e763929132f8d8a8274196e8e7408d0280ed3b8dec5e9d96783b8e0cce279a10x9120491c(pending)2021-10-24 8:01:052 days 10 hrs ago0xd8a0f449e46942ac38e4dd932fe9db8fc3cff6fe IN Gitcoin: Bulk Checkout0.00476385 Ether(Pending)(Pending)
0xef7a1fe6f73674d6e41225dfa21ec30409562ab2ed6365a5839ba0fe2c2804a60x9120491c(pending)2021-10-24 6:01:332 days 12 hrs ago0xc6bc0362c7afae83411afb08dc2a1419250d90f3 IN Gitcoin: Bulk Checkout0.0025368 Ether(Pending)(Pending)
0x32358b78fa498abb32674b862d740f2aa29ab2dd51bd104f9ab8d65e7221d74c0x9120491c(pending)2021-10-24 5:52:192 days 13 hrs ago0x031df1ff630082802cd6a4756c114e30528b6c9d IN Gitcoin: Bulk Checkout0.0006 Ether(Pending)(Pending)
0x2991a84c4a6f2b196e042717bffe1bc9b66f9678c4889fe7d8a52b4dde2894a10x9120491c(pending)2021-10-24 5:39:502 days 13 hrs ago0xd989557da1ea8d75b6688f1b541623b29a79ff4b IN Gitcoin: Bulk Checkout0.000525 Ether(Pending)(Pending)
0xfe9c9a0e12d3c7906fa991bdc3d2bfe7292486df93a26af9a1ab0f8f5628b9280x9120491c(pending)2021-10-24 3:35:502 days 15 hrs ago0x9207b27514f6fe86bfc342fd0f3b5e89b91a31da IN Gitcoin: Bulk Checkout0.000525 Ether(Pending)(Pending)
0x976f329a2e69cefd6af5760e7241d94bde2ae8826e0b4843b041c46364b30e030x9120491c(pending)2021-10-24 3:22:412 days 15 hrs ago0xd8a0f449e46942ac38e4dd932fe9db8fc3cff6fe IN Gitcoin: Bulk Checkout0.0029316 Ether(Pending)(Pending)
0xcd2b71080fb32db90a0c3e04e0e067374f00ace328ae797148a5c1bb3dfab6e10x9120491c(pending)2021-10-24 2:59:562 days 15 hrs ago0x63466393a5590be4932712b4f5389f1fbed67f28 IN Gitcoin: Bulk Checkout0.0021 Ether(Pending)(Pending)
0x5b7de6c2654dab9d1078fcb7de7c7af66305a85cd86938eb88bd9946c6e8fcbd0x9120491c(pending)2021-10-24 2:51:072 days 16 hrs ago0xb4b38fbb72bcb2686202a9746c19521c24f0f35d IN Gitcoin: Bulk Checkout0.000315 Ether(Pending)(Pending)
0xe6144156f44c1c5244343fc98e5b62d82b4ce141937ad059bc28d4af1d89e3d00x9120491c(pending)2021-10-24 2:27:132 days 16 hrs ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.0003066 Ether(Pending)(Pending)
0xce2654c3e0afc12ccf0b5a3cdfda21218a2f2f7f8de78da0add62e930a6d27cb0x9120491c(pending)2021-10-24 2:27:132 days 16 hrs ago0x067cc134c7439f9be72443c8a52c87021cd744fb IN Gitcoin: Bulk Checkout0.000315 Ether(Pending)(Pending)
0xb1afa9bac8bd58b740d56ae56816d54c6eb31091a9236cc3da5a4b1b6e16b6980x9120491c(pending)2021-10-24 2:10:402 days 16 hrs ago0x65e3a2a47ad6d22064110ffea84d5ad212e32b99 IN Gitcoin: Bulk Checkout0.0003024 Ether(Pending)(Pending)
0xf72495e3e45f9cd69b620f18dae65b4af988dec019c53ec461ddfc07f5cd87f00x9120491c(pending)2021-10-24 1:59:332 days 16 hrs ago0xb8d6f0d29208f7069f297809643ed840ec8869d9 IN Gitcoin: Bulk Checkout0 Ether(Pending)(Pending)
0x3bd91ab3380ced4c9c4d5c0f72360a038a8901b772e6c739bee10dd4b4f2f4720x9120491c(pending)2021-10-24 1:51:142 days 17 hrs ago0x8e3a1a75b1f4c4fe56115c071b076cccd967f432 IN Gitcoin: Bulk Checkout0.000588 Ether(Pending)(Pending)
0x64865c80c237b566074672d28f5d6ce1802571b9797b827aeda8d7105b4b93b10x9120491c(pending)2021-10-24 1:48:132 days 17 hrs ago0x100229388d16d789e31f6e08e7d795369554e1d0 IN Gitcoin: Bulk Checkout0 Ether(Pending)(Pending)
0xc7c69bd5dca14f1c27ece1ed477055a5bf272d4134871cd6e0eb3ddc5ec487e50x9120491c(pending)2021-10-24 1:48:062 days 17 hrs ago0x982289f567f7d7f768afff5699251a73ddb3efc9 IN Gitcoin: Bulk Checkout0.025 Ether(Pending)(Pending)
0x2934d95642d9065ee3ec1fa7948853cd0a0f3800264287368ea06bdea6c891720x9120491c(pending)2021-10-17 2:50:259 days 16 hrs ago0x6d86ce8e3fa7471603d548dd0bb9998a0b2e5738 IN Gitcoin: Bulk Checkout0.000315 Ether(Pending)(Pending)
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b0x9120491c134935602021-10-26 14:36:314 hrs 22 mins ago0x9a568bfeb8cb19e4bafcb57ee69498d57d9591ca IN  Gitcoin: Bulk Checkout0.525 Ether0.015511779817 127.114478548
0xdc1e0051ee27d356e2b9ed7a918ec015a5687abcc0b534aa5e03e89cc10b582a0x9120491c134856162021-10-25 8:48:391 day 10 hrs ago0x7ef8e57bddca0e852cfc74e484745620409ab883 IN  Gitcoin: Bulk Checkout0 Ether0.004537457782 51.319419361
0x0d89cffc5d557f9afa1dc0cf5b4c4dd8c1d7d00e9c94f88a5513cd6e2af4a84a0x9120491c134802752021-10-24 12:43:382 days 6 hrs agoENS Name kitteh.eth IN  Gitcoin: Bulk Checkout0.95 Ether0.0021438239 47.806259488
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.025 Ether
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk CheckoutGitcoin Grants: ethers.js0.1 Ether
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk CheckoutGitcoin Grants: Tenderly0.1 Ether
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk CheckoutGitcoin Grants: Buidler.dev0.1 Ether
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk Checkout scaffold-eth0.1 Ether
0xa63595cce2bbcbfdecb596622b24aa68aa55a41c70e9a09e6e2d947fc7cb399b134935602021-10-26 14:36:314 hrs 22 mins ago Gitcoin: Bulk Checkout0x6e1a86826e3bfec941b947a7dc05c4c718425a610.1 Ether
0x0d89cffc5d557f9afa1dc0cf5b4c4dd8c1d7d00e9c94f88a5513cd6e2af4a84a134802752021-10-24 12:43:382 days 6 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.95 Ether
0x6972537b440dd218a62ee8e6f14a6a37cddb1722251713d89a5a3937a73f7953134683012021-10-22 15:50:474 days 3 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.0015 Ether
0x6972537b440dd218a62ee8e6f14a6a37cddb1722251713d89a5a3937a73f7953134683012021-10-22 15:50:474 days 3 hrs ago Gitcoin: Bulk Checkout0x8932eb23bad9bddb5cf81426f78279a53c6c3b710.03 Ether
0xf8e89b2a57d425e1931cc0cf36e990df47d76c4518c9d682553129f170957afd134616792021-10-21 14:54:345 days 4 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.000075 Ether
0xf8e89b2a57d425e1931cc0cf36e990df47d76c4518c9d682553129f170957afd134616792021-10-21 14:54:345 days 4 hrs ago Gitcoin: Bulk Checkout Rekt DAO: Donate0.0025 Ether
0x1fe9184a3b48a685bbb8df65728392a303937999b7a7f6359ae1858979beffdb134544632021-10-20 11:56:066 days 7 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.005 Ether
0x1fe9184a3b48a685bbb8df65728392a303937999b7a7f6359ae1858979beffdb134544632021-10-20 11:56:066 days 7 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.1 Ether
0xdaed1ab097a13fc701dbc51fc60baee982083af9b4ce2991be18235e622f4e49134426572021-10-18 15:39:168 days 3 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.000025 Ether
0xdaed1ab097a13fc701dbc51fc60baee982083af9b4ce2991be18235e622f4e49134426572021-10-18 15:39:168 days 3 hrs ago Gitcoin: Bulk Checkout0xfd15b3d113200951b35cf0f0edf63c7f5925705f0.0005 Ether
0x8527399ff9a699702654c89c404dbf5b0320123a29f39fd9b7526b8533e4a163134419102021-10-18 12:49:558 days 6 hrs ago Gitcoin: Bulk CheckoutRSS3: Deployer0.0005 Ether
0x8527399ff9a699702654c89c404dbf5b0320123a29f39fd9b7526b8533e4a163134419102021-10-18 12:49:558 days 6 hrs ago Gitcoin: Bulk Checkout0x532fb5d00f40ced99b16d1e295c77cda2eb1bb4f0.0005 Ether
0xc037a7b5e6dc05b74d6523a0d28695453ae098a966f3c83ee65c86861c3b9fc9134298282021-10-16 15:29:4510 days 3 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.001 Ether
0xc037a7b5e6dc05b74d6523a0d28695453ae098a966f3c83ee65c86861c3b9fc9134298282021-10-16 15:29:4510 days 3 hrs ago Gitcoin: Bulk CheckoutPOAP: Gitcoin Grant Address0.01 Ether
0xc037a7b5e6dc05b74d6523a0d28695453ae098a966f3c83ee65c86861c3b9fc9134298282021-10-16 15:29:4510 days 3 hrs ago Gitcoin: Bulk Checkout0xb57b8bbfe2b3d3874c9300a95c7587dc341111e70.01 Ether
0x5b0111a47d78f4393a5f9bca7d09b81c96fab1e737d0d97d21d74d46df050f9d134210352021-10-15 6:30:1111 days 12 hrs ago Gitcoin: Bulk Checkout 0x037e414abacc799a598314153509b6b967608bf90.001 Ether
0xa262c71eb905ff5ab6da66134826c5f6d90af8db7b406f84ef4ac725d574749c134137622021-10-14 2:42:5112 days 16 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.00001385 Ether
0xa262c71eb905ff5ab6da66134826c5f6d90af8db7b406f84ef4ac725d574749c134137622021-10-14 2:42:5112 days 16 hrs ago Gitcoin: Bulk CheckoutRSS3: Deployer0.000277 Ether
0x0c59cd1b7ff4251d2a26aae2bcc54f8381f363ceb8974d99de8d53bb768e3d69134047212021-10-12 16:27:4814 days 2 hrs ago Gitcoin: Bulk Checkout Gitcoin: MultiSig0.00025 Ether
0x0c59cd1b7ff4251d2a26aae2bcc54f8381f363ceb8974d99de8d53bb768e3d69134047212021-10-12 16:27:4814 days 2 hrs ago Gitcoin: Bulk CheckoutGitcoin Grants: Connext Network0.005 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BulkCheckout

Compiler Version
v0.6.7+commit.b8d736ae

Optimization Enabled:
No with 200 runs

Other Settings:
petersburg EvmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-06-11
*/

pragma solidity ^0.6.2;
pragma experimental ABIEncoderV2;


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


contract Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor() internal {}

  function _msgSender() internal virtual view returns (address payable) {
    return msg.sender;
  }

  function _msgData() internal virtual view returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}


contract Pausable is Context {
  /**
   * @dev Emitted when the pause is triggered by `account`.
   */
  event Paused(address account);

  /**
   * @dev Emitted when the pause is lifted by `account`.
   */
  event Unpaused(address account);

  bool private _paused;

  /**
   * @dev Initializes the contract in unpaused state.
   */
  constructor() internal {
    _paused = false;
  }

  /**
   * @dev Returns true if the contract is paused, and false otherwise.
   */
  function paused() public view returns (bool) {
    return _paused;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!_paused, "Pausable: paused");
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(_paused, "Pausable: not paused");
    _;
  }

  /**
   * @dev Triggers stopped state.
   */
  function _pause() internal virtual whenNotPaused {
    _paused = true;
    emit Paused(_msgSender());
  }

  /**
   * @dev Returns to normal state.
   */
  function _unpause() internal virtual whenPaused {
    _paused = false;
    emit Unpaused(_msgSender());
  }
}


contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor() internal {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Leaves the contract without owner. It will not be possible to call
   * `onlyOwner` functions anymore. Can only be called by the current owner.
   *
   * NOTE: Renouncing ownership will leave the contract without an owner,
   * thereby removing any functionality that is only available to the owner.
   */
  function renounceOwnership() public virtual onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}


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


library Address {
  /**
   * @dev Returns true if `account` is a contract.
   *
   * [IMPORTANT]
   * ====
   * It is unsafe to assume that an address for which this function returns
   * false is an externally-owned account (EOA) and not a contract.
   *
   * Among others, `isContract` will return false for the following
   * types of addresses:
   *
   *  - an externally-owned account
   *  - a contract in construction
   *  - an address where a contract will be created
   *  - an address where a contract lived, but was destroyed
   * ====
   */
  function isContract(address account) internal view returns (bool) {
    // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
    // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
    // for accounts without code, i.e. `keccak256('')`
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    // solhint-disable-next-line no-inline-assembly
    assembly {
      codehash := extcodehash(account)
    }
    return (codehash != accountHash && codehash != 0x0);
  }

  /**
   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
   * `recipient`, forwarding all available gas and reverting on errors.
   *
   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
   * of certain opcodes, possibly making contracts go over the 2300 gas limit
   * imposed by `transfer`, making them unable to receive funds via
   * `transfer`. {sendValue} removes this limitation.
   *
   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
   *
   * IMPORTANT: because control is transferred to `recipient`, care must be
   * taken to not create reentrancy vulnerabilities. Consider using
   * {ReentrancyGuard} or the
   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
   */
  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

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


library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

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

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

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

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

    return c;
  }

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

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    // 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.
   */
  function mod(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}


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

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

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

  function safeApprove(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    // safeApprove should only be called when setting an initial allowance,
    // or when resetting it to zero. To increase and decrease it, use
    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
    // solhint-disable-next-line max-line-length
    require(
      (value == 0) || (token.allowance(address(this), spender) == 0),
      "SafeERC20: approve from non-zero to non-zero allowance"
    );
    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
  }

  function safeIncreaseAllowance(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    uint256 newAllowance = token.allowance(address(this), spender).add(value);
    _callOptionalReturn(
      token,
      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)
    );
  }

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

  /**
   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
   * on the return value: the return value is optional (but if data is returned, it must not be false).
   * @param token The token targeted by the call.
   * @param data The call data (encoded using abi.encode or one of its variants).
   */
  function _callOptionalReturn(IERC20 token, bytes memory data) private {
    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
    // we're implementing it ourselves.

    // A Solidity high level call has three parts:
    //  1. The target address is checked to verify it contains contract code
    //  2. The call itself is made, and success asserted
    //  3. The return value is decoded, which in turn checks the size of the returned data.
    // solhint-disable-next-line max-line-length
    require(address(token).isContract(), "SafeERC20: call to non-contract");

    // solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returndata) = address(token).call(data);
    require(success, "SafeERC20: low-level call failed");

    if (returndata.length > 0) {
      // Return data is optional
      // solhint-disable-next-line max-line-length
      require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }
  }
}


contract BulkCheckout is Ownable, Pausable, ReentrancyGuard {
  using Address for address payable;
  using SafeMath for uint256;
  /**
   * @notice Placeholder token address for ETH donations. This address is used in various other
   * projects as a stand-in for ETH
   */
  address constant ETH_TOKEN_PLACHOLDER = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

  /**
   * @notice Required parameters for each donation
   */
  struct Donation {
    address token; // address of the token to donate
    uint256 amount; // amount of tokens to donate
    address payable dest; // grant address
  }

  /**
   * @dev Emitted on each donation
   */
  event DonationSent(
    address indexed token,
    uint256 indexed amount,
    address dest,
    address indexed donor
  );

  /**
   * @dev Emitted when a token or ETH is withdrawn from the contract
   */
  event TokenWithdrawn(address indexed token, uint256 indexed amount, address indexed dest);

  /**
   * @notice Bulk gitcoin grant donations
   * @dev We assume all token approvals were already executed
   * @param _donations Array of donation structs
   */
  function donate(Donation[] calldata _donations) external payable nonReentrant whenNotPaused {
    // We track total ETH donations to ensure msg.value is exactly correct
    uint256 _ethDonationTotal = 0;

    for (uint256 i = 0; i < _donations.length; i++) {
      emit DonationSent(_donations[i].token, _donations[i].amount, _donations[i].dest, msg.sender);
      if (_donations[i].token != ETH_TOKEN_PLACHOLDER) {
        // Token donation
        // This method throws on failure, so there is no return value to check
        SafeERC20.safeTransferFrom(
          IERC20(_donations[i].token),
          msg.sender,
          _donations[i].dest,
          _donations[i].amount
        );
      } else {
        // ETH donation
        // See comments in Address.sol for why we use sendValue over transer
        _donations[i].dest.sendValue(_donations[i].amount);
        _ethDonationTotal = _ethDonationTotal.add(_donations[i].amount);
      }
    }

    // Revert if the wrong amount of ETH was sent
    require(msg.value == _ethDonationTotal, "BulkCheckout: Too much ETH sent");
  }

  /**
   * @notice Transfers all tokens of the input adress to the recipient. This is
   * useful tokens are accidentally sent to this contrasct
   * @param _tokenAddress address of token to send
   * @param _dest destination address to send tokens to
   */
  function withdrawToken(address _tokenAddress, address _dest) external onlyOwner {
    uint256 _balance = IERC20(_tokenAddress).balanceOf(address(this));
    emit TokenWithdrawn(_tokenAddress, _balance, _dest);
    SafeERC20.safeTransfer(IERC20(_tokenAddress), _dest, _balance);
  }

  /**
   * @notice Transfers all Ether to the specified address
   * @param _dest destination address to send ETH to
   */
  function withdrawEther(address payable _dest) external onlyOwner {
    uint256 _balance = address(this).balance;
    emit TokenWithdrawn(ETH_TOKEN_PLACHOLDER, _balance, _dest);
    _dest.sendValue(_balance);
  }

  /**
   * @notice Pause contract
   */
  function pause() external onlyOwner whenNotPaused {
    _pause();
  }

  /**
   * @notice Unpause contract
   */
  function unpause() external onlyOwner whenPaused {
    _unpause();
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"dest","type":"address"},{"indexed":true,"internalType":"address","name":"donor","type":"address"}],"name":"DonationSent","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"dest","type":"address"}],"name":"TokenWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"dest","type":"address"}],"internalType":"struct BulkCheckout.Donation[]","name":"_donations","type":"tuple[]"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_dest","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_dest","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006100146100ec60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060146101000a81548160ff0219169083151502179055506001600060156101000a81548160ff0219169083151502179055506100f4565b600033905090565b611c4f806101036000396000f3fe6080604052600436106100865760003560e01c80638456cb59116100595780638456cb591461010d5780638da5cb5b146101245780639120491c1461014f578063af933b571461016b578063f2fde38b1461019457610086565b80633aeac4e11461008b5780633f4ba83a146100b45780635c975abb146100cb578063715018a6146100f6575b600080fd5b34801561009757600080fd5b506100b260048036038101906100ad91906113aa565b6101bd565b005b3480156100c057600080fd5b506100c961034b565b005b3480156100d757600080fd5b506100e061043a565b6040516100ed9190611938565b60405180910390f35b34801561010257600080fd5b5061010b610450565b005b34801561011957600080fd5b506101226105a5565b005b34801561013057600080fd5b50610139610695565b60405161014691906118a2565b60405180910390f35b610169600480360381019061016491906113e6565b6106be565b005b34801561017757600080fd5b50610192600480360381019061018d9190611381565b610a20565b005b3480156101a057600080fd5b506101bb60048036038101906101b69190611358565b610b6e565b005b6101c5610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024a90611a33565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161028e91906118a2565b60206040518083038186803b1580156102a657600080fd5b505afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de9190611454565b90508173ffffffffffffffffffffffffffffffffffffffff16818473ffffffffffffffffffffffffffffffffffffffff167fa0524ee0fd8662d6c046d199da2a6d3dc49445182cec055873a5bb9c2843c8e060405160405180910390a4610346838383610d3a565b505050565b610353610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d890611a33565b60405180910390fd5b600060149054906101000a900460ff16610430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042790611953565b60405180910390fd5b610438610dc0565b565b60008060149054906101000a900460ff16905090565b610458610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104dd90611a33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6105ad610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063290611a33565b60405180910390fd5b600060149054906101000a900460ff161561068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290611a13565b60405180910390fd5b610693610e69565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060159054906101000a900460ff1661070d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070490611a93565b60405180910390fd5b60008060156101000a81548160ff021916908315150217905550600060149054906101000a900460ff1615610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e90611a13565b60405180910390fd5b600080905060008090505b838390508110156109bd573373ffffffffffffffffffffffffffffffffffffffff168484838181106107b057fe5b905060600201602001358585848181106107c657fe5b90506060020160000160208101906107de9190611358565b73ffffffffffffffffffffffffffffffffffffffff167f3bb7428b25f9bdad9bd2faa4c6a7a9e5d5882657e96c1d24cc41c1d6c1910a9887878681811061082157fe5b90506060020160400160208101906108399190611381565b60405161084691906118bd565b60405180910390a473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff1684848381811061088557fe5b905060600201600001602081019061089d9190611358565b73ffffffffffffffffffffffffffffffffffffffff16146109245761091f8484838181106108c757fe5b90506060020160000160208101906108df9190611358565b338686858181106108ec57fe5b90506060020160400160208101906109049190611381565b87878681811061091057fe5b90506060020160200135610f14565b6109b0565b61098584848381811061093357fe5b9050606002016020013585858481811061094957fe5b90506060020160400160208101906109619190611381565b73ffffffffffffffffffffffffffffffffffffffff16610f9d90919063ffffffff16565b6109ad84848381811061099457fe5b90506060020160200135836110a890919063ffffffff16565b91505b8080600101915050610782565b50803414610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790611a53565b60405180910390fd5b506001600060156101000a81548160ff0219169083151502179055505050565b610a28610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90611a33565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff163190508173ffffffffffffffffffffffffffffffffffffffff168173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167fa0524ee0fd8662d6c046d199da2a6d3dc49445182cec055873a5bb9c2843c8e060405160405180910390a4610b6a818373ffffffffffffffffffffffffffffffffffffffff16610f9d90919063ffffffff16565b5050565b610b76610d32565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90611a33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90611973565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b610dbb8363a9059cbb60e01b8484604051602401610d5992919061190f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506110fd565b505050565b600060149054906101000a900460ff16610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690611953565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e52610d32565b604051610e5f91906118bd565b60405180910390a1565b600060149054906101000a900460ff1615610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090611a13565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610efd610d32565b604051610f0a91906118bd565b60405180910390a1565b610f97846323b872dd60e01b858585604051602401610f35939291906118d8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506110fd565b50505050565b803073ffffffffffffffffffffffffffffffffffffffff16311015610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906119f3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161101d9061188d565b60006040518083038185875af1925050503d806000811461105a576040519150601f19603f3d011682016040523d82523d6000602084013e61105f565b606091505b50509050806110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906119d3565b60405180910390fd5b505050565b6000808284019050838110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90611993565b60405180910390fd5b8091505092915050565b61111c8273ffffffffffffffffffffffffffffffffffffffff1661126f565b61115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290611ab3565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516111849190611876565b6000604051808303816000865af19150503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b50915091508161120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906119b3565b60405180910390fd5b6000815111156112695780806020019051810190611229919061142b565b611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90611a73565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156112b157506000801b8214155b92505050919050565b6000813590506112c981611bbd565b92915050565b6000813590506112de81611bd4565b92915050565b60008083601f8401126112f657600080fd5b8235905067ffffffffffffffff81111561130f57600080fd5b60208301915083606082028301111561132757600080fd5b9250929050565b60008151905061133d81611beb565b92915050565b60008151905061135281611c02565b92915050565b60006020828403121561136a57600080fd5b6000611378848285016112ba565b91505092915050565b60006020828403121561139357600080fd5b60006113a1848285016112cf565b91505092915050565b600080604083850312156113bd57600080fd5b60006113cb858286016112ba565b92505060206113dc858286016112ba565b9150509250929050565b600080602083850312156113f957600080fd5b600083013567ffffffffffffffff81111561141357600080fd5b61141f858286016112e4565b92509250509250929050565b60006020828403121561143d57600080fd5b600061144b8482850161132e565b91505092915050565b60006020828403121561146657600080fd5b600061147484828501611343565b91505092915050565b61148681611b54565b82525050565b61149581611afa565b82525050565b6114a481611b1e565b82525050565b60006114b582611ad3565b6114bf8185611ade565b93506114cf818560208601611b8a565b80840191505092915050565b60006114e8601483611ae9565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000611528602683611ae9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061158e601b83611ae9565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006115ce602083611ae9565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600061160e603a83611ae9565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000611674601d83611ae9565b91507f416464726573733a20696e73756666696369656e742062616c616e63650000006000830152602082019050919050565b60006116b4601083611ae9565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b60006116f4602083611ae9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611734601f83611ae9565b91507f42756c6b436865636b6f75743a20546f6f206d756368204554482073656e74006000830152602082019050919050565b6000611774600083611ade565b9150600082019050919050565b600061178e602a83611ae9565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006117f4601f83611ae9565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000611834601f83611ae9565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b61187081611b4a565b82525050565b600061188282846114aa565b915081905092915050565b600061189882611767565b9150819050919050565b60006020820190506118b7600083018461148c565b92915050565b60006020820190506118d2600083018461147d565b92915050565b60006060820190506118ed600083018661148c565b6118fa602083018561148c565b6119076040830184611867565b949350505050565b6000604082019050611924600083018561148c565b6119316020830184611867565b9392505050565b600060208201905061194d600083018461149b565b92915050565b6000602082019050818103600083015261196c816114db565b9050919050565b6000602082019050818103600083015261198c8161151b565b9050919050565b600060208201905081810360008301526119ac81611581565b9050919050565b600060208201905081810360008301526119cc816115c1565b9050919050565b600060208201905081810360008301526119ec81611601565b9050919050565b60006020820190508181036000830152611a0c81611667565b9050919050565b60006020820190508181036000830152611a2c816116a7565b9050919050565b60006020820190508181036000830152611a4c816116e7565b9050919050565b60006020820190508181036000830152611a6c81611727565b9050919050565b60006020820190508181036000830152611a8c81611781565b9050919050565b60006020820190508181036000830152611aac816117e7565b9050919050565b60006020820190508181036000830152611acc81611827565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000611b0582611b2a565b9050919050565b6000611b1782611b2a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611b5f82611b66565b9050919050565b6000611b7182611b78565b9050919050565b6000611b8382611b2a565b9050919050565b60005b83811015611ba8578082015181840152602081019050611b8d565b83811115611bb7576000848401525b50505050565b611bc681611afa565b8114611bd157600080fd5b50565b611bdd81611b0c565b8114611be857600080fd5b50565b611bf481611b1e565b8114611bff57600080fd5b50565b611c0b81611b4a565b8114611c1657600080fd5b5056fea26469706673582212201aa95ec7b148b25af45f5c3ecaf32ee2f125bd4548561d1563ecb9b13e33c4cc64736f6c63430006070033

Deployed ByteCode Sourcemap

17566:3409:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;20096:285:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20096:285:0;;;;;;;;;;;;;;;;:::i;:::-;;20900:72;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20900:72:0;;;:::i;:::-;;2399;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2399:72:0;;;:::i;:::-;;;;;;;;;;;;;;;;4251:138;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4251:138:0;;;:::i;:::-;;20778:71;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20778:71:0;;;:::i;:::-;;3649:73;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3649:73:0;;;:::i;:::-;;;;;;;;;;;;;;;;18714:1112;;;;;;;;;;;;;;;;:::i;:::-;;20514:215;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20514:215:0;;;;;;;;;;;;;;;;:::i;:::-;;4534:230;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4534:230:0;;;;;;;;;;;;;;;;:::i;:::-;;20096:285;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;20183:16:::1;20209:13;20202:31;;;20242:4;20202:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20202:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20202:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20202:46:0;;;;;;;;;20183:65;;20300:5;20260:46;;20290:8;20275:13;20260:46;;;;;;;;;;;;20313:62;20343:13;20359:5;20366:8;20313:22;:62::i;:::-;3909:1;20096:285:::0;;:::o;20900:72::-;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;2799:7:::1;;;;;;;;;;;2791:40;;;;;;;;;;;;;;;;;;;;;;20956:10:::2;:8;:10::i;:::-;20900:72::o:0;2399:::-;2438:4;2458:7;;;;;;;;;;;2451:14;;2399:72;:::o;4251:138::-;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;4354:1:::1;4317:40;;4338:6;::::0;::::1;;;;;;;;;4317:40;;;;;;;;;;;;4381:1;4364:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4251:138::o:0;20778:71::-;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;2618:7:::1;;;;;;;;;;;2617:8;2609:37;;;;;;;;;;;;;;;;;;;;;;20835:8:::2;:6;:8::i;:::-;20778:71::o:0;3649:73::-;3687:7;3710:6;;;;;;;;;;;3703:13;;3649:73;:::o;18714:1112::-;1048:11;;;;;;;;;;;1040:55;;;;;;;;;;;;;;;;;;;;;;1179:5;1165:11;;:19;;;;;;;;;;;;;;;;;;2618:7:::1;;;;;;;;;;;2617:8;2609:37;;;;;;;;;;;;;;;;;;;;;;18889:25:::2;18917:1:::0;18889:29:::2;;18932:9;18944:1:::0;18932:13:::2;;18927:760;18951:10;;:17;;18947:1;:21;18927:760;;;19065:10;18989:87;;19023:10;;19034:1;19023:13;;;;;;;;;;;;:20;;;19002:10;;19013:1;19002:13;;;;;;;;;;;;:19;;;;;;;;;;;;18989:87;;;19045:10;;19056:1;19045:13;;;;;;;;;;;;:18;;;;;;;;;;;;18989:87;;;;;;;;;;;;;;;17888:42;19089:43;;:10;;19100:1;19089:13;;;;;;;;;;;;:19;;;;;;;;;;;;:43;;;19085:595;;19252:164;19298:10;;19309:1;19298:13;;;;;;;;;;;;:19;;;;;;;;;;;;19331:10;19354;;19365:1;19354:13;;;;;;;;;;;;:18;;;;;;;;;;;;19385:10;;19396:1;19385:13;;;;;;;;;;;;:20;;;19252:26;:164::i;:::-;19085:595;;;19546:50;19575:10;;19586:1;19575:13;;;;;;;;;;;;:20;;;19546:10;;19557:1;19546:13;;;;;;;;;;;;:18;;;;;;;;;;;;:28;;;;:50;;;;:::i;:::-;19627:43;19649:10;;19660:1;19649:13;;;;;;;;;;;;:20;;;19627:17;:21;;:43;;;;:::i;:::-;19607:63;;19085:595;18970:3;;;;;;;18927:760;;;;19767:17;19754:9;:30;19746:74;;;;;;;;;;;;;;;;;;;;;;2653:1;1343:4:::0;1329:11;;:18;;;;;;;;;;;;;;;;;;18714:1112;;:::o;20514:215::-;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;20586:16:::1;20613:4;20605:21;;;20586:40;;20685:5;20638:53;;20675:8;17888:42;20638:53;;;;;;;;;;;;20698:25;20714:8;20698:5;:15;;;;:25;;;;:::i;:::-;3909:1;20514:215:::0;:::o;4534:230::-;3853:12;:10;:12::i;:::-;3843:22;;:6;;;;;;;;;;;:22;;;3835:67;;;;;;;;;;;;;;;;;;;;;;4639:1:::1;4619:22;;:8;:22;;;;4611:73;;;;;;;;;;;;;;;;;;;;;;4725:8;4696:38;;4717:6;::::0;::::1;;;;;;;;;4696:38;;;;;;;;;;;;4750:8;4741:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4534:230:::0;:::o;1567:100::-;1620:15;1651:10;1644:17;;1567:100;:::o;14350:191::-;14449:86;14469:5;14499:23;;;14524:2;14528:5;14476:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14476:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;14476:58:0;14449:19;:86::i;:::-;14350:191;;;:::o;3064:110::-;2799:7;;;;;;;;;;;2791:40;;;;;;;;;;;;;;;;;;;;;;3129:5:::1;3119:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;3146:22;3155:12;:10;:12::i;:::-;3146:22;;;;;;;;;;;;;;;3064:110::o:0;2900:108::-;2618:7;;;;;;;;;;;2617:8;2609:37;;;;;;;;;;;;;;;;;;;;;;2966:4:::1;2956:7;;:14;;;;;;;;;;;;;;;;;;2982:20;2989:12;:10;:12::i;:::-;2982:20;;;;;;;;;;;;;;;2900:108::o:0;14547:245::-;14669:117;14697:5;14734:27;;;14763:4;14769:2;14773:5;14711:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14711:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;14711:68:0;14669:19;:117::i;:::-;14547:245;;;;:::o;9384:377::-;9495:6;9478:4;9470:21;;;:31;;9462:73;;;;;;;;;;;;;;;;;;;;;;9619:12;9637:9;:14;;9659:6;9637:33;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9618:52:0;;;9685:7;9677:78;;;;;;;;;;;;;;;;;;;;;;9384:377;;;:::o;10005:167::-;10063:7;10079:9;10095:1;10091;:5;10079:17;;10116:1;10111;:6;;10103:46;;;;;;;;;;;;;;;;;;;;;;10165:1;10158:8;;;10005:167;;;;:::o;16501:1056::-;17074:27;17082:5;17074:25;;;:27::i;:::-;17066:71;;;;;;;;;;;;;;;;;;;;;;17203:12;17217:23;17252:5;17244:19;;17264:4;17244:25;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;17202:67:0;;;;17284:7;17276:52;;;;;;;;;;;;;;;;;;;;;;17361:1;17341:10;:17;:21;17337:215;;;17478:10;17467:30;;;;;;;;;;;;;;17459:85;;;;;;;;;;;;;;;;;;;;;;17337:215;16501:1056;;;;:::o;7886:597::-;7946:4;8192:16;8215:19;8237:66;8215:88;;;;8405:7;8393:20;8381:32;;8446:11;8434:8;:23;;:42;;;;;8473:3;8461:15;;:8;:15;;8434:42;8426:51;;;;7886:597;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:146;;230:6;217:20;208:29;;242:41;277:5;242:41;;;202:86;;;;;334:379;;;491:3;484:4;476:6;472:17;468:27;458:2;;509:1;506;499:12;458:2;542:6;529:20;519:30;;569:18;561:6;558:30;555:2;;;601:1;598;591:12;555:2;635:4;627:6;623:17;611:29;;686:3;678:4;670:6;666:17;656:8;652:32;649:41;646:2;;;703:1;700;693:12;646:2;451:262;;;;;;721:128;;802:6;796:13;787:22;;814:30;838:5;814:30;;;781:68;;;;;856:134;;940:6;934:13;925:22;;952:33;979:5;952:33;;;919:71;;;;;997:241;;1101:2;1089:9;1080:7;1076:23;1072:32;1069:2;;;1117:1;1114;1107:12;1069:2;1152:1;1169:53;1214:7;1205:6;1194:9;1190:22;1169:53;;;1159:63;;1131:97;1063:175;;;;;1245:257;;1357:2;1345:9;1336:7;1332:23;1328:32;1325:2;;;1373:1;1370;1363:12;1325:2;1408:1;1425:61;1478:7;1469:6;1458:9;1454:22;1425:61;;;1415:71;;1387:105;1319:183;;;;;1509:366;;;1630:2;1618:9;1609:7;1605:23;1601:32;1598:2;;;1646:1;1643;1636:12;1598:2;1681:1;1698:53;1743:7;1734:6;1723:9;1719:22;1698:53;;;1688:63;;1660:97;1788:2;1806:53;1851:7;1842:6;1831:9;1827:22;1806:53;;;1796:63;;1767:98;1592:283;;;;;;1882:451;;;2048:2;2036:9;2027:7;2023:23;2019:32;2016:2;;;2064:1;2061;2054:12;2016:2;2127:1;2116:9;2112:17;2099:31;2150:18;2142:6;2139:30;2136:2;;;2182:1;2179;2172:12;2136:2;2210:107;2309:7;2300:6;2289:9;2285:22;2210:107;;;2200:117;;;;2078:245;2010:323;;;;;;2340:257;;2452:2;2440:9;2431:7;2427:23;2423:32;2420:2;;;2468:1;2465;2458:12;2420:2;2503:1;2520:61;2573:7;2564:6;2553:9;2549:22;2520:61;;;2510:71;;2482:105;2414:183;;;;;2604:263;;2719:2;2707:9;2698:7;2694:23;2690:32;2687:2;;;2735:1;2732;2725:12;2687:2;2770:1;2787:64;2843:7;2834:6;2823:9;2819:22;2787:64;;;2777:74;;2749:108;2681:186;;;;;2874:142;2965:45;3004:5;2965:45;;;2960:3;2953:58;2947:69;;;3023:113;3106:24;3124:5;3106:24;;;3101:3;3094:37;3088:48;;;3143:104;3220:21;3235:5;3220:21;;;3215:3;3208:34;3202:45;;;3254:356;;3382:38;3414:5;3382:38;;;3432:88;3513:6;3508:3;3432:88;;;3425:95;;3525:52;3570:6;3565:3;3558:4;3551:5;3547:16;3525:52;;;3598:6;3593:3;3589:16;3582:23;;3362:248;;;;;;3618:320;;3778:67;3842:2;3837:3;3778:67;;;3771:74;;3878:22;3874:1;3869:3;3865:11;3858:43;3929:2;3924:3;3920:12;3913:19;;3764:174;;;;3947:375;;4107:67;4171:2;4166:3;4107:67;;;4100:74;;4207:34;4203:1;4198:3;4194:11;4187:55;4276:8;4271:2;4266:3;4262:12;4255:30;4313:2;4308:3;4304:12;4297:19;;4093:229;;;;4331:327;;4491:67;4555:2;4550:3;4491:67;;;4484:74;;4591:29;4587:1;4582:3;4578:11;4571:50;4649:2;4644:3;4640:12;4633:19;;4477:181;;;;4667:332;;4827:67;4891:2;4886:3;4827:67;;;4820:74;;4927:34;4923:1;4918:3;4914:11;4907:55;4990:2;4985:3;4981:12;4974:19;;4813:186;;;;5008:395;;5168:67;5232:2;5227:3;5168:67;;;5161:74;;5268:34;5264:1;5259:3;5255:11;5248:55;5337:28;5332:2;5327:3;5323:12;5316:50;5394:2;5389:3;5385:12;5378:19;;5154:249;;;;5412:329;;5572:67;5636:2;5631:3;5572:67;;;5565:74;;5672:31;5668:1;5663:3;5659:11;5652:52;5732:2;5727:3;5723:12;5716:19;;5558:183;;;;5750:316;;5910:67;5974:2;5969:3;5910:67;;;5903:74;;6010:18;6006:1;6001:3;5997:11;5990:39;6057:2;6052:3;6048:12;6041:19;;5896:170;;;;6075:332;;6235:67;6299:2;6294:3;6235:67;;;6228:74;;6335:34;6331:1;6326:3;6322:11;6315:55;6398:2;6393:3;6389:12;6382:19;;6221:186;;;;6416:331;;6576:67;6640:2;6635:3;6576:67;;;6569:74;;6676:33;6672:1;6667:3;6663:11;6656:54;6738:2;6733:3;6729:12;6722:19;;6562:185;;;;6756:296;;6933:83;7014:1;7009:3;6933:83;;;6926:90;;7044:1;7039:3;7035:11;7028:18;;6919:133;;;;7061:379;;7221:67;7285:2;7280:3;7221:67;;;7214:74;;7321:34;7317:1;7312:3;7308:11;7301:55;7390:12;7385:2;7380:3;7376:12;7369:34;7431:2;7426:3;7422:12;7415:19;;7207:233;;;;7449:331;;7609:67;7673:2;7668:3;7609:67;;;7602:74;;7709:33;7705:1;7700:3;7696:11;7689:54;7771:2;7766:3;7762:12;7755:19;;7595:185;;;;7789:331;;7949:67;8013:2;8008:3;7949:67;;;7942:74;;8049:33;8045:1;8040:3;8036:11;8029:54;8111:2;8106:3;8102:12;8095:19;;7935:185;;;;8128:113;8211:24;8229:5;8211:24;;;8206:3;8199:37;8193:48;;;8248:262;;8392:93;8481:3;8472:6;8392:93;;;8385:100;;8502:3;8495:10;;8373:137;;;;;8517:370;;8715:147;8858:3;8715:147;;;8708:154;;8879:3;8872:10;;8696:191;;;;8894:213;;9012:2;9001:9;8997:18;8989:26;;9026:71;9094:1;9083:9;9079:17;9070:6;9026:71;;;8983:124;;;;;9114:229;;9240:2;9229:9;9225:18;9217:26;;9254:79;9330:1;9319:9;9315:17;9306:6;9254:79;;;9211:132;;;;;9350:435;;9524:2;9513:9;9509:18;9501:26;;9538:71;9606:1;9595:9;9591:17;9582:6;9538:71;;;9620:72;9688:2;9677:9;9673:18;9664:6;9620:72;;;9703;9771:2;9760:9;9756:18;9747:6;9703:72;;;9495:290;;;;;;;9792:324;;9938:2;9927:9;9923:18;9915:26;;9952:71;10020:1;10009:9;10005:17;9996:6;9952:71;;;10034:72;10102:2;10091:9;10087:18;10078:6;10034:72;;;9909:207;;;;;;10123:201;;10235:2;10224:9;10220:18;10212:26;;10249:65;10311:1;10300:9;10296:17;10287:6;10249:65;;;10206:118;;;;;10331:407;;10522:2;10511:9;10507:18;10499:26;;10572:9;10566:4;10562:20;10558:1;10547:9;10543:17;10536:47;10597:131;10723:4;10597:131;;;10589:139;;10493:245;;;;10745:407;;10936:2;10925:9;10921:18;10913:26;;10986:9;10980:4;10976:20;10972:1;10961:9;10957:17;10950:47;11011:131;11137:4;11011:131;;;11003:139;;10907:245;;;;11159:407;;11350:2;11339:9;11335:18;11327:26;;11400:9;11394:4;11390:20;11386:1;11375:9;11371:17;11364:47;11425:131;11551:4;11425:131;;;11417:139;;11321:245;;;;11573:407;;11764:2;11753:9;11749:18;11741:26;;11814:9;11808:4;11804:20;11800:1;11789:9;11785:17;11778:47;11839:131;11965:4;11839:131;;;11831:139;;11735:245;;;;11987:407;;12178:2;12167:9;12163:18;12155:26;;12228:9;12222:4;12218:20;12214:1;12203:9;12199:17;12192:47;12253:131;12379:4;12253:131;;;12245:139;;12149:245;;;;12401:407;;12592:2;12581:9;12577:18;12569:26;;12642:9;12636:4;12632:20;12628:1;12617:9;12613:17;12606:47;12667:131;12793:4;12667:131;;;12659:139;;12563:245;;;;12815:407;;13006:2;12995:9;12991:18;12983:26;;13056:9;13050:4;13046:20;13042:1;13031:9;13027:17;13020:47;13081:131;13207:4;13081:131;;;13073:139;;12977:245;;;;13229:407;;13420:2;13409:9;13405:18;13397:26;;13470:9;13464:4;13460:20;13456:1;13445:9;13441:17;13434:47;13495:131;13621:4;13495:131;;;13487:139;;13391:245;;;;13643:407;;13834:2;13823:9;13819:18;13811:26;;13884:9;13878:4;13874:20;13870:1;13859:9;13855:17;13848:47;13909:131;14035:4;13909:131;;;13901:139;;13805:245;;;;14057:407;;14248:2;14237:9;14233:18;14225:26;;14298:9;14292:4;14288:20;14284:1;14273:9;14269:17;14262:47;14323:131;14449:4;14323:131;;;14315:139;;14219:245;;;;14471:407;;14662:2;14651:9;14647:18;14639:26;;14712:9;14706:4;14702:20;14698:1;14687:9;14683:17;14676:47;14737:131;14863:4;14737:131;;;14729:139;;14633:245;;;;14885:407;;15076:2;15065:9;15061:18;15053:26;;15126:9;15120:4;15116:20;15112:1;15101:9;15097:17;15090:47;15151:131;15277:4;15151:131;;;15143:139;;15047:245;;;;15299:121;;15392:5;15386:12;15376:22;;15357:63;;;;15428:144;;15563:3;15548:18;;15541:31;;;;;15581:163;;15696:6;15691:3;15684:19;15733:4;15728:3;15724:14;15709:29;;15677:67;;;;;15752:91;;15814:24;15832:5;15814:24;;;15803:35;;15797:46;;;;15850:99;;15920:24;15938:5;15920:24;;;15909:35;;15903:46;;;;15956:85;;16029:5;16022:13;16015:21;16004:32;;15998:43;;;;16048:121;;16121:42;16114:5;16110:54;16099:65;;16093:76;;;;16176:72;;16238:5;16227:16;;16221:27;;;;16255:129;;16342:37;16373:5;16342:37;;;16329:50;;16323:61;;;;16391:121;;16470:37;16501:5;16470:37;;;16457:50;;16451:61;;;;16519:108;;16598:24;16616:5;16598:24;;;16585:37;;16579:48;;;;16635:268;16700:1;16707:101;16721:6;16718:1;16715:13;16707:101;;;16797:1;16792:3;16788:11;16782:18;16778:1;16773:3;16769:11;16762:39;16743:2;16740:1;16736:10;16731:15;;16707:101;;;16823:6;16820:1;16817:13;16814:2;;;16888:1;16879:6;16874:3;16870:16;16863:27;16814:2;16684:219;;;;;16911:117;16980:24;16998:5;16980:24;;;16973:5;16970:35;16960:2;;17019:1;17016;17009:12;16960:2;16954:74;;17035:133;17112:32;17138:5;17112:32;;;17105:5;17102:43;17092:2;;17159:1;17156;17149:12;17092:2;17086:82;;17175:111;17241:21;17256:5;17241:21;;;17234:5;17231:32;17221:2;;17277:1;17274;17267:12;17221:2;17215:71;;17293:117;17362:24;17380:5;17362:24;;;17355:5;17352:35;17342:2;;17401:1;17398;17391:12;17342:2;17336:74;

Swarm Source

ipfs://1aa95ec7b148b25af45f5c3ecaf32ee2f125bd4548561d1563ecb9b13e33c4cc
Block Transaction Difficulty Gas Used Reward
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.