Contract 0x82123571C8a5e0910280C066bc634c4945FFcbC8 1

 
 
Txn Hash
Method
Block
From
To
Value
0x36383d9b81840babee03a705d2c151f7fb0967d952c4109cc8c5c188bc990818Update State153623042022-08-18 2:06:5312 hrs 7 mins agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍004847730
0xb0fc6a3f74aeb060c64126f9bac7f6eff651d7db2258f804282867aa628eb58fUpdate State153596982022-08-17 16:09:1822 hrs 5 mins agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0034245630
0xe2ba918aef97d71f4a6e415f1f297b5852b1a0b1c4353c517a5befbb229e8d14Update State153539562022-08-16 18:34:441 day 19 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0046402530
0xa3a18bfde52fac0cba30c78833e8edb807359a59d1ebac5802e7593269190925Deposit ERC20153506342022-08-16 5:56:562 days 8 hrs ago0x16869fdb8adad248330ebf7a1f19859cecb491be IN  Layer2Finance: Stark Exchange0 Ether0.‍0009551 8
0xaedad58e424a2bdcfe49d8ff5c484b935d49ac43b75aeb06cb0368f0bc9491acWithdraw153506172022-08-16 5:52:392 days 8 hrs ago0x16869fdb8adad248330ebf7a1f19859cecb491be IN  Layer2Finance: Stark Exchange0 Ether0.‍00087656 8.‍32074268
0x3dc91462207d63e5ec1b2c4e60c8b92bc8e13832b27c9f6bfea10653853b0af4Update State153276072022-08-12 14:51:385 days 23 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍00434730
0xe9eb1c1afa9228ea90d14093da06eabff2fc1c1b1e2df6c066e543b7a4cfa591Deposit ERC20153254802022-08-12 6:40:206 days 7 hrs ago0x16869fdb8adad248330ebf7a1f19859cecb491be IN  Layer2Finance: Stark Exchange0 Ether0.‍00115661 10.‍09367991
0x9cd284b44fd7be0783d0a185de2c32f827a88cccb5198c9a5542962d6b87466cUpdate State153217512022-08-11 16:27:366 days 21 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍00455430
0xfb675dc2aaa3b9ebbff29ad9170d8dcf6626af9760485a2ed5ff7d564e9d52feUpdate State153217512022-08-11 16:27:366 days 21 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0045536430
0xa984577a0b6cbe987139c460e73220f6627d44c5918baf732521b173fcf85dceDeposit Eth153194472022-08-11 7:35:597 days 6 hrs agoENS Name alexlevkin.eth IN  Layer2Finance: Stark Exchange0.‍1 Ether0.‍00136802 18.‍11420898
0x7c23a14d0023e282cb9c3f3fcc2fe44d4c9b60bef9725760ae30f33ebd3c7588Deposit Eth153184122022-08-11 3:45:067 days 10 hrs ago0x0e636d680b300214cf10e3343d0eef14f642c8a4 IN  Layer2Finance: Stark Exchange0.‍01 Ether0.‍00205917 27.‍26595002
0x3e116077fc6f281221626a0e4cd1c4fb1dbe2a9e20de79203b4ddeebddb96938Update State152986772022-08-08 1:24:5510 days 12 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0044772630
0x36e547e99a0f0bc59986e65886a0f8a30238819b6043406dfd76d74b2247d52dUpdate State152828572022-08-05 14:24:3012 days 23 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0050680830
0x69a81222974da40d18897353ecba4a330f6ab5182889dbb18fe0882e07e03aaeDeposit ERC20152773222022-08-04 17:58:3713 days 20 hrs agoENS Name newold.eth IN  Layer2Finance: Stark Exchange0 Ether0.‍00179082 15
0x575067f5e6d685902b2a5ea2aabec415232eb1b635c633914b43b5dc35215118Update State152704492022-08-03 16:14:0714 days 22 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0034234830
0x1e211f808a7787b53aab4b12428b15ee7498366bcc3fe52db365f9433507babaUpdate State152670852022-08-03 3:33:1715 days 10 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0035773530
0x0cd713fd4c0b4840791a6dffa1eaa526b0f6380462f3207dc351376dd27d652bDeposit Eth152652852022-08-02 20:43:1515 days 17 hrs ago0x5cbb805a48ea285c0824cba4c3163d1ab062f0e6 IN  Layer2Finance: Stark Exchange0.‍001 Ether0.‍00157844 20.‍90046871
0xbddbf6d2a15598f118b0bee65d560c333f23e57cd6153b1eaa047836d7a2ea4fUpdate State152640162022-08-02 15:54:4715 days 22 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0034995630
0x6d7fee4621b173e5640a93ad61b4498ebadc007790ad1cd05c51e1ebce8b3506Deposit ERC20152628632022-08-02 11:33:3116 days 2 hrs ago0xb4dc4c7460c58e7652cd615675a1f707ebb67e9a IN  Layer2Finance: Stark Exchange0 Ether0.‍00048914 4.‍09666642
0xaa3459c2716c48c6bdca25e7c8dc825583c5f572bbb051976a79a810f5294506Deposit Eth152627482022-08-02 11:09:4616 days 3 hrs ago0xb4dc4c7460c58e7652cd615675a1f707ebb67e9a IN  Layer2Finance: Stark Exchange0.‍05 Ether0.‍00057285 7.‍5853067
0x3cdddc9302916df3e38130ade8fbe3b86d0b5d11f3eb3bd43f3d4be4713faf62Deposit ERC20152625912022-08-02 10:37:4216 days 3 hrs agoENS Name fiatfalls.eth IN  Layer2Finance: Stark Exchange0 Ether0.‍00070695 5.‍92087124
0xcb0c3da40911c88fcdb580a5fee563717764126e8f1734c1386e51a23ea8b2e2Deposit Eth152596132022-08-01 23:28:3516 days 14 hrs agoENS Name fiatfalls.eth IN  Layer2Finance: Stark Exchange0.‍0252 Ether0.‍00112627 19.‍27826452
0x706ddd2f798c233fdba3e4f22a11966fddf86e048e6e1c909cfc6b8674509f66Deposit Eth152595762022-08-01 23:17:5116 days 14 hrs agoENS Name fiatfalls.eth IN  Layer2Finance: Stark Exchange0.‍05 Ether0.‍00058784 7.‍78371865
0x554b4bf1c98e7d78579b4b6517002819c64c96673020c5a5b7d922be35a87852Update State152040852022-07-24 7:51:3825 days 6 hrs agoLayer2Finance: Operator IN  Layer2Finance: Stark Exchange0 Ether0.‍0045529230
0x8e729cc25b3e6414c65d92cc33a7ad6bdf1f39c42ae5139398e4770629199ea7Deposit Eth151990842022-07-23 13:07:3426 days 1 hr ago0x9c35d50a7d1ef9cd1c2e60fa48e5eae00101ef1b IN  Layer2Finance: Stark Exchange0.‍01 Ether0.‍00080613 10.‍67415879
[ Download CSV Export 
Latest 10 internal transactions
Parent Txn Hash Block From To Value
0x23f7a147cbd9a91bed7a94f4e37d1b51d669dacc6cc85cc5c88abb2ba1e828da151893972022-07-22 1:10:2827 days 13 hrs ago Layer2Finance: Stark ExchangeENS Name wy3311.eth0.‍01 Ether
0x27cafe8731427f5472da48834c34226007a58600cb1a40707264b47245bbc470151647842022-07-18 5:36:0031 days 8 hrs ago Layer2Finance: Stark Exchange0x8e6db1ffbb82c1e148dcf8865e8f491816065dc30.‍018266 Ether
0x713883671d8350f1e3953364900bc19f63665f53874c44fbf09f1412e51a86f0150138312022-06-23 16:30:4755 days 21 hrs ago Layer2Finance: Stark Exchange0xd707d4cc7baedc84397bb239f0a12aaf123428170.‍15 Ether
0x6d256305f707d640292ae578fc5a097ea49d6020dc42a110fe5dcf09bc03c646149139252022-06-06 8:18:1673 days 5 hrs ago Layer2Finance: Stark Exchange0x2d185421f556ea40bd67f5512cca15f2a793ba550.‍1828811 Ether
0xdf0ca273e837f6ad49aa83a91e0686dfacfd0cde906f455923e85a5bcbd9ac9b148957212022-06-03 7:00:1276 days 7 hrs ago Layer2Finance: Broker Layer2Finance: Stark Exchange0.‍1821623 Ether
0x550e326f574cda3122c02163a11a8ec32026235c97ce0eb5a9d5a8071f381b88148271172022-05-23 3:03:1987 days 11 hrs ago Layer2Finance: Stark Exchange Layer2Finance: Broker0.‍18216 Ether
0x5376875482a4c10290fefa6570fa77ed7c6ee362a7a43c7b6bac297dd7c4eeee144845222022-03-30 1:08:01141 days 13 hrs ago Layer2Finance: Stark Exchange Layer2Finance: Broker0.‍0099 Ether
0xccac01609afaf6734710ff01bd3be06eff467fc95a9ae4a1a84c568638b176c5144674092022-03-27 9:28:38144 days 4 hrs ago Layer2Finance: Stark ExchangeLayer2Finance: Broker Owner0.‍01 Ether
0x7acd1d6a7e386b3b010daf6b5a3848b25bed97dcd57c3927f3f959014e26372f144646862022-03-26 23:10:56144 days 15 hrs ago 0x0c31fe39e92aef906dbc04a8f77a2bc528bdf3bd Layer2Finance: Stark Exchange0.‍00200616 Ether
0xb1538329eb2b7bbc3d41e0e49c475a65e3cb4fcc38b506203018501f7f587b52144456262022-03-23 23:52:16147 days 14 hrs ago Layer2Finance: Stark Exchange 0xcc094b5d01e4abd32d91c4ed7866b950714014c40.‍01 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Proxy

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity Multiple files format)

File 5 of 8: Proxy.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

import "ProxyGovernance.sol";
import "ProxyStorage.sol";
import "StorageSlots.sol";
import "Common.sol";

/**
  The Proxy contract implements delegation of calls to other contracts (`implementations`), with
  proper forwarding of return values and revert reasons. This pattern allows retaining the contract
  storage while replacing implementation code.

  The following operations are supported by the proxy contract:

  - :sol:func:`addImplementation`: Defines a new implementation, the data with which it should be initialized and whether this will be the last version of implementation.
  - :sol:func:`upgradeTo`: Once an implementation is added, the governor may upgrade to that implementation only after a safety time period has passed (time lock), the current implementation is not the last version and the implementation is not frozen (see :sol:mod:`FullWithdrawals`).
  - :sol:func:`removeImplementation`: Any announced implementation may be removed. Removing an implementation is especially important once it has been used for an upgrade in order to avoid an additional unwanted revert to an older version.

  The only entity allowed to perform the above operations is the proxy governor
  (see :sol:mod:`ProxyGovernance`).

  Every implementation is required to have an `initialize` function that replaces the constructor
  of a normal contract. Furthermore, the only parameter of this function is an array of bytes
  (`data`) which may be decoded arbitrarily by the `initialize` function. It is up to the
  implementation to ensure that this function cannot be run more than once if so desired.

  When an implementation is added (:sol:func:`addImplementation`) the initialization `data` is also
  announced, allowing users of the contract to analyze the full effect of an upgrade to the new
  implementation. During an :sol:func:`upgradeTo`, the `data` is provided again and only if it is
  identical to the announced `data` is the upgrade performed by pointing the proxy to the new
  implementation and calling its `initialize` function with this `data`.

  It is the responsibility of the implementation not to overwrite any storage belonging to the
  proxy (`ProxyStorage`). In addition, upon upgrade, the new implementation is assumed to be
  backward compatible with previous implementations with respect to the storage used until that
  point.
*/
contract Proxy is ProxyStorage, ProxyGovernance, StorageSlots {
    // Emitted when the active implementation is replaced.
    event ImplementationUpgraded(address indexed implementation, bytes initializer);

    // Emitted when an implementation is submitted as an upgrade candidate and a time lock
    // is activated.
    event ImplementationAdded(address indexed implementation, bytes initializer, bool finalize);

    // Emitted when an implementation is removed from the list of upgrade candidates.
    event ImplementationRemoved(address indexed implementation, bytes initializer, bool finalize);

    // Emitted when the implementation is finalized.
    event FinalizedImplementation(address indexed implementation);

    using Addresses for address;

    string public constant PROXY_VERSION = "3.0.1";

    constructor(uint256 upgradeActivationDelay) public {
        initGovernance();
        setUpgradeActivationDelay(upgradeActivationDelay);
    }

    function setUpgradeActivationDelay(uint256 delayInSeconds) private {
        bytes32 slot = UPGRADE_DELAY_SLOT;
        assembly {
            sstore(slot, delayInSeconds)
        }
    }

    function getUpgradeActivationDelay() public view returns (uint256 delay) {
        bytes32 slot = UPGRADE_DELAY_SLOT;
        assembly {
            delay := sload(slot)
        }
        return delay;
    }

    /*
      Returns the address of the current implementation.
    */
    // NOLINTNEXTLINE external-function.
    function implementation() public view returns (address _implementation) {
        bytes32 slot = IMPLEMENTATION_SLOT;
        assembly {
            _implementation := sload(slot)
        }
    }

    /*
      Returns true if the implementation is frozen.
      If the implementation was not assigned yet, returns false.
    */
    function implementationIsFrozen() private returns (bool) {
        address _implementation = implementation();

        // We can't call low level implementation before it's assigned. (i.e. ZERO).
        if (_implementation == address(0x0)) {
            return false;
        }

        // NOLINTNEXTLINE: low-level-calls.
        (bool success, bytes memory returndata) = _implementation.delegatecall(
            abi.encodeWithSignature("isFrozen()")
        );
        require(success, string(returndata));
        return abi.decode(returndata, (bool));
    }

    /*
      This method blocks delegation to initialize().
      Only upgradeTo should be able to delegate call to initialize().
    */
    function initialize(
        bytes calldata /*data*/
    ) external pure {
        revert("CANNOT_CALL_INITIALIZE");
    }

    modifier notFinalized() {
        require(isNotFinalized(), "IMPLEMENTATION_FINALIZED");
        _;
    }

    /*
      Forbids calling the function if the implementation is frozen.
      This modifier relies on the lower level (logical contract) implementation of isFrozen().
    */
    modifier notFrozen() {
        require(!implementationIsFrozen(), "STATE_IS_FROZEN");
        _;
    }

    /*
      This entry point serves only transactions with empty calldata. (i.e. pure value transfer tx).
      We don't expect to receive such, thus block them.
    */
    receive() external payable {
        revert("CONTRACT_NOT_EXPECTED_TO_RECEIVE");
    }

    /*
      Contract's default function. Delegates execution to the implementation contract.
      It returns back to the external caller whatever the implementation delegated code returns.
    */
    fallback() external payable {
        address _implementation = implementation();
        require(_implementation != address(0x0), "MISSING_IMPLEMENTATION");

        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 for now, as we don't know the out size yet.
            let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /*
      Sets the implementation address of the proxy.
    */
    function setImplementation(address newImplementation) private {
        bytes32 slot = IMPLEMENTATION_SLOT;
        assembly {
            sstore(slot, newImplementation)
        }
    }

    /*
      Returns true if the contract is not in the finalized state.
    */
    function isNotFinalized() public view returns (bool notFinal) {
        bytes32 slot = FINALIZED_STATE_SLOT;
        uint256 slotValue;
        assembly {
            slotValue := sload(slot)
        }
        notFinal = (slotValue == 0);
    }

    /*
      Marks the current implementation as finalized.
    */
    function setFinalizedFlag() private {
        bytes32 slot = FINALIZED_STATE_SLOT;
        assembly {
            sstore(slot, 0x1)
        }
    }

    /*
      Introduce an implementation and its initialization vector,
      and start the time-lock before it can be upgraded to.
      addImplementation is not blocked when frozen or finalized.
      (upgradeTo API is blocked when finalized or frozen).
    */
    function addImplementation(
        address newImplementation,
        bytes calldata data,
        bool finalize
    ) external onlyGovernance {
        require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT");

        bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize));

        uint256 activationTime = block.timestamp + getUpgradeActivationDelay();

        enabledTime[implVectorHash] = activationTime;
        emit ImplementationAdded(newImplementation, data, finalize);
    }

    /*
      Removes a candidate implementation.
      Note that it is possible to remove the current implementation. Doing so doesn't affect the
      current implementation, but rather revokes it as a future candidate.
    */
    function removeImplementation(
        address removedImplementation,
        bytes calldata data,
        bool finalize
    ) external onlyGovernance {
        bytes32 implVectorHash = keccak256(abi.encode(removedImplementation, data, finalize));

        // If we have initializer, we set the hash of it.
        uint256 activationTime = enabledTime[implVectorHash];
        require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION");
        delete enabledTime[implVectorHash];
        emit ImplementationRemoved(removedImplementation, data, finalize);
    }

    /*
      Upgrades the proxy to a new implementation, with its initialization.
      to upgrade successfully, implementation must have been added time-lock agreeably
      before, and the init vector must be identical ot the one submitted before.

      Upon assignment of new implementation address,
      its initialize will be called with the initializing vector (even if empty).
      Therefore, the implementation MUST must have such a method.

      Note - Initialization data is committed to in advance, therefore it must remain valid
      until the actual contract upgrade takes place.

      Care should be taken regarding initialization data and flow when planning the contract upgrade.

      When planning contract upgrade, special care is also needed with regard to governance
      (See comments in Governance.sol).
    */
    // NOLINTNEXTLINE: reentrancy-events timestamp.
    function upgradeTo(
        address newImplementation,
        bytes calldata data,
        bool finalize
    ) external payable onlyGovernance notFinalized notFrozen {
        bytes32 implVectorHash = keccak256(abi.encode(newImplementation, data, finalize));
        uint256 activationTime = enabledTime[implVectorHash];
        require(activationTime > 0, "UNKNOWN_UPGRADE_INFORMATION");
        require(newImplementation.isContract(), "ADDRESS_NOT_CONTRACT");

        // On the first time an implementation is set - time-lock should not be enforced.
        require(
            activationTime <= block.timestamp || implementation() == address(0x0),
            "UPGRADE_NOT_ENABLED_YET"
        );

        setImplementation(newImplementation);

        // NOLINTNEXTLINE: low-level-calls controlled-delegatecall.
        (bool success, bytes memory returndata) = newImplementation.delegatecall(
            abi.encodeWithSelector(this.initialize.selector, data)
        );
        require(success, string(returndata));

        // Verify that the new implementation is not frozen post initialization.
        // NOLINTNEXTLINE: low-level-calls controlled-delegatecall.
        (success, returndata) = newImplementation.delegatecall(
            abi.encodeWithSignature("isFrozen()")
        );
        require(success, "CALL_TO_ISFROZEN_REVERTED");
        require(!abi.decode(returndata, (bool)), "NEW_IMPLEMENTATION_FROZEN");

        if (finalize) {
            setFinalizedFlag();
            emit FinalizedImplementation(newImplementation);
        }

        emit ImplementationUpgraded(newImplementation, data);
    }
}

File 1 of 8: Common.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

/*
  Common Utility librarries.
  I. Addresses (extending address).
*/
library Addresses {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function performEthTransfer(address recipient, uint256 amount) internal {
        (bool success, ) = recipient.call{value: amount}(""); // NOLINT: low-level-calls.
        require(success, "ETH_TRANSFER_FAILED");
    }

    /*
      Safe wrapper around ERC20/ERC721 calls.
      This is required because many deployed ERC20 contracts don't return a value.
      See https://github.com/ethereum/solidity/issues/4116.
    */
    function safeTokenContractCall(address tokenAddress, bytes memory callData) internal {
        require(isContract(tokenAddress), "BAD_TOKEN_ADDRESS");
        // NOLINTNEXTLINE: low-level-calls.
        (bool success, bytes memory returndata) = tokenAddress.call(callData);
        require(success, string(returndata));

        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "TOKEN_OPERATION_FAILED");
        }
    }

    /*
      Validates that the passed contract address is of a real contract,
      and that its id hash (as infered fromn identify()) matched the expected one.
    */
    function validateContractId(address contractAddress, bytes32 expectedIdHash) internal {
        require(isContract(contractAddress), "ADDRESS_NOT_CONTRACT");
        (bool success, bytes memory returndata) = contractAddress.call( // NOLINT: low-level-calls.
            abi.encodeWithSignature("identify()")
        );
        require(success, "FAILED_TO_IDENTIFY_CONTRACT");
        string memory realContractId = abi.decode(returndata, (string));
        require(
            keccak256(abi.encodePacked(realContractId)) == expectedIdHash,
            "UNEXPECTED_CONTRACT_IDENTIFIER"
        );
    }
}

/*
  II. StarkExTypes - Common data types.
*/
library StarkExTypes {
    // Structure representing a list of verifiers (validity/availability).
    // A statement is valid only if all the verifiers in the list agree on it.
    // Adding a verifier to the list is immediate - this is used for fast resolution of
    // any soundness issues.
    // Removing from the list is time-locked, to ensure that any user of the system
    // not content with the announced removal has ample time to leave the system before it is
    // removed.
    struct ApprovalChainData {
        address[] list;
        // Represents the time after which the verifier with the given address can be removed.
        // Removal of the verifier with address A is allowed only in the case the value
        // of unlockedForRemovalTime[A] != 0 and unlockedForRemovalTime[A] < (current time).
        mapping(address => uint256) unlockedForRemovalTime;
    }
}

File 2 of 8: Governance.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

import "GovernanceStorage.sol";
import "MGovernance.sol";

/*
  Implements Generic Governance, applicable for both proxy and main contract, and possibly others.
  Notes:
  1. This class is virtual (getGovernanceTag is not implemented).
  2. The use of the same function names by both the Proxy and a delegated implementation
     is not possible since calling the implementation functions is done via the default function
     of the Proxy. For this reason, for example, the implementation of MainContract (MainGovernance)
     exposes mainIsGovernor, which calls the internal isGovernor method.
*/
abstract contract Governance is GovernanceStorage, MGovernance {
    event LogNominatedGovernor(address nominatedGovernor);
    event LogNewGovernorAccepted(address acceptedGovernor);
    event LogRemovedGovernor(address removedGovernor);
    event LogNominationCancelled();

    /*
      Returns a string which uniquely identifies the type of the governance mechanism.
    */
    function getGovernanceTag() internal pure virtual returns (string memory);

    /*
      Returns the GovernanceInfoStruct associated with the governance tag.
    */
    function contractGovernanceInfo() internal view returns (GovernanceInfoStruct storage) {
        string memory tag = getGovernanceTag();
        GovernanceInfoStruct storage gub = governanceInfo[tag];
        require(gub.initialized, "NOT_INITIALIZED");
        return gub;
    }

    /*
      Current code intentionally prevents governance re-initialization.
      This may be a problem in an upgrade situation, in a case that the upgrade-to implementation
      performs an initialization (for real) and within that calls initGovernance().

      Possible workarounds:
      1. Clearing the governance info altogether by changing the MAIN_GOVERNANCE_INFO_TAG.
         This will remove existing main governance information.
      2. Modify the require part in this function, so that it will exit quietly
         when trying to re-initialize (uncomment the lines below).
    */
    function initGovernance() internal {
        string memory tag = getGovernanceTag();
        GovernanceInfoStruct storage gub = governanceInfo[tag];
        require(!gub.initialized, "ALREADY_INITIALIZED");
        gub.initialized = true; // to ensure addGovernor() won't fail.
        // Add the initial governer.
        addGovernor(msg.sender);
    }

    function isGovernor(address testGovernor) internal view override returns (bool) {
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        return gub.effectiveGovernors[testGovernor];
    }

    /*
      Cancels the nomination of a governor candidate.
    */
    function cancelNomination() internal onlyGovernance {
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        gub.candidateGovernor = address(0x0);
        emit LogNominationCancelled();
    }

    function nominateNewGovernor(address newGovernor) internal onlyGovernance {
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        require(!isGovernor(newGovernor), "ALREADY_GOVERNOR");
        gub.candidateGovernor = newGovernor;
        emit LogNominatedGovernor(newGovernor);
    }

    /*
      The addGovernor is called in two cases:
      1. by acceptGovernance when a new governor accepts its role.
      2. by initGovernance to add the initial governor.
      The difference is that the init path skips the nominate step
      that would fail because of the onlyGovernance modifier.
    */
    function addGovernor(address newGovernor) private {
        require(!isGovernor(newGovernor), "ALREADY_GOVERNOR");
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        gub.effectiveGovernors[newGovernor] = true;
    }

    function acceptGovernance() internal {
        // The new governor was proposed as a candidate by the current governor.
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        require(msg.sender == gub.candidateGovernor, "ONLY_CANDIDATE_GOVERNOR");

        // Update state.
        addGovernor(gub.candidateGovernor);
        gub.candidateGovernor = address(0x0);

        // Send a notification about the change of governor.
        emit LogNewGovernorAccepted(msg.sender);
    }

    /*
      Remove a governor from office.
    */
    function removeGovernor(address governorForRemoval) internal onlyGovernance {
        require(msg.sender != governorForRemoval, "GOVERNOR_SELF_REMOVE");
        GovernanceInfoStruct storage gub = contractGovernanceInfo();
        require(isGovernor(governorForRemoval), "NOT_GOVERNOR");
        gub.effectiveGovernors[governorForRemoval] = false;
        emit LogRemovedGovernor(governorForRemoval);
    }
}

File 3 of 8: GovernanceStorage.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

/*
  Holds the governance slots for ALL entities, including proxy and the main contract.
*/
contract GovernanceStorage {
    struct GovernanceInfoStruct {
        mapping(address => bool) effectiveGovernors;
        address candidateGovernor;
        bool initialized;
    }

    // A map from a Governor tag to its own GovernanceInfoStruct.
    mapping(string => GovernanceInfoStruct) internal governanceInfo;
}

File 4 of 8: MGovernance.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

abstract contract MGovernance {
    function isGovernor(address testGovernor) internal view virtual returns (bool);

    /*
      Allows calling the function only by a Governor.
    */
    modifier onlyGovernance() {
        require(isGovernor(msg.sender), "ONLY_GOVERNANCE");
        _;
    }
}

File 6 of 8: ProxyGovernance.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

import "Governance.sol";

/**
  The Proxy contract is governed by one or more Governors of which the initial one is the
  deployer of the contract.

  A governor has the sole authority to perform the following operations:

  1. Nominate additional governors (:sol:func:`proxyNominateNewGovernor`)
  2. Remove other governors (:sol:func:`proxyRemoveGovernor`)
  3. Add new `implementations` (proxied contracts)
  4. Remove (new or old) `implementations`
  5. Update `implementations` after a timelock allows it

  Adding governors is performed in a two step procedure:

  1. First, an existing governor nominates a new governor (:sol:func:`proxyNominateNewGovernor`)
  2. Then, the new governor must accept governance to become a governor (:sol:func:`proxyAcceptGovernance`)

  This two step procedure ensures that a governor public key cannot be nominated unless there is an
  entity that has the corresponding private key. This is intended to prevent errors in the addition
  process.

  The governor private key should typically be held in a secure cold wallet or managed via a
  multi-sig contract.
*/
/*
  Implements Governance for the proxy contract.
  It is a thin wrapper to the Governance contract,
  which is needed so that it can have non-colliding function names,
  and a specific tag (key) to allow unique state storage.
*/
contract ProxyGovernance is Governance {
    // The tag is the string key that is used in the Governance storage mapping.
    string public constant PROXY_GOVERNANCE_TAG = "StarkEx.Proxy.2019.GovernorsInformation";

    function getGovernanceTag() internal pure override returns (string memory tag) {
        tag = PROXY_GOVERNANCE_TAG;
    }

    function proxyIsGovernor(address testGovernor) external view returns (bool) {
        return isGovernor(testGovernor);
    }

    function proxyNominateNewGovernor(address newGovernor) external {
        nominateNewGovernor(newGovernor);
    }

    function proxyRemoveGovernor(address governorForRemoval) external {
        removeGovernor(governorForRemoval);
    }

    function proxyAcceptGovernance() external {
        acceptGovernance();
    }

    function proxyCancelNomination() external {
        cancelNomination();
    }
}

File 7 of 8: ProxyStorage.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

import "GovernanceStorage.sol";

/*
  Holds the Proxy-specific state variables.
  This contract is inherited by the GovernanceStorage (and indirectly by MainStorage)
  to prevent collision hazard.
*/
contract ProxyStorage is GovernanceStorage {
    // NOLINTNEXTLINE: naming-convention uninitialized-state.
    mapping(address => bytes32) internal initializationHash_DEPRECATED;

    // The time after which we can switch to the implementation.
    // Hash(implementation, data, finalize) => time.
    mapping(bytes32 => uint256) internal enabledTime;

    // A central storage of the flags whether implementation has been initialized.
    // Note - it can be used flexibly enough to accommodate multiple levels of initialization
    // (i.e. using different key salting schemes for different initialization levels).
    mapping(bytes32 => bool) internal initialized;
}

File 8 of 8: StorageSlots.sol
/*
  Copyright 2019-2022 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.11;

/**
  StorageSlots holds the arbitrary storage slots used throughout the Proxy pattern.
  Storage address slots are a mechanism to define an arbitrary location, that will not be
  overlapped by the logical contracts.
*/
contract StorageSlots {
    // Storage slot with the address of the current implementation.
    // The address of the slot is keccak256("StarkWare2019.implemntation-slot").
    // We need to keep this variable stored outside of the commonly used space,
    // so that it's not overrun by the logical implementation (the proxied contract).
    bytes32 internal constant IMPLEMENTATION_SLOT =
        0x177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b24;

    // Storage slot with the address of the call-proxy current implementation.
    // The address of the slot is keccak256("'StarkWare2020.CallProxy.Implemntation.Slot'").
    // We need to keep this variable stored outside of the commonly used space.
    // so that it's not overrun by the logical implementation (the proxied contract).
    bytes32 internal constant CALL_PROXY_IMPL_SLOT =
        0x7184681641399eb4ad2fdb92114857ee6ff239f94ad635a1779978947b8843be;

    // This storage slot stores the finalization flag.
    // Once the value stored in this slot is set to non-zero
    // the proxy blocks implementation upgrades.
    // The current implementation is then referred to as Finalized.
    // Web3.solidityKeccak(['string'], ["StarkWare2019.finalization-flag-slot"]).
    bytes32 internal constant FINALIZED_STATE_SLOT =
        0x7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2;

    // Storage slot to hold the upgrade delay (time-lock).
    // The intention of this slot is to allow modification using an EIC.
    // Web3.solidityKeccak(['string'], ['StarkWare.Upgradibility.Delay.Slot']).
    bytes32 public constant UPGRADE_DELAY_SLOT =
        0xc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"upgradeActivationDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"FinalizedImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"bytes","name":"initializer","type":"bytes"},{"indexed":false,"internalType":"bool","name":"finalize","type":"bool"}],"name":"ImplementationAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"bytes","name":"initializer","type":"bytes"},{"indexed":false,"internalType":"bool","name":"finalize","type":"bool"}],"name":"ImplementationRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"bytes","name":"initializer","type":"bytes"}],"name":"ImplementationUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"acceptedGovernor","type":"address"}],"name":"LogNewGovernorAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nominatedGovernor","type":"address"}],"name":"LogNominatedGovernor","type":"event"},{"anonymous":false,"inputs":[],"name":"LogNominationCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"removedGovernor","type":"address"}],"name":"LogRemovedGovernor","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"PROXY_GOVERNANCE_TAG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROXY_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UPGRADE_DELAY_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"name":"addImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUpgradeActivationDelay","outputs":[{"internalType":"uint256","name":"delay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isNotFinalized","outputs":[{"internalType":"bool","name":"notFinal","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyAcceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyCancelNomination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testGovernor","type":"address"}],"name":"proxyIsGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"proxyNominateNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governorForRemoval","type":"address"}],"name":"proxyRemoveGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"removedImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"name":"removeImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"finalize","type":"bool"}],"name":"upgradeTo","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162001bf638038062001bf6833981810160405260208110156200003757600080fd5b50516200004c6001600160e01b036200006716565b62000060816001600160e01b036200017416565b5062000363565b60606200007c6001600160e01b036200019816565b9050600080826040518082805190602001908083835b60208310620000b35780518252601f19909201916020918201910162000092565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092206001810154909350600160a01b900460ff16159150620001479050576040805162461bcd60e51b815260206004820152601360248201527f414c52454144595f494e495449414c495a454400000000000000000000000000604482015290519081900360640190fd5b60018101805460ff60a01b1916600160a01b17905562000170336001600160e01b03620001b916565b5050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f55565b606060405180606001604052806027815260200162001bcf60279139905090565b620001cd816001600160e01b036200025016565b1562000213576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6000620002286001600160e01b036200028a16565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b600080620002666001600160e01b036200028a16565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b60006060620002a16001600160e01b036200019816565b9050600080826040518082805190602001908083835b60208310620002d85780518252601f199092019160209182019101620002b7565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092206001810154909350600160a01b900460ff1691506200035d9050576040805162461bcd60e51b815260206004820152600f60248201526e1393d517d253925512505312569151608a1b604482015290519081900360640190fd5b91505090565b61185c80620003736000396000f3fe6080604052600436106100cc5760003560e01c80636684b1d61161007a5780636684b1d61461044e5780637147855d1461046357806372a44f07146104e35780638757653f146104f8578063b449ea5d1461052b578063c5ab845314610572578063e907fa3c14610587578063f9bcdde41461059c5761011e565b806312f16e6d146101a257806320cea94d146101d7578063439fab91146101fe57806356f36dbf146102795780635c60da1b146103035780635cef2e86146103345780635e3a97e7146103c15761011e565b3661011e576040805162461bcd60e51b815260206004820181905260248201527f434f4e54524143545f4e4f545f45585045435445445f544f5f52454345495645604482015290519081900360640190fd5b60006101286105b1565b90506001600160a01b03811661017e576040805162461bcd60e51b815260206004820152601660248201527526a4a9a9a4a723afa4a6a82622a6a2a72a20aa24a7a760511b604482015290519081900360640190fd5b3660008037600080366000845af43d6000803e80801561019d573d6000f35b3d6000fd5b3480156101ae57600080fd5b506101d5600480360360208110156101c557600080fd5b50356001600160a01b03166105d6565b005b3480156101e357600080fd5b506101ec6105e2565b60408051918252519081900360200190f35b34801561020a57600080fd5b506101d56004803603602081101561022157600080fd5b810190602081018135600160201b81111561023b57600080fd5b82018360208201111561024d57600080fd5b803590602001918460018302840111600160201b8311171561026e57600080fd5b509092509050610606565b34801561028557600080fd5b5061028e61064c565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c85781810151838201526020016102b0565b50505050905090810190601f1680156102f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030f57600080fd5b506103186105b1565b604080516001600160a01b039092168252519081900360200190f35b34801561034057600080fd5b506101d56004803603606081101561035757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561038157600080fd5b82018360208201111561039357600080fd5b803590602001918460018302840111600160201b831117156103b457600080fd5b9193509150351515610668565b3480156103cd57600080fd5b506101d5600480360360608110156103e457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561040e57600080fd5b82018360208201111561042057600080fd5b803590602001918460018302840111600160201b8311171561044157600080fd5b9193509150351515610831565b34801561045a57600080fd5b506101d56109f8565b6101d56004803603606081101561047957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460018302840111600160201b831117156104d657600080fd5b9193509150351515610a02565b3480156104ef57600080fd5b506101ec61107b565b34801561050457600080fd5b506101d56004803603602081101561051b57600080fd5b50356001600160a01b03166110a1565b34801561053757600080fd5b5061055e6004803603602081101561054e57600080fd5b50356001600160a01b03166110aa565b604080519115158252519081900360200190f35b34801561057e57600080fd5b5061028e6110bb565b34801561059357600080fd5b5061055e6110dc565b3480156105a857600080fd5b506101d5611102565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b245490565b6105df8161110a565b50565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f81565b6040805162461bcd60e51b815260206004820152601660248201527543414e4e4f545f43414c4c5f494e495449414c495a4560501b604482015290519081900360640190fd5b6040518060600160405280602781526020016118006027913981565b61067133611257565b6106b4576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b03166001600160a01b0316815260200180602001831515151581526020018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050955050505050506040516020818303038152906040528051906020012090506000600260008381526020019081526020016000205490506000811161079c576040805162461bcd60e51b815260206004820152601b60248201527a2aa725a727aba72faaa823a920a222afa4a72327a926a0aa24a7a760291b604482015290519081900360640190fd5b6002600083815260200190815260200160002060009055856001600160a01b03167fe99b980b5259f200e4c1da973ff0251b6d9aaa144714c8773976ecd62b8ebe8d8686866040518080602001831515151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b61083a33611257565b61087d576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b61088f846001600160a01b0316611286565b6108d7576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b03166001600160a01b0316815260200180602001831515151581526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050604051602081830303815290604052805190602001209050600061095e61107b565b42019050806002600084815260200190815260200160002081905550856001600160a01b03167f723a7080d63c133cf338e44e00705cc1b7b2bde7e88d6218a8d62710a329ce1b8686866040518080602001831515151581526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a2505050505050565b610a0061128c565b565b610a0b33611257565b610a4e576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610a566110dc565b610aa2576040805162461bcd60e51b815260206004820152601860248201527712535413115351539510551253d397d1925390531256915160421b604482015290519081900360640190fd5b610aaa611353565b15610aee576040805162461bcd60e51b815260206004820152600f60248201526e29aa20aa22afa4a9afa32927ad22a760891b604482015290519081900360640190fd5b60008484848460405160200180856001600160a01b03166001600160a01b0316815260200180602001831515151581526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405160208183030381529060405280519060200120905060006002600083815260200190815260200160002054905060008111610bd6576040805162461bcd60e51b815260206004820152601b60248201527a2aa725a727aba72faaa823a920a222afa4a72327a926a0aa24a7a760291b604482015290519081900360640190fd5b610be8866001600160a01b0316611286565b610c30576040805162461bcd60e51b8152602060048201526014602482015273105111149154d4d7d393d517d0d3d395149050d560621b604482015290519081900360640190fd5b4281111580610c4f57506000610c446105b1565b6001600160a01b0316145b610c9a576040805162461bcd60e51b8152602060048201526017602482015276155411d490511157d393d517d153905093115117d65155604a1b604482015290519081900360640190fd5b610ca3866114b6565b60006060876001600160a01b031663439fab9160e01b88886040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b60208310610d545780518252601f199092019160209182019101610d35565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610db4576040519150601f19603f3d011682016040523d82523d6000602084013e610db9565b606091505b5091509150818190610e495760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e0e578181015183820152602001610df6565b50505050905090810190601f168015610e3b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516001600160a01b038c169382918083835b60208310610ea65780518252601f199092019160209182019101610e87565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610f06576040519150601f19603f3d011682016040523d82523d6000602084013e610f0b565b606091505b50909250905081610f5f576040805162461bcd60e51b815260206004820152601960248201527810d0531317d513d7d254d19493d6915397d491559154951151603a1b604482015290519081900360640190fd5b808060200190516020811015610f7457600080fd5b505115610fc4576040805162461bcd60e51b81526020600482015260196024820152782722abafa4a6a82622a6a2a72a20aa24a7a72fa32927ad22a760391b604482015290519081900360640190fd5b841561100757610fd26114da565b6040516001600160a01b038916907fc13b75a5f14b69ebdc2431a5d475b3bff371abe251b5064144306fbd9c4de35c90600090a25b876001600160a01b03167fff14288d542bc1c1d15a652cb52af735f065c0c9d70b48e454a203c260733544888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25050505050505050565b7fc21dbb3089fcb2c4f4c6a67854ab4db2b0f233ea4b21b21f912d52d18fc5db1f545b90565b6105df81611500565b60006110b582611257565b92915050565b60405180604001604052806005815260200164332e302e3160d81b81525081565b7f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d2541590565b610a006115fd565b61111333611257565b611156576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b336001600160a01b03821614156111ab576040805162461bcd60e51b8152602060048201526014602482015273474f5645524e4f525f53454c465f52454d4f564560601b604482015290519081900360640190fd5b60006111b5611694565b90506111c082611257565b611200576040805162461bcd60e51b815260206004820152600c60248201526b2727aa2fa3a7ab22a92727a960a11b604482015290519081900360640190fd5b6001600160a01b03821660008181526020838152604091829020805460ff19169055815192835290517fd75f94825e770b8b512be8e74759e252ad00e102e38f50cce2f7c6f868a295999281900390910190a15050565b600080611262611694565b6001600160a01b039390931660009081526020939093525050604090205460ff1690565b3b151590565b6000611296611694565b60018101549091506001600160a01b031633146112f4576040805162461bcd60e51b815260206004820152601760248201527627a7262cafa1a0a72224a220aa22afa3a7ab22a92727a960491b604482015290519081900360640190fd5b600181015461130b906001600160a01b031661175f565b6001810180546001600160a01b03191690556040805133815290517fcfb473e6c03f9a29ddaf990e736fa3de5188a0bd85d684f5b6e164ebfbfff5d29181900360200190a150565b60008061135e6105b1565b90506001600160a01b03811661137857600091505061109e565b60408051600481526024810182526020810180516001600160e01b03166333eeb14760e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106113de5780518252601f1990920191602091820191016113bf565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461143e576040519150601f19603f3d011682016040523d82523d6000602084013e611443565b606091505b50915091508181906114965760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e0e578181015183820152602001610df6565b508080602001905160208110156114ac57600080fd5b5051935050505090565b7f177667240aeeea7e35eabe3a35e18306f336219e1386f7710a6bf8783f761b2455565b60017f7d433c6f837e8f93009937c466c82efbb5ba621fae36886d0cac433c5d0aa7d255565b61150933611257565b61154c576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611556611694565b905061156182611257565b156115a6576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b6001810180546001600160a01b0384166001600160a01b0319909116811790915560408051918252517f6166272c8d3f5f579082f2827532732f97195007983bb5b83ac12c56700b01a69181900360200190a15050565b61160633611257565b611649576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6000611653611694565b6001810180546001600160a01b03191690556040519091507f7a8dc7dd7fffb43c4807438fa62729225156941e641fd877938f4edade3429f590600090a150565b600060606116a06117df565b9050600080826040518082805190602001908083835b602083106116d55780518252601f1990920191602091820191016116b6565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092206001810154909350600160a01b900460ff1691506117599050576040805162461bcd60e51b815260206004820152600f60248201526e1393d517d253925512505312569151608a1b604482015290519081900360640190fd5b91505090565b61176881611257565b156117ad576040805162461bcd60e51b815260206004820152601060248201526f20a62922a0a22cafa3a7ab22a92727a960811b604482015290519081900360640190fd5b60006117b7611694565b6001600160a01b0390921660009081526020929092525060409020805460ff19166001179055565b60606040518060600160405280602781526020016118006027913990509056fe537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6ea2646970667358221220426e18696b8bdc68a46072a92d0abb91970db2b136a192f5c704fa56ebd9fc7364736f6c634300060b0033537461726b45782e50726f78792e323031392e476f7665726e6f7273496e666f726d6174696f6e0000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : upgradeActivationDelay (uint256): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

3028:9432:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6282:42;;;-1:-1:-1;;;6282:42:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;3028:9432;6573:23;6599:16;:14;:16::i;:::-;6573:42;-1:-1:-1;;;;;;6633:31:4;;6625:66;;;;;-1:-1:-1;;;6625:66:4;;;;;;;;;;;;-1:-1:-1;;;6625:66:4;;;;;;;;;;;;;;;6970:14;6967:1;6964;6951:34;7193:1;7190;7174:14;7171:1;7154:15;7147:5;7134:61;7269:16;7266:1;7263;7248:38;7307:6;7374:66;;;;7489:16;7486:1;7479:27;7374:66;7409:16;7406:1;7399:27;2595:117:5;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2595:117:5;-1:-1:-1;;;;;2595:117:5;;:::i;:::-;;2479:119:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5551:122:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5551:122:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5551:122:4;;;;;;;;;;-1:-1:-1;5551:122:4;;-1:-1:-1;5551:122:4;-1:-1:-1;5551:122:4;:::i;2124:87:5:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:195:4;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4512:195:4;;;;;;;;;;;;;;9368:561;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9368:561:4;;;;;;;;;;;;;;;-1:-1:-1;;;9368:561:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9368:561:4;;;;;;;;;;;;-1:-1:-1;9368:561:4;-1:-1:-1;9368:561:4;;;;:::i;8613:521::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8613:521:4;;;;;;;;;;;;;;;-1:-1:-1;;;8613:521:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8613:521:4;;;;;;;;;;;;-1:-1:-1;8613:521:4;-1:-1:-1;8613:521:4;;;;:::i;2718:77:5:-;;;;;;;;;;;;;:::i;10828:1630:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10828:1630:4;;;;;;;;;;;;;;;-1:-1:-1;;;10828:1630:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10828:1630:4;;;;;;;;;;;;-1:-1:-1;10828:1630:4;-1:-1:-1;10828:1630:4;;;;:::i;4187:207::-;;;;;;;;;;;;;:::i;2476:113:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2476:113:5;-1:-1:-1;;;;;2476:113:5;;:::i;2346:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2346:124:5;-1:-1:-1;;;;;2346:124:5;;:::i;:::-;;;;;;;;;;;;;;;;;;3792:46:4;;;;;;;;;;;;;:::i;7880:244::-;;;;;;;;;;;;;:::i;2801:77:5:-;;;;;;;;;;;;;:::i;4512:195:4:-;1281:66:7;4680:11:4;;4647:54::o;2595:117:5:-;2671:34;2686:18;2671:14;:34::i;:::-;2595:117;:::o;2479:119:7:-;2532:66;2479:119;:::o;5551:122:4:-;5634:32;;;-1:-1:-1;;;5634:32:4;;;;;;;;;;;;-1:-1:-1;;;5634:32:4;;;;;;;;;;;;;;2124:87:5;;;;;;;;;;;;;;;;;;;:::o;9368:561:4:-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;9529:22:4::1;9575:21;9598:4;;9604:8;9564:49;;;;;;-1:-1:-1::0;;;;;9564:49:4::1;-1:-1:-1::0;;;;;9564:49:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9554:60;;;;;;9529:85;;9683:22;9708:11;:27;9720:14;9708:27;;;;;;;;;;;;9683:52;;9770:1;9753:14;:18;9745:58;;;::::0;;-1:-1:-1;;;9745:58:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;9745:58:4;;;;;;;;;;;;;::::1;;9820:11;:27;9832:14;9820:27;;;;;;;;;;;9813:34;;;9884:21;-1:-1:-1::0;;;;;9862:60:4::1;;9907:4;;9913:8;9862:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;9862:60:4::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;9862:60:4;;-1:-1:-1;;;;;9862:60:4::1;947:1:3;;9368:561:4::0;;;;:::o;8613:521::-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;8775:30:4::1;:17;-1:-1:-1::0;;;;;8775:28:4::1;;:30::i;:::-;8767:63;;;::::0;;-1:-1:-1;;;8767:63:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8767:63:4;;;;;;;;;;;;;::::1;;8841:22;8887:17;8906:4;;8912:8;8876:45;;;;;;-1:-1:-1::0;;;;;8876:45:4::1;-1:-1:-1::0;;;;;8876:45:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8866:56;;;;;;8841:81;;8933:22;8976:27;:25;:27::i;:::-;8958:15;:45;8933:70;;9044:14;9014:11;:27;9026:14;9014:27;;;;;;;;;;;:44;;;;9093:17;-1:-1:-1::0;;;;;9073:54:4::1;;9112:4;;9118:8;9073:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;9073:54:4::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;9073:54:4;;-1:-1:-1;;;;;9073:54:4::1;947:1:3;;8613:521:4::0;;;;:::o;2718:77:5:-;2770:18;:16;:18::i;:::-;2718:77::o;10828:1630:4:-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;5721:16:4::1;:14;:16::i;:::-;5713:53;;;::::0;;-1:-1:-1;;;5713:53:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5713:53:4;;;;;;;;;;;;;::::1;;6007:24:::2;:22;:24::i;:::-;6006:25;5998:53;;;::::0;;-1:-1:-1;;;5998:53:4;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;5998:53:4;;;;;;;;;;;;;::::2;;11005:22:::3;11051:17;11070:4;;11076:8;11040:45;;;;;;-1:-1:-1::0;;;;;11040:45:4::3;-1:-1:-1::0;;;;;11040:45:4::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11030:56;;;;;;11005:81;;11096:22;11121:11;:27;11133:14;11121:27;;;;;;;;;;;;11096:52;;11183:1;11166:14;:18;11158:58;;;::::0;;-1:-1:-1;;;11158:58:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;11158:58:4;;;;;;;;;;;;;::::3;;11234:30;:17;-1:-1:-1::0;;;;;11234:28:4::3;;:30::i;:::-;11226:63;;;::::0;;-1:-1:-1;;;11226:63:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;11226:63:4;;;;;;;;;;;;;::::3;;11429:15;11411:14;:33;;:69;;;-1:-1:-1::0;11476:3:4::3;11448:16;:14;:16::i;:::-;-1:-1:-1::0;;;;;11448:32:4::3;;11411:69;11390:139;;;::::0;;-1:-1:-1;;;11390:139:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;11390:139:4;;;;;;;;;;;;;::::3;;11540:36;11558:17;11540;:36::i;:::-;11656:12;11670:23;11697:17;-1:-1:-1::0;;;;;11697:30:4::3;11764:24;;;11790:4;;11741:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;;::::3;-1:-1:-1::0;;11741:54:4;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;11741:54:4::3;-1:-1:-1::0;;;;;;11741:54:4;;::::3;::::0;;;::::3;::::0;;11697:108;;;;11741:54;;11697:108;;-1:-1:-1;11697:108:4;;-1:-1:-1;11741:54:4;-1:-1:-1;11697:108:4;;-1:-1:-1;11697:108:4;;-1:-1:-1;11697:108:4;11741:54;11697:108:::3;;;;;;::::0;;;;-1:-1:-1;;11697:108:4;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11655:150;;;;11823:7;11839:10;11815:36;;;;;-1:-1:-1::0;;;11815:36:4::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12079:37:4::3;::::0;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;-1:-1:-1;;;;;12079:37:4::3;-1:-1:-1::0;;;12079:37:4::3;::::0;;12035:91;;;;-1:-1:-1;;;;;12035:30:4;::::3;::::0;:91;;;;12079:37;12035:91:::3;;;;;;::::0;;;;-1:-1:-1;;12035:91:4;;;;::::3;::::0;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12011:115:4;;-1:-1:-1;12011:115:4;-1:-1:-1;12011:115:4;12136:45:::3;;;::::0;;-1:-1:-1;;;12136:45:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;12136:45:4;;;;;;;;;;;;;::::3;;12211:10;12200:30;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;12200:30:4;12199:31:::3;12191:69;;;::::0;;-1:-1:-1;;;12191:69:4;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;12191:69:4;;;;;;;;;;;;;::::3;;12275:8;12271:118;;;12299:18;:16;:18::i;:::-;12336:42;::::0;-1:-1:-1;;;;;12336:42:4;::::3;::::0;::::3;::::0;;;::::3;12271:118;12427:17;-1:-1:-1::0;;;;;12404:47:4::3;;12446:4;;12404:47;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;-1:-1:-1::0;;12404:47:4::3;::::0;;::::3;::::0;;::::3;::::0;-1:-1:-1;12404:47:4;;-1:-1:-1;;;;12404:47:4::3;6061:1;;;;10828:1630:::0;;;;:::o;4187:207::-;2532:66:7;4345:11:4;4187:207;;:::o;2476:113:5:-;2550:32;2570:11;2550:19;:32::i;2346:124::-;2416:4;2439:24;2450:12;2439:10;:24::i;:::-;2432:31;2346:124;-1:-1:-1;;2346:124:5:o;3792:46:4:-;;;;;;;;;;;;;;-1:-1:-1;;;3792:46:4;;;;:::o;7880:244::-;2194:66:7;8060:11:4;8102:14;;7880:244::o;2801:77:5:-;2853:18;:16;:18::i;4986:405:1:-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;5080:10:1::1;-1:-1:-1::0;;;;;5080:32:1;::::1;;;5072:65;;;::::0;;-1:-1:-1;;;5072:65:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5072:65:1;;;;;;;;;;;;;::::1;;5147:32;5182:24;:22;:24::i;:::-;5147:59;;5224:30;5235:18;5224:10;:30::i;:::-;5216:55;;;::::0;;-1:-1:-1;;;5216:55:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;5216:55:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;5281:42:1;::::1;5326:5;5281:42:::0;;;::::1;::::0;;;;;;;;:50;;-1:-1:-1;;5281:50:1::1;::::0;;5346:38;;;;;;;::::1;::::0;;;;;;;;::::1;947:1:3;4986:405:1::0;:::o;3054:209::-;3128:4;3144:32;3179:24;:22;:24::i;:::-;-1:-1:-1;;;;;3220:36:1;;;;:22;:36;;;;;;;;-1:-1:-1;;3220:36:1;;;;;;;3054:209::o;757:190:0:-;886:20;932:8;;;757:190::o;4427:502:1:-;4555:32;4590:24;:22;:24::i;:::-;4646:21;;;;;;-1:-1:-1;;;;;;4646:21:1;4632:10;:35;4624:71;;;;;-1:-1:-1;;;4624:71:1;;;;;;;;;;;;-1:-1:-1;;;4624:71:1;;;;;;;;;;;;;;;4743:21;;;;4731:34;;-1:-1:-1;;;;;4743:21:1;4731:11;:34::i;:::-;4775:21;;;:36;;-1:-1:-1;;;;;;4775:36:1;;;4888:34;;;4911:10;4888:34;;;;;;;;;;;;;4427:502;:::o;4844:564:4:-;4895:4;4911:23;4937:16;:14;:16::i;:::-;4911:42;-1:-1:-1;;;;;;5053:31:4;;5049:74;;5107:5;5100:12;;;;;5049:74;5261:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5261:37:4;-1:-1:-1;;;5261:37:4;;;5219:89;;;;5178:12;;5192:23;;-1:-1:-1;;;;;5219:28:4;;;5261:37;;5219:89;;;;;;5261:37;5219:89;;;;;;;;;;-1:-1:-1;;5219:89:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5177:131;;;;5326:7;5342:10;5318:36;;;;;-1:-1:-1;;;5318:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5382:10;5371:30;;;;;;;;;;;;;;;-1:-1:-1;5371:30:4;;-1:-1:-1;;;;4844:564:4;:::o;7608:186::-;1281:66:7;7747:31:4;7733:55::o;8197:147::-;8324:3;2194:66:7;8311:17:4;8297:41::o;3556:306:1:-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;3640:32:1::1;3675:24;:22;:24::i;:::-;3640:59;;3718:23;3729:11;3718:10;:23::i;:::-;3717:24;3709:53;;;::::0;;-1:-1:-1;;;3709:53:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3709:53:1;;;;;;;;;;;;;::::1;;3772:21;::::0;::::1;:35:::0;;-1:-1:-1;;;;;3772:35:1;::::1;-1:-1:-1::0;;;;;;3772:35:1;;::::1;::::0;::::1;::::0;;;3822:33:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;947:1:3;3556:306:1::0;:::o;3337:213::-;895:22:3;906:10;895;:22::i;:::-;887:50;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;-1:-1:-1;;;887:50:3;;;;;;;;;;;;;;;3399:32:1::1;3434:24;:22;:24::i;:::-;3468:21;::::0;::::1;:36:::0;;-1:-1:-1;;;;;;3468:36:1::1;::::0;;3519:24:::1;::::0;3399:59;;-1:-1:-1;3519:24:1::1;::::0;3500:3:::1;::::0;3519:24:::1;947:1:3;3337:213:1:o:0;1811:279::-;1868:28;1908:17;1928:18;:16;:18::i;:::-;1908:38;;1956:32;1991:14;2006:3;1991:19;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1991:19:1;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1991:19:1;;;;;;;;;;;;;;;;-1:-1:-1;1991:19:1;;;;;;;;;;;2028:15;;;1991:19;;-1:-1:-1;;;;2028:15:1;;;;;-1:-1:-1;2020:43:1;;-1:-1:-1;2020:43:1;;;;-1:-1:-1;;;2020:43:1;;;;;;;;;;;;-1:-1:-1;;;2020:43:1;;;;;;;;;;;;;;;2080:3;-1:-1:-1;;1811:279:1;:::o;4180:241::-;4249:23;4260:11;4249:10;:23::i;:::-;4248:24;4240:53;;;;;-1:-1:-1;;;4240:53:1;;;;;;;;;;;;-1:-1:-1;;;4240:53:1;;;;;;;;;;;;;;;4303:32;4338:24;:22;:24::i;:::-;-1:-1:-1;;;;;4372:35:1;;;:22;:35;;;;;;;;-1:-1:-1;4372:35:1;;;:42;;-1:-1:-1;;4372:42:1;4410:4;4372:42;;;4180:241::o;2218:122:5:-;2278:17;2313:20;;;;;;;;;;;;;;;;;2307:26;;2218:122;:::o

Swarm Source

ipfs://426e18696b8bdc68a46072a92d0abb91970db2b136a192f5c704fa56ebd9fc73
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.

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