Contract 0xbf1cac12db60819bfa71a328282ecbc1d40443aa

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x91286882020c48b87d68af64d90889f4f118ce53361acd878309f83bd089c0a0Approve Wait Per...296887052022-10-12 9:51:47118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0xd31abe28f926310cefca5070dbc308c1433466f75db99646c28483e6ae2fc156Start Wait Perio...296886852022-10-12 9:51:40118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0x7cab663ea1a8e8faa781de6bd9585043774d7b330b12fbf759ccdd262fa2fe92Approve Wait Per...296885952022-10-12 9:51:06118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0x89e721c0e247a9179e6cd5394c8aa14b58feddf3ca0ee662bf86a0d13f219dcdStart Wait Perio...296885792022-10-12 9:50:58118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0xf02b8d6c16afc5b6297d838073c826f2ba6c732d0efc3f8c9ba33021689da599Approve Wait Per...296884952022-10-12 9:50:15118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0x367f82caf09f0eada9a6c540ee7ddbecec7206d063bcd712e1661c8165407a8fStart Wait Perio...296884792022-10-12 9:50:03118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0xcc66402486700cb4405a1628c2828d45b9c48a3f015d36161cf13491a98c33f8Approve Wait Per...296883812022-10-12 9:49:11118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0x1e6849c724eb533e590cd296f89b4b2cc86b37ad101941ef3c58e254b4305158Start Wait Perio...296883352022-10-12 9:48:53118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0xf91404d53bca3647a6eb8778869433c83c8af8d9969fd82ed664375ad68da97fApprove Wait Per...296882172022-10-12 9:48:07118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0x565570a9cdf40226c0141de669d913be4dd97ed50f06b63357651ee24909bcbbStart Wait Perio...296881952022-10-12 9:47:53118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0x3834e4a476480a040bd7516da642602c13d6a1acf767feee39733699d0321ff4Approve Wait Per...296880822022-10-12 9:47:01118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.0000194
0xe29d6931176be222f5bf7304101f42a59d147d479171bad202f77d9bd1bd935eStart Wait Perio...296880582022-10-12 9:46:51118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002447
0x6e0b5f167400085fd755747402f7723e3a45e38b466d79d87ef2fdf17f242ef9Approve Wait Per...296876682022-10-12 9:43:51118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001976
0x7998e02676da97afde578c6a397cde631a93de93c1d7cf30206ed57145f09f88Start Wait Perio...296876392022-10-12 9:43:37118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002491
0xd50be74e8cd352500ab9c4f4a5d336d236b3ba8d9ff818d829f16769120f1454Approve Wait Per...296874532022-10-12 9:42:11118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001976
0x7ef2e498789bcc6d52319279fa269ea316ccec6c929c8cd7d3310732a42e77e1Start Wait Perio...296874252022-10-12 9:41:58118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002491
0xa9e6356dc015496ea81980403ebf63a76d63a01e1f101b922c39c7da0634023aApprove Wait Per...296872722022-10-12 9:40:56118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001976
0x5ae3f1d6ce82e4e1c2524e1e3bd11853b7a78c53c23d9bb22f0d0a52a96f1247Start Wait Perio...296872492022-10-12 9:40:44118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002491
0xff63ff09133817f6108e31800fad3676517949425a9cdb50577fa7c70f8ea90dApprove Wait Per...296870532022-10-12 9:39:35118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001966
0xde988119059790a0afa48cf1f02727a5918bbe1cf435788954f21a190d2a9f41Start Wait Perio...296870162022-10-12 9:39:21118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002479
0x8b142aee3c825341262af98492c3d2f685b1268a1636ad62f0efd5004c5895f0Approve Wait Per...296868932022-10-12 9:38:17118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001957
0xa6a3bf40e0eb68ef300826cca7cfc51b4a3c4d1357e6c02e4e88a2e12d6ba3a8Start Wait Perio...296868432022-10-12 9:37:59118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00002479
0x552dfd0692964892f4f656046b3814ea7d57b2abce9dcab2e21e5f291341086eApprove Contract...296866782022-10-12 9:37:01118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001868
0x5e665713b2e60f097e897c7a2bcd10cad9df889f6b6d73609352b10d5d95a6d6Approve Contract...296846472022-10-12 9:23:57118 days 4 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00001951
0x9234bb5004e7aad39304bb3b6c99d9f746911e23e64b5a1970a81a057c83ac80Start Contract C...293708592022-10-10 7:31:09120 days 6 hrs ago0x322d58b9e75a6918f7e7849aee0ff09369977e08 IN  0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH0.00004471
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd5b29428dee5fe8feea33000dda6a862b084d6ec5711059d6f7db0b1136677aa588161492023-02-07 14:15:563 mins ago 0xbb0a5c8f2988956a21b40f46bdc878f3aa3ee494 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xd5b29428dee5fe8feea33000dda6a862b084d6ec5711059d6f7db0b1136677aa588161492023-02-07 14:15:563 mins ago 0xbb0a5c8f2988956a21b40f46bdc878f3aa3ee494 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xd5b29428dee5fe8feea33000dda6a862b084d6ec5711059d6f7db0b1136677aa588161492023-02-07 14:15:563 mins ago 0xbb0a5c8f2988956a21b40f46bdc878f3aa3ee494 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x6a311ef8845efa8e1db7a03fdbaebb3ca33b6fc5d6a287bcd56e4173aa9dd8d0588145732023-02-07 14:08:5910 mins ago 0xe40ca1052c10d805a57bd9ac865c0e3211ac62b1 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x6a311ef8845efa8e1db7a03fdbaebb3ca33b6fc5d6a287bcd56e4173aa9dd8d0588145732023-02-07 14:08:5910 mins ago 0xe40ca1052c10d805a57bd9ac865c0e3211ac62b1 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x6a311ef8845efa8e1db7a03fdbaebb3ca33b6fc5d6a287bcd56e4173aa9dd8d0588145732023-02-07 14:08:5910 mins ago 0xe40ca1052c10d805a57bd9ac865c0e3211ac62b1 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xde2ef04d5536eb1884f12369f816ed0f6d6912bd43cd67c82da2609e566ed549588110062023-02-07 13:53:1625 mins ago 0x09fc3be18a3b347f1cbec891dfb8d9438e0b1288 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xde2ef04d5536eb1884f12369f816ed0f6d6912bd43cd67c82da2609e566ed549588110062023-02-07 13:53:1625 mins ago 0x09fc3be18a3b347f1cbec891dfb8d9438e0b1288 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xde2ef04d5536eb1884f12369f816ed0f6d6912bd43cd67c82da2609e566ed549588110062023-02-07 13:53:1625 mins ago 0x09fc3be18a3b347f1cbec891dfb8d9438e0b1288 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xf73c9cc35fd375995817307602b9fa9062aef85d33398edabadbd8baf9aa3518588108582023-02-07 13:52:3526 mins ago 0x1873f0bc5133f9f8afd3b174fbbb9a4c564b9fe2 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xf73c9cc35fd375995817307602b9fa9062aef85d33398edabadbd8baf9aa3518588108582023-02-07 13:52:3526 mins ago 0x1873f0bc5133f9f8afd3b174fbbb9a4c564b9fe2 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xf73c9cc35fd375995817307602b9fa9062aef85d33398edabadbd8baf9aa3518588108582023-02-07 13:52:3526 mins ago 0x1873f0bc5133f9f8afd3b174fbbb9a4c564b9fe2 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xb66440118472880f7356395d36f31f7e94a734788050ce8fcf50f1491938c441588103552023-02-07 13:50:1728 mins ago 0x70d11adf0e3dc085000a4206e06e096650b4401d 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xb66440118472880f7356395d36f31f7e94a734788050ce8fcf50f1491938c441588103552023-02-07 13:50:1728 mins ago 0x70d11adf0e3dc085000a4206e06e096650b4401d 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xb66440118472880f7356395d36f31f7e94a734788050ce8fcf50f1491938c441588103552023-02-07 13:50:1728 mins ago 0x70d11adf0e3dc085000a4206e06e096650b4401d 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x58f5df70701966c99ca531be3eaf2fff30b82f18ae46819770db0d5519e981a8588031992023-02-07 13:19:0659 mins ago 0xecf4e6d4195861428fddd24fcb9690b585762a27 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x58f5df70701966c99ca531be3eaf2fff30b82f18ae46819770db0d5519e981a8588031992023-02-07 13:19:0659 mins ago 0xecf4e6d4195861428fddd24fcb9690b585762a27 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x58f5df70701966c99ca531be3eaf2fff30b82f18ae46819770db0d5519e981a8588031992023-02-07 13:19:0659 mins ago 0xecf4e6d4195861428fddd24fcb9690b585762a27 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xa09e0d36086e13baf0c73b458fb1465083a86abc172a292dfe0ce5c047790042588016162023-02-07 13:12:041 hr 6 mins ago 0x211f6db021c023fff9ddb97bc453864242e2de0c 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xa09e0d36086e13baf0c73b458fb1465083a86abc172a292dfe0ce5c047790042588016162023-02-07 13:12:041 hr 6 mins ago 0x211f6db021c023fff9ddb97bc453864242e2de0c 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0xa09e0d36086e13baf0c73b458fb1465083a86abc172a292dfe0ce5c047790042588016162023-02-07 13:12:041 hr 6 mins ago 0x211f6db021c023fff9ddb97bc453864242e2de0c 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x39e9f539bccc1b64bf740157356091cb36d8e2c86cbd6e0ab72c25ee7b8b5374588010312023-02-07 13:09:301 hr 9 mins ago 0xaa6e3c3fcfcc5be3a1fc32dd426ab6e0a439bdb9 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x39e9f539bccc1b64bf740157356091cb36d8e2c86cbd6e0ab72c25ee7b8b5374588010312023-02-07 13:09:301 hr 9 mins ago 0xaa6e3c3fcfcc5be3a1fc32dd426ab6e0a439bdb9 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x39e9f539bccc1b64bf740157356091cb36d8e2c86cbd6e0ab72c25ee7b8b5374588010312023-02-07 13:09:301 hr 9 mins ago 0xaa6e3c3fcfcc5be3a1fc32dd426ab6e0a439bdb9 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
0x38c42822c4321412796d0d95fff4a6266aa73c421e8662caf3c176bb79abaf37588006562023-02-07 13:07:501 hr 11 mins ago 0x744cc5dd8df092eff5f250d5170a08bcc46fcb4b 0xbf1cac12db60819bfa71a328282ecbc1d40443aa0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DFSRegistry

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-05-17
*/

// SPDX-License-Identifier: MIT

pragma solidity =0.8.10;





abstract contract IDFSRegistry {
 
    function getAddr(bytes4 _id) public view virtual returns (address);

    function addNewContract(
        bytes32 _id,
        address _contractAddr,
        uint256 _waitPeriod
    ) public virtual;

    function startContractChange(bytes32 _id, address _newContractAddr) public virtual;

    function approveContractChange(bytes32 _id) public virtual;

    function cancelContractChange(bytes32 _id) public virtual;

    function changeWaitPeriod(bytes32 _id, uint256 _newWaitPeriod) public virtual;
}





interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint256 digits);
    function totalSupply() external view returns (uint256 supply);

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

    function transfer(address _to, uint256 _value) external returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);

    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}





library Address {
    //insufficient balance
    error InsufficientBalance(uint256 available, uint256 required);
    //unable to send value, recipient may have reverted
    error SendingValueFail();
    //insufficient balance for call
    error InsufficientBalanceForCall(uint256 available, uint256 required);
    //call to non-contract
    error NonContractCall();
    
    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);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        uint256 balance = address(this).balance;
        if (balance < amount){
            revert InsufficientBalance(balance, amount);
        }

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        if (!(success)){
            revert SendingValueFail();
        }
    }

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        uint256 balance = address(this).balance;
        if (balance < value){
            revert InsufficientBalanceForCall(balance, value);
        }
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        if (!(isContract(target))){
            revert NonContractCall();
        }

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

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




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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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







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

    /// @dev Edited so it always first approves 0 and then the value, because of non standard tokens
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}





contract ArbitrumAuthAddresses {
    address internal constant ADMIN_VAULT_ADDR = 0xd47D8D97cAd12A866900eEc6Cde1962529F25351;
    address internal constant ADMIN_ADDR = 0x6AFEA85cFAB61e3a55Ad2e4537252Ec05796BEfa;
}





contract AuthHelper is ArbitrumAuthAddresses {
}





contract AdminVault is AuthHelper {
    address public owner;
    address public admin;

    error SenderNotAdmin();

    constructor() {
        owner = msg.sender;
        admin = ADMIN_ADDR;
    }

    /// @notice Admin is able to change owner
    /// @param _owner Address of new owner
    function changeOwner(address _owner) public {
        if (admin != msg.sender){
            revert SenderNotAdmin();
        }
        owner = _owner;
    }

    /// @notice Admin is able to set new admin
    /// @param _admin Address of multisig that becomes new admin
    function changeAdmin(address _admin) public {
        if (admin != msg.sender){
            revert SenderNotAdmin();
        }
        admin = _admin;
    }

}








contract AdminAuth is AuthHelper {
    using SafeERC20 for IERC20;

    AdminVault public constant adminVault = AdminVault(ADMIN_VAULT_ADDR);

    error SenderNotOwner();
    error SenderNotAdmin();

    modifier onlyOwner() {
        if (adminVault.owner() != msg.sender){
            revert SenderNotOwner();
        }
        _;
    }

    modifier onlyAdmin() {
        if (adminVault.admin() != msg.sender){
            revert SenderNotAdmin();
        }
        _;
    }

    /// @notice withdraw stuck funds
    function withdrawStuckFunds(address _token, address _receiver, uint256 _amount) public onlyOwner {
        if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
            payable(_receiver).transfer(_amount);
        } else {
            IERC20(_token).safeTransfer(_receiver, _amount);
        }
    }

    /// @notice Destroy the contract
    function kill() public onlyAdmin {
        selfdestruct(payable(msg.sender));
    }
}





contract DFSRegistry is AdminAuth {
    error EntryAlreadyExistsError(bytes4);
    error EntryNonExistentError(bytes4);
    error EntryNotInChangeError(bytes4);
    error ChangeNotReadyError(uint256,uint256);
    error EmptyPrevAddrError(bytes4);
    error AlreadyInContractChangeError(bytes4);
    error AlreadyInWaitPeriodChangeError(bytes4);

    event AddNewContract(address,bytes4,address,uint256);
    event RevertToPreviousAddress(address,bytes4,address,address);
    event StartContractChange(address,bytes4,address,address);
    event ApproveContractChange(address,bytes4,address,address);
    event CancelContractChange(address,bytes4,address,address);
    event StartWaitPeriodChange(address,bytes4,uint256);
    event ApproveWaitPeriodChange(address,bytes4,uint256,uint256);
    event CancelWaitPeriodChange(address,bytes4,uint256,uint256);

    struct Entry {
        address contractAddr;
        uint256 waitPeriod;
        uint256 changeStartTime;
        bool inContractChange;
        bool inWaitPeriodChange;
        bool exists;
    }

    mapping(bytes4 => Entry) public entries;
    mapping(bytes4 => address) public previousAddresses;

    mapping(bytes4 => address) public pendingAddresses;
    mapping(bytes4 => uint256) public pendingWaitTimes;

    /// @notice Given an contract id returns the registered address
    /// @dev Id is keccak256 of the contract name
    /// @param _id Id of contract
    function getAddr(bytes4 _id) public view returns (address) {
        return entries[_id].contractAddr;
    }

    /// @notice Helper function to easily query if id is registered
    /// @param _id Id of contract
    function isRegistered(bytes4 _id) public view returns (bool) {
        return entries[_id].exists;
    }

    /////////////////////////// OWNER ONLY FUNCTIONS ///////////////////////////

    /// @notice Adds a new contract to the registry
    /// @param _id Id of contract
    /// @param _contractAddr Address of the contract
    /// @param _waitPeriod Amount of time to wait before a contract address can be changed
    function addNewContract(
        bytes4 _id,
        address _contractAddr,
        uint256 _waitPeriod
    ) public onlyOwner {
        if (entries[_id].exists){
            revert EntryAlreadyExistsError(_id);
        }

        entries[_id] = Entry({
            contractAddr: _contractAddr,
            waitPeriod: _waitPeriod,
            changeStartTime: 0,
            inContractChange: false,
            inWaitPeriodChange: false,
            exists: true
        });

        emit AddNewContract(msg.sender, _id, _contractAddr, _waitPeriod);
    }

    /// @notice Reverts to the previous address immediately
    /// @dev In case the new version has a fault, a quick way to fallback to the old contract
    /// @param _id Id of contract
    function revertToPreviousAddress(bytes4 _id) public onlyOwner {
        if (!(entries[_id].exists)){
            revert EntryNonExistentError(_id);
        }
        if (previousAddresses[_id] == address(0)){
            revert EmptyPrevAddrError(_id);
        }

        address currentAddr = entries[_id].contractAddr;
        entries[_id].contractAddr = previousAddresses[_id];

        emit RevertToPreviousAddress(msg.sender, _id, currentAddr, previousAddresses[_id]);
    }

    /// @notice Starts an address change for an existing entry
    /// @dev Can override a change that is currently in progress
    /// @param _id Id of contract
    /// @param _newContractAddr Address of the new contract
    function startContractChange(bytes4 _id, address _newContractAddr) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (entries[_id].inWaitPeriodChange){
            revert AlreadyInWaitPeriodChangeError(_id);
        }

        entries[_id].changeStartTime = block.timestamp; // solhint-disable-line
        entries[_id].inContractChange = true;

        pendingAddresses[_id] = _newContractAddr;

        emit StartContractChange(msg.sender, _id, entries[_id].contractAddr, _newContractAddr);
    }

    /// @notice Changes new contract address, correct time must have passed
    /// @param _id Id of contract
    function approveContractChange(bytes4 _id) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (!entries[_id].inContractChange){
            revert EntryNotInChangeError(_id);
        }
        if (block.timestamp < (entries[_id].changeStartTime + entries[_id].waitPeriod)){// solhint-disable-line
            revert ChangeNotReadyError(block.timestamp, (entries[_id].changeStartTime + entries[_id].waitPeriod));
        }

        address oldContractAddr = entries[_id].contractAddr;
        entries[_id].contractAddr = pendingAddresses[_id];
        entries[_id].inContractChange = false;
        entries[_id].changeStartTime = 0;

        pendingAddresses[_id] = address(0);
        previousAddresses[_id] = oldContractAddr;

        emit ApproveContractChange(msg.sender, _id, oldContractAddr, entries[_id].contractAddr);
    }

    /// @notice Cancel pending change
    /// @param _id Id of contract
    function cancelContractChange(bytes4 _id) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (!entries[_id].inContractChange){
            revert EntryNotInChangeError(_id);
        }

        address oldContractAddr = pendingAddresses[_id];

        pendingAddresses[_id] = address(0);
        entries[_id].inContractChange = false;
        entries[_id].changeStartTime = 0;

        emit CancelContractChange(msg.sender, _id, oldContractAddr, entries[_id].contractAddr);
    }

    /// @notice Starts the change for waitPeriod
    /// @param _id Id of contract
    /// @param _newWaitPeriod New wait time
    function startWaitPeriodChange(bytes4 _id, uint256 _newWaitPeriod) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (entries[_id].inContractChange){
            revert AlreadyInContractChangeError(_id);
        }

        pendingWaitTimes[_id] = _newWaitPeriod;

        entries[_id].changeStartTime = block.timestamp; // solhint-disable-line
        entries[_id].inWaitPeriodChange = true;

        emit StartWaitPeriodChange(msg.sender, _id, _newWaitPeriod);
    }

    /// @notice Changes new wait period, correct time must have passed
    /// @param _id Id of contract
    function approveWaitPeriodChange(bytes4 _id) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (!entries[_id].inWaitPeriodChange){
            revert EntryNotInChangeError(_id);
        }
        if (block.timestamp < (entries[_id].changeStartTime + entries[_id].waitPeriod)){ // solhint-disable-line
            revert ChangeNotReadyError(block.timestamp, (entries[_id].changeStartTime + entries[_id].waitPeriod));
        }

        uint256 oldWaitTime = entries[_id].waitPeriod;
        entries[_id].waitPeriod = pendingWaitTimes[_id];
        
        entries[_id].inWaitPeriodChange = false;
        entries[_id].changeStartTime = 0;

        pendingWaitTimes[_id] = 0;

        emit ApproveWaitPeriodChange(msg.sender, _id, oldWaitTime, entries[_id].waitPeriod);
    }

    /// @notice Cancel wait period change
    /// @param _id Id of contract
    function cancelWaitPeriodChange(bytes4 _id) public onlyOwner {
        if (!entries[_id].exists){
            revert EntryNonExistentError(_id);
        }
        if (!entries[_id].inWaitPeriodChange){
            revert EntryNotInChangeError(_id);
        }

        uint256 oldWaitPeriod = pendingWaitTimes[_id];

        pendingWaitTimes[_id] = 0;
        entries[_id].inWaitPeriodChange = false;
        entries[_id].changeStartTime = 0;

        emit CancelWaitPeriodChange(msg.sender, _id, oldWaitPeriod, entries[_id].waitPeriod);
    }
}

Contract ABI

[{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"AlreadyInContractChangeError","type":"error"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"AlreadyInWaitPeriodChangeError","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeNotReadyError","type":"error"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"EmptyPrevAddrError","type":"error"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"EntryAlreadyExistsError","type":"error"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"EntryNonExistentError","type":"error"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"EntryNotInChangeError","type":"error"},{"inputs":[],"name":"NonContractCall","type":"error"},{"inputs":[],"name":"SenderNotAdmin","type":"error"},{"inputs":[],"name":"SenderNotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"AddNewContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ApproveContractChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ApproveWaitPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"CancelContractChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"CancelWaitPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"RevertToPreviousAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"StartContractChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bytes4","name":"","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"StartWaitPeriodChange","type":"event"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"},{"internalType":"address","name":"_contractAddr","type":"address"},{"internalType":"uint256","name":"_waitPeriod","type":"uint256"}],"name":"addNewContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminVault","outputs":[{"internalType":"contract AdminVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"approveContractChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"approveWaitPeriodChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"cancelContractChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"cancelWaitPeriodChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"entries","outputs":[{"internalType":"address","name":"contractAddr","type":"address"},{"internalType":"uint256","name":"waitPeriod","type":"uint256"},{"internalType":"uint256","name":"changeStartTime","type":"uint256"},{"internalType":"bool","name":"inContractChange","type":"bool"},{"internalType":"bool","name":"inWaitPeriodChange","type":"bool"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"getAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"pendingAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"pendingWaitTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"previousAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"}],"name":"revertToPreviousAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"},{"internalType":"address","name":"_newContractAddr","type":"address"}],"name":"startContractChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_id","type":"bytes4"},{"internalType":"uint256","name":"_newWaitPeriod","type":"uint256"}],"name":"startWaitPeriodChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50611927806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638cedca71116100a2578063af8a7c3011610071578063af8a7c3014610294578063b46bcdaa146102a7578063c579d49014610339578063ca5ecb771461034c578063f4753e031461035f57600080fd5b80638cedca711461022057806393b188541461023b5780639d5143ef1461026e578063a2e5827b1461028157600080fd5b80634feb499d116100de5780634feb499d146101865780635ec9144a146101995780635f2c8d06146101ac578063756928ec146101da57600080fd5b806301a6c7481461011057806308f732e61461012557806341c0e1b51461016b5780634e60b09314610173575b600080fd5b61012361011e36600461169d565b610388565b005b61014e61013336600461169d565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610123610546565b61012361018136600461169d565b6105f0565b61012361019436600461169d565b61084d565b6101236101a73660046116d7565b610a60565b6101cc6101ba36600461169d565b60036020526000908152604090205481565b604051908152602001610162565b6102106101e836600461169d565b6001600160e01b03191660009081526020819052604090206003015462010000900460ff1690565b6040519015158152602001610162565b61014e73d47d8d97cad12a866900eec6cde1962529f2535181565b61014e61024936600461169d565b6001600160e01b0319166000908152602081905260409020546001600160a01b031690565b61012361027c36600461170e565b610c27565b61012361028f36600461169d565b610dca565b6101236102a236600461169d565b610f7f565b6102fc6102b536600461169d565b60006020819052908152604090208054600182015460028301546003909301546001600160a01b0390921692909160ff808216916101008104821691620100009091041686565b604080516001600160a01b0390971687526020870195909552938501929092521515606084015215156080830152151560a082015260c001610162565b610123610347366004611738565b61112a565b61012361035a366004611779565b61124b565b61014e61036d36600461169d565b6001602052600090815260409020546001600160a01b031681565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104089190611797565b6001600160a01b03161461042f57604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319811660009081526020819052604090206003015462010000900460ff1661047d578060405163e23b1fcd60e01b815260040161047491906117b4565b60405180910390fd5b6001600160e01b03198116600090815260208190526040902060030154610100900460ff166104c157806040516339fdfa2d60e21b815260040161047491906117b4565b6001600160e01b03198116600090815260036020818152604080842080549085905591849052808420928301805461ff0019169055600283019390935560019190910154915190917fdf60132161e182bda81aa668f62b82e76276b31abf828ad640b8786b44b418cd9161053a913391869186916117c9565b60405180910390a15050565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c69190611797565b6001600160a01b0316146105ed5760405163a6c827a960e01b815260040160405180910390fd5b33ff5b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106709190611797565b6001600160a01b03161461069757604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319811660009081526020819052604090206003015462010000900460ff166106dc578060405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b0319811660009081526020819052604090206003015460ff1661071b57806040516339fdfa2d60e21b815260040161047491906117b4565b6001600160e01b031981166000908152602081905260409020600181015460029091015461074991906117f9565b4210156107a1576001600160e01b0319811660009081526020819052604090206001810154600290910154429161077f916117f9565b6040516378a2225960e11b815260048101929092526024820152604401610474565b6001600160e01b031981166000908152602081815260408083208054600280855283862080546001600160a01b03198085166001600160a01b0392831617865560038601805460ff19169055928501889055815483169091556001865284872080549092169281169283179091559490935254905191927f385ace7ff96c26a149cf999eef2d7e86289209c26363a3989502f336bf5707279261053a923392879287929091169061181f565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611797565b6001600160a01b0316146108f457604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319811660009081526020819052604090206003015462010000900460ff16610939578060405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b03198116600090815260208190526040902060030154610100900460ff1661097d57806040516339fdfa2d60e21b815260040161047491906117b4565b6001600160e01b03198116600090815260208190526040902060018101546002909101546109ab91906117f9565b4210156109e1576001600160e01b0319811660009081526020819052604090206001810154600290910154429161077f916117f9565b6001600160e01b03198116600090815260208181526040808320600181018054600380865284872080548455908401805461ff0019169055600290930186905591859055939092529154915190917fda8652a0ec293e550097d7a47926fd48748aab242896f473390f74315e9feea29161053a913391869186916117c9565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190611797565b6001600160a01b031614610b0757604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319821660009081526020819052604090206003015462010000900460ff16610b4c578160405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b03198216600090815260208190526040902060030154610100900460ff1615610b915781604051639a1187f760e01b815260040161047491906117b4565b6001600160e01b031982166000908152602081815260408083204260028083019190915560038201805460ff19166001179055835281842080546001600160a01b038088166001600160a01b03199092169190911790915593909252905490517f222447d2c4f39c07f6105c3c2b75b5b6d67bd6ecc905b04e09e9d8428ddc6e809261053a92339287929190911690869061181f565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca79190611797565b6001600160a01b031614610cce57604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319821660009081526020819052604090206003015462010000900460ff16610d13578160405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b0319821660009081526020819052604090206003015460ff1615610d535781604051636fd2840160e11b815260040161047491906117b4565b6001600160e01b03198216600081815260036020818152604080842086905583825292839020426002820155909101805461ff00191661010017905581513381529081019290925281018290527f6f54980de020c082334fbd596dd7662b8633c26316c828269eb0df4c06a555199060600161053a565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a9190611797565b6001600160a01b031614610e7157604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319811660009081526020819052604090206003015462010000900460ff16610eb6578060405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b0319811660009081526020819052604090206003015460ff16610ef557806040516339fdfa2d60e21b815260040161047491906117b4565b6001600160e01b03198116600090815260026020818152604080842080546001600160a01b031981169091559184905280842060038101805460ff1916905592830193909355905491516001600160a01b03918216927f88a187c196adbb15d3089e7ea05fa1eb509bbd8fc627cd2ac5390b6813631f989261053a9233928792879291169061181f565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190611797565b6001600160a01b03161461102657604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319811660009081526020819052604090206003015462010000900460ff1661106b578060405163e23b1fcd60e01b815260040161047491906117b4565b6001600160e01b031981166000908152600160205260409020546001600160a01b03166110ad57806040516319b164cb60e01b815260040161047491906117b4565b6001600160e01b03198116600090815260208181526040808320805460019093529281902080546001600160a01b039081166001600160a01b0319851617909455549051918316927f402251201b1d88c904a19dbaf64c0a1adc3d89e7e519acc78ea57c7ba91c032a9261053a923392879287929091169061181f565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111aa9190611797565b6001600160a01b0316146111d157604051630ca4a64560e11b815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415611232576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561122c573d6000803e3d6000fd5b50505050565b6112466001600160a01b038416838361145f565b505050565b336001600160a01b031673d47d8d97cad12a866900eec6cde1962529f253516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190611797565b6001600160a01b0316146112f257604051630ca4a64560e11b815260040160405180910390fd5b6001600160e01b0319831660009081526020819052604090206003015462010000900460ff1615611338578260405163484513e960e01b815260040161047491906117b4565b6040805160c0810182526001600160a01b038085168252602080830185815260008486018181526060860182815260808701838152600160a089018181526001600160e01b03198e16865296859052938990209751885497166001600160a01b03199097169690961787559251918601919091555160028501555160039093018054925191511515620100000262ff0000199215156101000261ff00199515159590951661ffff19909416939093179390931716179055517f4c7de3759e234461df3ecb1c5c32e64f91ed774d22519fba69a9c41e5c978a21906114529033908690869086906001600160a01b0394851681526001600160e01b031993909316602084015292166040820152606081019190915260800190565b60405180910390a1505050565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152611246928692916000916114ef91851690849061156c565b805190915015611246578080602001905181019061150d9190611854565b6112465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610474565b606061157b8484600085611583565b949350505050565b606061158e85611647565b6115ab5760405163304619b560e01b815260040160405180910390fd5b600080866001600160a01b031685876040516115c791906118a2565b60006040518083038185875af1925050503d8060008114611604576040519150601f19603f3d011682016040523d82523d6000602084013e611609565b606091505b5091509150811561161d57915061157b9050565b80511561162d5780518082602001fd5b8360405162461bcd60e51b815260040161047491906118be565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061157b575050151592915050565b80356001600160e01b03198116811461169857600080fd5b919050565b6000602082840312156116af57600080fd5b6116b882611680565b9392505050565b6001600160a01b03811681146116d457600080fd5b50565b600080604083850312156116ea57600080fd5b6116f383611680565b91506020830135611703816116bf565b809150509250929050565b6000806040838503121561172157600080fd5b61172a83611680565b946020939093013593505050565b60008060006060848603121561174d57600080fd5b8335611758816116bf565b92506020840135611768816116bf565b929592945050506040919091013590565b60008060006060848603121561178e57600080fd5b61175884611680565b6000602082840312156117a957600080fd5b81516116b8816116bf565b6001600160e01b031991909116815260200190565b6001600160a01b039490941684526001600160e01b03199290921660208401526040830152606082015260800190565b6000821982111561181a57634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b0394851681526001600160e01b03199390931660208401529083166040830152909116606082015260800190565b60006020828403121561186657600080fd5b815180151581146116b857600080fd5b60005b83811015611891578181015183820152602001611879565b8381111561122c5750506000910152565b600082516118b4818460208701611876565b9190910192915050565b60208152600082518060208401526118dd816040850160208701611876565b601f01601f1916919091016040019291505056fea2646970667358221220b98968807ddd173106d0a203f791aa92a3b9271336f22564b9ffbafca8fa617c64736f6c634300080a0033

Deployed ByteCode Sourcemap

11477:8207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19124:557;;;;;;:::i;:::-;;:::i;:::-;;12670:50;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12670:50:0;;;;;;-1:-1:-1;;;;;545:32:1;;;527:51;;515:2;500:18;12670:50:0;;;;;;;;11377:85;;;:::i;15799:921::-;;;;;;:::i;:::-;;:::i;18172:866::-;;;;;;:::i;:::-;;:::i;15095:584::-;;;;;;:::i;:::-;;:::i;12727:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1195:25:1;;;1183:2;1168:18;12727:50:0;1049:177:1;13163:106:0;;;;;;:::i;:::-;-1:-1:-1;;;;;;13242:12:0;13218:4;13242:12;;;;;;;;;;:19;;;;;;;;;13163:106;;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;13163:106:0;1231:187:1;10548:68:0;;9492:42;10548:68;;12941:110;;;;;;:::i;:::-;-1:-1:-1;;;;;;13018:12:0;12991:7;13018:12;;;;;;;;;;:25;-1:-1:-1;;;;;13018:25:0;;12941:110;17504:553;;;;;;:::i;:::-;;:::i;16802:564::-;;;;;;:::i;:::-;;:::i;14370:491::-;;;;;;:::i;:::-;;:::i;12564:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12564:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2193:32:1;;;2175:51;;2257:2;2242:18;;2235:34;;;;2285:18;;;2278:34;;;;2355:14;2348:22;2343:2;2328:18;;2321:50;2415:14;2408:22;2402:3;2387:19;;2380:51;2475:14;2468:22;2213:3;2447:19;;2440:51;2162:3;2147:19;12564:39:0;1906:591:1;11015:316:0;;;;;;:::i;:::-;;:::i;13595:576::-;;;;;;:::i;:::-;;:::i;12610:51::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12610:51:0;;;19124:557;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;19201:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;19196:85;;19265:3;19243:26;;-1:-1:-1::0;;;19243:26:0::1;;;;;;;;:::i;:::-;;;;;;;;19196:85;-1:-1:-1::0;;;;;;19296:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;;19291:97;;19372:3;19350:26;;-1:-1:-1::0;;;19350:26:0::1;;;;;;;;:::i;19291:97::-;-1:-1:-1::0;;;;;;19424:21:0;::::1;19400;19424::::0;;;:16:::1;:21;::::0;;;;;;;;;19458:25;;;;19494:12;;;;;;;:31;;::::1;:39:::0;;-1:-1:-1;;19494:39:0::1;::::0;;19544:28:::1;::::0;::::1;:32:::0;;;;-1:-1:-1;19649:23:0;;;::::1;::::0;19594:79;;19424:21;;19594:79:::1;::::0;::::1;::::0;19617:10:::1;::::0;19441:3;;19424:21;;19594:79:::1;:::i;:::-;;;;;;;;19185:496;19124:557:::0;:::o;11377:85::-;10889:10;-1:-1:-1;;;;;10867:32:0;9492:42;-1:-1:-1;;;;;10867:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10867:32:0;;10863:87;;10922:16;;-1:-1:-1;;;10922:16:0;;;;;;;;;;;10863:87;11442:10:::1;11421:33;15799:921:::0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;15875:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;15870:85;;15939:3;15917:26;;-1:-1:-1::0;;;15917:26:0::1;;;;;;;;:::i;15870:85::-;-1:-1:-1::0;;;;;;15970:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:29:::1;;::::0;::::1;;15965:95;;16044:3;16022:26;;-1:-1:-1::0;;;16022:26:0::1;;;;;;;;:::i;15965:95::-;-1:-1:-1::0;;;;;;16124:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:23:::1;::::0;::::1;::::0;16093:28:::1;::::0;;::::1;::::0;:54:::1;::::0;16124:23;16093:54:::1;:::i;:::-;16074:15;:74;16070:230;;;-1:-1:-1::0;;;;;;16263:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:23:::1;::::0;::::1;::::0;16232:28:::1;::::0;;::::1;::::0;16214:15:::1;::::0;16232:54:::1;::::0;::::1;:::i;:::-;16194:94;::::0;-1:-1:-1;;;16194:94:0;;::::1;::::0;::::1;4669:25:1::0;;;;4710:18;;;4703:34;4642:18;;16194:94:0::1;4495:248:1::0;16070:230:0::1;-1:-1:-1::0;;;;;;16338:12:0;::::1;16312:23;16338:12:::0;;;::::1;::::0;;;;;;;:25;;16402:16:::1;:21:::0;;;;;;;;-1:-1:-1;;;;;;16374:49:0;;::::1;-1:-1:-1::0;;;;;16402:21:0;;::::1;16374:49;::::0;;16434:29:::1;::::0;::::1;:37:::0;;-1:-1:-1;;16434:37:0::1;::::0;;16482:28;;::::1;:32:::0;;;16527:34;;;::::1;::::0;;;16338:25;16572:22;;;;;:40;;;;::::1;16338:25:::0;;::::1;16572:40:::0;;::::1;::::0;;;16686:12;;;;:25;16630:82;;16338:25;;16630:82:::1;::::0;::::1;::::0;16652:10:::1;::::0;16346:3;;16338:25;;16686;;::::1;::::0;16630:82:::1;:::i;18172:866::-:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;18250:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;18245:85;;18314:3;18292:26;;-1:-1:-1::0;;;18292:26:0::1;;;;;;;;:::i;18245:85::-;-1:-1:-1::0;;;;;;18345:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;;18340:97;;18421:3;18399:26;;-1:-1:-1::0;;;18399:26:0::1;;;;;;;;:::i;18340:97::-;-1:-1:-1::0;;;;;;18501:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:23:::1;::::0;::::1;::::0;18470:28:::1;::::0;;::::1;::::0;:54:::1;::::0;18501:23;18470:54:::1;:::i;:::-;18451:15;:74;18447:231;;;-1:-1:-1::0;;;;;;18641:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:23:::1;::::0;::::1;::::0;18610:28:::1;::::0;;::::1;::::0;18592:15:::1;::::0;18610:54:::1;::::0;::::1;:::i;18447:231::-;-1:-1:-1::0;;;;;;18712:12:0;::::1;18690:19;18712:12:::0;;;::::1;::::0;;;;;;;:23:::1;::::0;::::1;::::0;;18772:16:::1;:21:::0;;;;;;;;18746:47;;18814:31;;::::1;:39:::0;;-1:-1:-1;;18814:39:0::1;::::0;;18864:28:::1;::::0;;::::1;:32:::0;;;18909:25;;;;19006:12;;;;:23;;18952:78;;18712:23;;18952:78:::1;::::0;::::1;::::0;18976:10:::1;::::0;18720:3;;18712:23;;18952:78:::1;:::i;15095:584::-:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;15195:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;15190:85;;15259:3;15237:26;;-1:-1:-1::0;;;15237:26:0::1;;;;;;;;:::i;15190:85::-;-1:-1:-1::0;;;;;;15289:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;;15285:105;;;15374:3;15343:35;;-1:-1:-1::0;;;15343:35:0::1;;;;;;;;:::i;15285:105::-;-1:-1:-1::0;;;;;;15402:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;;15433:15:::1;15402:28;::::0;;::::1;:46:::0;;;;15483:29:::1;::::0;::::1;:36:::0;;-1:-1:-1;;15483:36:0::1;15515:4;15483:36;::::0;;15532:21;;;;;:40;;-1:-1:-1;;;;;15532:40:0;;::::1;-1:-1:-1::0;;;;;;15532:40:0;;::::1;::::0;;;::::1;::::0;;;15627:12;;;;:25;;15590:81;;::::1;::::0;::::1;::::0;15610:10:::1;::::0;15410:3;;15627:25;;;::::1;::::0;15556:16;;15590:81:::1;:::i;17504:553::-:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;17604:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;17599:85;;17668:3;17646:26;;-1:-1:-1::0;;;17646:26:0::1;;;;;;;;:::i;17599:85::-;-1:-1:-1::0;;;;;;17698:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:29:::1;;::::0;::::1;;17694:101;;;17779:3;17750:33;;-1:-1:-1::0;;;17750:33:0::1;;;;;;;;:::i;17694:101::-;-1:-1:-1::0;;;;;;17807:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;;;;:38;;;17858:12;;;;;;;17889:15:::1;17858:28;::::0;::::1;:46:::0;17939:31;;::::1;:38:::0;;-1:-1:-1;;17939:38:0::1;;;::::0;;17995:54;;18017:10:::1;5434:51:1::0;;5501:18;;;5494:61;;;;5571:18;;5564:34;;;17995:54:0::1;::::0;5422:2:1;5407:18;17995:54:0::1;5234:370:1::0;16802:564:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;16877:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;16872:85;;16941:3;16919:26;;-1:-1:-1::0;;;16919:26:0::1;;;;;;;;:::i;16872:85::-;-1:-1:-1::0;;;;;;16972:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:29:::1;;::::0;::::1;;16967:95;;17046:3;17024:26;;-1:-1:-1::0;;;17024:26:0::1;;;;;;;;:::i;16967:95::-;-1:-1:-1::0;;;;;;17100:21:0;::::1;17074:23;17100:21:::0;;;:16:::1;:21;::::0;;;;;;;;;-1:-1:-1;;;;;;17134:34:0;::::1;::::0;;;17179:12;;;;;;;:29:::1;::::0;::::1;:37:::0;;-1:-1:-1;;17179:37:0::1;::::0;;17227:28;;::::1;:32:::0;;;;17332:25;;17277:81;;-1:-1:-1;;;;;17100:21:0;;::::1;::::0;17277:81:::1;::::0;::::1;::::0;17298:10:::1;::::0;17117:3;;17100:21;;17332:25;::::1;::::0;17277:81:::1;:::i;14370:491::-:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;14449:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;14443:87;;14514:3;14492:26;;-1:-1:-1::0;;;14492:26:0::1;;;;;;;;:::i;14443:87::-;-1:-1:-1::0;;;;;;14544:22:0;::::1;14578:1;14544:22:::0;;;:17:::1;:22;::::0;;;;;-1:-1:-1;;;;;14544:22:0::1;14540:98;;14622:3;14603:23;;-1:-1:-1::0;;;14603:23:0::1;;;;;;;;:::i;14540:98::-;-1:-1:-1::0;;;;;;14672:12:0;::::1;14650:19;14672:12:::0;;;::::1;::::0;;;;;;;:25;;;14736:22;;;;;;;;;-1:-1:-1;;;;;14736:22:0;;::::1;-1:-1:-1::0;;;;;;14708:50:0;::::1;;::::0;;;14830:22;14776:77;;14672:25;;::::1;::::0;14776:77:::1;::::0;::::1;::::0;14800:10:::1;::::0;14672:12;;:25;;14830:22;;::::1;::::0;14776:77:::1;:::i;11015:316::-:0;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;11137:42:::1;-1:-1:-1::0;;;;;11127:52:0;::::1;;11123:201;;;11196:36;::::0;-1:-1:-1;;;;;11196:27:0;::::1;::::0;:36;::::1;;;::::0;11224:7;;11196:36:::1;::::0;;;11224:7;11196:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11015:316:::0;;;:::o;11123:201::-:1;11265:47;-1:-1:-1::0;;;;;11265:27:0;::::1;11293:9:::0;11304:7;11265:27:::1;:47::i;:::-;11015:316:::0;;;:::o;13595:576::-;10743:10;-1:-1:-1;;;;;10721:32:0;9492:42;-1:-1:-1;;;;;10721:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10721:32:0;;10717:87;;10776:16;;-1:-1:-1;;;10776:16:0;;;;;;;;;;;10717:87;-1:-1:-1;;;;;;13741:12:0;::::1;:7;:12:::0;;;::::1;::::0;;;;;;:19:::1;;::::0;;;::::1;;;13737:86;;;13807:3;13783:28;;-1:-1:-1::0;;;13783:28:0::1;;;;;;;;:::i;13737:86::-;13850:236;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;13850:236:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13850:236:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13835:12:0;::::1;::::0;;;;;;;;;;:251;;;;;::::1;-1:-1:-1::0;;;;;;13835:251:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;::::1;-1:-1:-1::0;;13835:251:0;::::1;;;;-1:-1:-1::0;;13835:251:0;::::1;;::::0;;;;-1:-1:-1;;13835:251:0;;;;;;;;;;::::1;;;::::0;;14104:59;::::1;::::0;::::1;::::0;14119:10:::1;::::0;13843:3;;13885:13;;13925:11;;-1:-1:-1;;;;;5894:15:1;;;5876:34;;-1:-1:-1;;;;;;5946:33:1;;;;5941:2;5926:18;;5919:61;6016:15;;6011:2;5996:18;;5989:43;6063:2;6048:18;;6041:34;;;;5825:3;5810:19;;5609:472;14104:59:0::1;;;;;;;;13595:576:::0;;;:::o;7176:211::-;7320:58;;;-1:-1:-1;;;;;6278:32:1;;;7320:58:0;;;6260:51:1;6327:18;;;;6320:34;;;7320:58:0;;;;;;;;;;6233:18:1;;;;7320:58:0;;;;;;;;-1:-1:-1;;;;;7320:58:0;-1:-1:-1;;;7320:58:0;;;9033:106;;;;;;;;;;;;;;;;7293:86;;7313:5;;7320:58;-1:-1:-1;;9033:106:0;;:27;;;7320:58;;9033:27;:106::i;:::-;9154:17;;9007:132;;-1:-1:-1;9154:21:0;9150:237;;9309:10;9298:30;;;;;;;;;;;;:::i;:::-;9290:85;;;;-1:-1:-1;;;9290:85:0;;6849:2:1;9290:85:0;;;6831:21:1;6888:2;6868:18;;;6861:30;6927:34;6907:18;;;6900:62;-1:-1:-1;;;6978:18:1;;;6971:40;7028:19;;9290:85:0;6647:406:1;3198:230:0;3335:12;3367:53;3390:6;3398:4;3404:1;3407:12;3367:22;:53::i;:::-;3360:60;3198:230;-1:-1:-1;;;;3198:230:0:o;4148:1036::-;4321:12;4352:18;4363:6;4352:10;:18::i;:::-;4346:77;;4394:17;;-1:-1:-1;;;4394:17:0;;;;;;;;;;;4346:77;4496:12;4510:23;4537:6;-1:-1:-1;;;;;4537:11:0;4556:8;4566:4;4537:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4495:76;;;;4586:7;4582:595;;;4617:10;-1:-1:-1;4610:17:0;;-1:-1:-1;4610:17:0;4582:595;4731:17;;:21;4727:439;;4994:10;4988:17;5055:15;5042:10;5038:2;5034:19;5027:44;4727:439;5137:12;5130:20;;-1:-1:-1;;;5130:20:0;;;;;;;;:::i;1908:641::-;1968:4;2449:20;;2279:66;2498:23;;;;;;:42;;-1:-1:-1;;2525:15:0;;;2490:51;-1:-1:-1;;1908:641:0:o;14:173:1:-;81:20;;-1:-1:-1;;;;;;130:32:1;;120:43;;110:71;;177:1;174;167:12;110:71;14:173;;;:::o;192:184::-;250:6;303:2;291:9;282:7;278:23;274:32;271:52;;;319:1;316;309:12;271:52;342:28;360:9;342:28;:::i;:::-;332:38;192:184;-1:-1:-1;;;192:184:1:o;589:131::-;-1:-1:-1;;;;;664:31:1;;654:42;;644:70;;710:1;707;700:12;644:70;589:131;:::o;725:319::-;792:6;800;853:2;841:9;832:7;828:23;824:32;821:52;;;869:1;866;859:12;821:52;892:28;910:9;892:28;:::i;:::-;882:38;;970:2;959:9;955:18;942:32;983:31;1008:5;983:31;:::i;:::-;1033:5;1023:15;;;725:319;;;;;:::o;1649:252::-;1716:6;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1816:28;1834:9;1816:28;:::i;:::-;1806:38;1891:2;1876:18;;;;1863:32;;-1:-1:-1;;;1649:252:1:o;2502:456::-;2579:6;2587;2595;2648:2;2636:9;2627:7;2623:23;2619:32;2616:52;;;2664:1;2661;2654:12;2616:52;2703:9;2690:23;2722:31;2747:5;2722:31;:::i;:::-;2772:5;-1:-1:-1;2829:2:1;2814:18;;2801:32;2842:33;2801:32;2842:33;:::i;:::-;2502:456;;2894:7;;-1:-1:-1;;;2948:2:1;2933:18;;;;2920:32;;2502:456::o;2963:387::-;3039:6;3047;3055;3108:2;3096:9;3087:7;3083:23;3079:32;3076:52;;;3124:1;3121;3114:12;3076:52;3147:28;3165:9;3147:28;:::i;3355:251::-;3425:6;3478:2;3466:9;3457:7;3453:23;3449:32;3446:52;;;3494:1;3491;3484:12;3446:52;3526:9;3520:16;3545:31;3570:5;3545:31;:::i;3611:202::-;-1:-1:-1;;;;;;3773:33:1;;;;3755:52;;3743:2;3728:18;;3611:202::o;3818:442::-;-1:-1:-1;;;;;4065:32:1;;;;4047:51;;-1:-1:-1;;;;;;4134:33:1;;;;4129:2;4114:18;;4107:61;4199:2;4184:18;;4177:34;4242:2;4227:18;;4220:34;4034:3;4019:19;;3818:442::o;4265:225::-;4305:3;4336:1;4332:6;4329:1;4326:13;4323:136;;;4381:10;4376:3;4372:20;4369:1;4362:31;4416:4;4413:1;4406:15;4444:4;4441:1;4434:15;4323:136;-1:-1:-1;4475:9:1;;4265:225::o;4748:481::-;-1:-1:-1;;;;;5033:15:1;;;5015:34;;-1:-1:-1;;;;;;5085:33:1;;;;5080:2;5065:18;;5058:61;5155:15;;;5150:2;5135:18;;5128:43;5207:15;;;5202:2;5187:18;;5180:43;4964:3;4949:19;;4748:481::o;6365:277::-;6432:6;6485:2;6473:9;6464:7;6460:23;6456:32;6453:52;;;6501:1;6498;6491:12;6453:52;6533:9;6527:16;6586:5;6579:13;6572:21;6565:5;6562:32;6552:60;;6608:1;6605;6598:12;7058:258;7130:1;7140:113;7154:6;7151:1;7148:13;7140:113;;;7230:11;;;7224:18;7211:11;;;7204:39;7176:2;7169:10;7140:113;;;7271:6;7268:1;7265:13;7262:48;;;-1:-1:-1;;7306:1:1;7288:16;;7281:27;7058:258::o;7321:274::-;7450:3;7488:6;7482:13;7504:53;7550:6;7545:3;7538:4;7530:6;7526:17;7504:53;:::i;:::-;7573:16;;;;;7321:274;-1:-1:-1;;7321:274:1:o;7600:383::-;7749:2;7738:9;7731:21;7712:4;7781:6;7775:13;7824:6;7819:2;7808:9;7804:18;7797:34;7840:66;7899:6;7894:2;7883:9;7879:18;7874:2;7866:6;7862:15;7840:66;:::i;:::-;7967:2;7946:15;-1:-1:-1;;7942:29:1;7927:45;;;;7974:2;7923:54;;7600:383;-1:-1:-1;;7600:383:1:o

Metadata Hash

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