Contract 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 1

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdd3cfb81ec2ce17e38ff5ad558c32d3621f9ee14429157f1dcbb7dfce13194feSwap In205884862022-10-03 9:47:1114 hrs 31 mins ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.000660423680178 AVAX0.024271489861 26.702777778
0x444e5b33ac9a95de8a89aeadf2326b474d84bf7d0d315a101d37fde7e4928598Swap Out205564912022-10-02 15:20:191 day 8 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.03070892267643.605639364
0x45c7a9d249ead055f63d7001f55d4f2828ee2c5ef2d33028e1cef12900863b22Swap Out205564812022-10-02 15:19:591 day 8 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.020730767428.35
0x0b2db2873fbae98923382ba63873606270a981fdb38781719a0059849e6f0fc6Swap Out205564692022-10-02 15:19:331 day 8 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.016798830427.4
0x4dc509571b0780abbf8e12c2cd447f75d99cfb7f1f517326d0573fe21e83000fSwap Out205564492022-10-02 15:18:531 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.01954874432331.8646575
0xfb20fbc3c89da93b27dafedd6ef0d9879c1a41136b1d8d875556351dd0bbb8c2Swap Out205563992022-10-02 15:17:121 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.02343784538631.609843361
0x93b592ddad2702dfbb9004ef998754c7108fa204ba52a06ea8d3c911c3c5ce95Swap Out205563862022-10-02 15:16:431 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.01850101540326.725530008
0xff1c616b52d3fa055fd54acb4de38ead4be00a992951ae00c8598157da05b157Swap Out205563642022-10-02 15:15:561 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.01974747757927.009862362
0x9de1af22db3f887cd1fb0ccc3a9cb997331b88f9916e3449865d14ef1c14a4feSwap Out205563412022-10-02 15:15:111 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0166152602226.923
0xc9257658ed52649d31bba1eadb12d3c1fc6a3b1e6d49f225bb05e3fa395a9680Swap Out205563232022-10-02 15:14:271 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0196255421530.575
0x03ccfd5110009254911fd9dd1d12fe0d97eac7e8e9fefc5dcc9e98efa5ea8b64Swap Out205562792022-10-02 15:12:571 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.01609668362626.8941
0x54b47cedc39528b9bd394ee7a0269a7755e97e959568ef295aa34986c0fc8b91Swap Out205556692022-10-02 14:52:141 day 9 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0176047729127.5039767
0xbf418f7394b464519bd1ca4a24d4a6f504cf27a202887df37f5c27c216b91e1bSwap Out204448292022-09-29 23:12:284 days 1 hr ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0205361085628.226
0x7e5e168df374be48abede13892ff350b43c886cda74fb845735900783ad9a944Swap Out204446412022-09-29 23:06:074 days 1 hr ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.02335861226.8
0x6b3f48dc42e7eafa08a50fd93dddfcf6056a6456e83c7cfec1bb83e8c4f051c8Swap In204317522022-09-29 15:47:294 days 8 hrs ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.010568422816768 AVAX0.02017784457 26.91
0x232c14fd2ac217ac5ce6689040c0c55c9eff73c336b786db1a80c24f3a0c3706Swap In203996012022-09-28 21:26:575 days 2 hrs ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc2.033059541253529 AVAX0.02050443675 26.45
0x1af32240b86d809952eb6e6e031dc3a4a2b2de0d849c6654b0612e9af1566d1cSwap In203994392022-09-28 21:21:265 days 2 hrs ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.033059541253529 AVAX0.0183518808 30.9
0x60141573c91c90be252525164eed88966d331cdcf102a90141e248e23e35ae88Swap In203994222022-09-28 21:20:525 days 2 hrs ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.033059541253529 AVAX0.002182516 28
0x3e7c6dee79f856b8822764d5ea0549d717942cc5f972bbc3ed5a49d5fe9839b5Swap In203988372022-09-28 21:00:585 days 3 hrs ago0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.133059541253529 AVAX0.021511134499 27.74989325
0x1e2d8013beb4f36627dc9e764c64921492f2fa22bad1097f5d2e825e25b26de4Swap Out203292842022-09-27 5:15:326 days 19 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0113854172627.01
0x23a638e645ff125005df507d71c514ee61f7234f13003518d223b54377306786Swap Out203273902022-09-27 4:10:296 days 20 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.0262203273127.035
0x3e22aa934556145ef1a29dbf9abcb1e8c41bc32831a4385f10d6a7ee6bfb3064Swap Out203128912022-09-26 19:54:057 days 4 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.01103792427
0xf57e44e925d41e0f7d4581329ce6d81414e572f1203b41cc62f1c14436f95851Swap Out203099282022-09-26 18:11:427 days 6 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.018178106328.403424236
0xe53ab2b6ba8e27e373ba63a29e09a793a55be6647293fb145fa5ced0102e416aSwap Out203056632022-09-26 15:44:297 days 8 hrs ago0x28de4113921bd79388b0ef80a259f871977442e9 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.02439178556327.818114966
0x6ed24a1bc4936842500c4a9a851c97b482750650340c96a78f1067a3bd2edcf6Swap203023912022-09-26 13:52:227 days 10 hrs ago0x8861748bb5587d33de1b2007b46563db15f38c61 IN  0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0 AVAX0.019464452279 26.802529105
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xdd3cfb81ec2ce17e38ff5ad558c32d3621f9ee14429157f1dcbb7dfce13194fe205884862022-10-03 9:47:1114 hrs 31 mins ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.000660423680178424 AVAX
0xc9257658ed52649d31bba1eadb12d3c1fc6a3b1e6d49f225bb05e3fa395a9680205563232022-10-02 15:14:271 day 9 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f0.090198238210953443 AVAX
0xc9257658ed52649d31bba1eadb12d3c1fc6a3b1e6d49f225bb05e3fa395a9680205563232022-10-02 15:14:271 day 9 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.090198238210953443 AVAX
0x54b47cedc39528b9bd394ee7a0269a7755e97e959568ef295aa34986c0fc8b91205556692022-10-02 14:52:141 day 9 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f0.242235782622181015 AVAX
0x54b47cedc39528b9bd394ee7a0269a7755e97e959568ef295aa34986c0fc8b91205556692022-10-02 14:52:141 day 9 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.242235782622181015 AVAX
0x6b3f48dc42e7eafa08a50fd93dddfcf6056a6456e83c7cfec1bb83e8c4f051c8204317522022-09-29 15:47:294 days 8 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.000568422816768738 AVAX
0x6b3f48dc42e7eafa08a50fd93dddfcf6056a6456e83c7cfec1bb83e8c4f051c8204317522022-09-29 15:47:294 days 8 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc Wrapped AVAX0.01 AVAX
0x232c14fd2ac217ac5ce6689040c0c55c9eff73c336b786db1a80c24f3a0c3706203996012022-09-28 21:26:575 days 2 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.033059541253529976 AVAX
0x232c14fd2ac217ac5ce6689040c0c55c9eff73c336b786db1a80c24f3a0c3706203996012022-09-28 21:26:575 days 2 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc Wrapped AVAX2 AVAX
0x1af32240b86d809952eb6e6e031dc3a4a2b2de0d849c6654b0612e9af1566d1c203994392022-09-28 21:21:265 days 2 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.033059541253529976 AVAX
0x3e7c6dee79f856b8822764d5ea0549d717942cc5f972bbc3ed5a49d5fe9839b5203988372022-09-28 21:00:585 days 3 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.033059541253529976 AVAX
0x3e7c6dee79f856b8822764d5ea0549d717942cc5f972bbc3ed5a49d5fe9839b5203988372022-09-28 21:00:585 days 3 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc Wrapped AVAX0.1 AVAX
0x23a638e645ff125005df507d71c514ee61f7234f13003518d223b54377306786203273902022-09-27 4:10:296 days 20 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0x352855b093c3f9e0faa85f512058585c3101edbb4.281304094770182493 AVAX
0x23a638e645ff125005df507d71c514ee61f7234f13003518d223b54377306786203273902022-09-27 4:10:296 days 20 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc4.281304094770182493 AVAX
0xf57e44e925d41e0f7d4581329ce6d81414e572f1203b41cc62f1c14436f95851203099282022-09-26 18:11:427 days 6 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f1.071844533606804711 AVAX
0xf57e44e925d41e0f7d4581329ce6d81414e572f1203b41cc62f1c14436f95851203099282022-09-26 18:11:427 days 6 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc1.071844533606804711 AVAX
0xe53ab2b6ba8e27e373ba63a29e09a793a55be6647293fb145fa5ced0102e416a203056632022-09-26 15:44:297 days 8 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0x26c795a469719c032473687c8cc9e156b6fea6607.549917445454169451 AVAX
0xe53ab2b6ba8e27e373ba63a29e09a793a55be6647293fb145fa5ced0102e416a203056632022-09-26 15:44:297 days 8 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc7.549917445454169451 AVAX
0x6ed24a1bc4936842500c4a9a851c97b482750650340c96a78f1067a3bd2edcf6203023912022-09-26 13:52:227 days 10 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0x8861748bb5587d33de1b2007b46563db15f38c615.740072494141755348 AVAX
0x6ed24a1bc4936842500c4a9a851c97b482750650340c96a78f1067a3bd2edcf6203023912022-09-26 13:52:227 days 10 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc5.740072494141755348 AVAX
0x480b1cf9342f21ba6ee49f6333f4ca5a51364d09e504ef6db8fb21c4c08cdf13203002622022-09-26 12:39:277 days 11 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0xdee7fdcdafeeffb12fc67a3ed73265dba443c87f1.05966233898817484 AVAX
0x480b1cf9342f21ba6ee49f6333f4ca5a51364d09e504ef6db8fb21c4c08cdf13203002622022-09-26 12:39:277 days 11 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc1.05966233898817484 AVAX
0xdee16d5fddc59b8f1905fd8c323fd3af8d18c69d5a621a89878952f470c11a7f202607562022-09-25 13:49:388 days 10 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0x3b0567cbdadd938a1ee3cfde0a2a0259c4dc0dbd0.540051064606165041 AVAX
0xdee16d5fddc59b8f1905fd8c323fd3af8d18c69d5a621a89878952f470c11a7f202607562022-09-25 13:49:388 days 10 hrs ago 0x95968270123e1070e71792949c58edadd4c700f3 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc0.540051064606165041 AVAX
0xd443d13d43853b66aa276ae3d03593bb294dba8375e673baf958038722e42e90202557462022-09-25 10:56:208 days 13 hrs ago 0x6141143cf15d3327c17aac4b7bfb79a77a108fcc 0xc63e43e2f09537a2b07fba1e02c6f4163a9565250.000575251583591261 AVAX
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x46325c7005f04900f8d74cd0eab903597b6effff

Contract Name:
ERC1967Proxy

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 13 : import.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol";
import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";

// Kept for backwards compatibility with older versions of Hardhat and Truffle plugins.
contract AdminUpgradeabilityProxy is TransparentUpgradeableProxy {
    constructor(address logic, address admin, bytes memory data) payable TransparentUpgradeableProxy(logic, admin, data) {}
}

File 2 of 13 : BeaconProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IBeacon.sol";
import "../Proxy.sol";
import "../ERC1967/ERC1967Upgrade.sol";

/**
 * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.
 *
 * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't
 * conflict with the storage layout of the implementation behind the proxy.
 *
 * _Available since v3.4._
 */
contract BeaconProxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the proxy with `beacon`.
     *
     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This
     * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity
     * constructor.
     *
     * Requirements:
     *
     * - `beacon` must be a contract with the interface {IBeacon}.
     */
    constructor(address beacon, bytes memory data) payable {
        assert(_BEACON_SLOT == bytes32(uint256(keccak256("eip1967.proxy.beacon")) - 1));
        _upgradeBeaconToAndCall(beacon, data, false);
    }

    /**
     * @dev Returns the current beacon address.
     */
    function _beacon() internal view virtual returns (address) {
        return _getBeacon();
    }

    /**
     * @dev Returns the current implementation address of the associated beacon.
     */
    function _implementation() internal view virtual override returns (address) {
        return IBeacon(_getBeacon()).implementation();
    }

    /**
     * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.
     *
     * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.
     *
     * Requirements:
     *
     * - `beacon` must be a contract.
     * - The implementation returned by `beacon` must be a contract.
     */
    function _setBeacon(address beacon, bytes memory data) internal virtual {
        _upgradeBeaconToAndCall(beacon, data, false);
    }
}

File 3 of 13 : UpgradeableBeacon.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IBeacon.sol";
import "../../access/Ownable.sol";
import "../../utils/Address.sol";

/**
 * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their
 * implementation contract, which is where they will delegate all function calls.
 *
 * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.
 */
contract UpgradeableBeacon is IBeacon, Ownable {
    address private _implementation;

    /**
     * @dev Emitted when the implementation returned by the beacon is changed.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the
     * beacon.
     */
    constructor(address implementation_) {
        _setImplementation(implementation_);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function implementation() public view virtual override returns (address) {
        return _implementation;
    }

    /**
     * @dev Upgrades the beacon to a new implementation.
     *
     * Emits an {Upgraded} event.
     *
     * Requirements:
     *
     * - msg.sender must be the owner of the contract.
     * - `newImplementation` must be a contract.
     */
    function upgradeTo(address newImplementation) public virtual onlyOwner {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Sets the implementation contract address for this beacon
     *
     * Requirements:
     *
     * - `newImplementation` must be a contract.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "UpgradeableBeacon: implementation is not a contract");
        _implementation = newImplementation;
    }
}

File 4 of 13 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Proxy.sol";
import "./ERC1967Upgrade.sol";

/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCall(_logic, _data, false);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }
}

File 5 of 13 : TransparentUpgradeableProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1967/ERC1967Proxy.sol";

/**
 * @dev This contract implements a proxy that is upgradeable by an admin.
 *
 * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
 * clashing], which can potentially be used in an attack, this contract uses the
 * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
 * things that go hand in hand:
 *
 * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
 * that call matches one of the admin functions exposed by the proxy itself.
 * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
 * implementation. If the admin tries to call a function on the implementation it will fail with an error that says
 * "admin cannot fallback to proxy target".
 *
 * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
 * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
 * to sudden errors when trying to call a function from the proxy implementation.
 *
 * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
 * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.
 */
contract TransparentUpgradeableProxy is ERC1967Proxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
     */
    constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _changeAdmin(admin_);
    }

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external ifAdmin {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address) {
        return _getAdmin();
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

File 6 of 13 : ProxyAdmin.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./TransparentUpgradeableProxy.sol";
import "../../access/Ownable.sol";

/**
 * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an
 * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.
 */
contract ProxyAdmin is Ownable {

    /**
     * @dev Returns the current implementation of `proxy`.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
        // We need to manually run the static call since the getter cannot be flagged as view
        // bytes4(keccak256("implementation()")) == 0x5c60da1b
        (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b");
        require(success);
        return abi.decode(returndata, (address));
    }

    /**
     * @dev Returns the current admin of `proxy`.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {
        // We need to manually run the static call since the getter cannot be flagged as view
        // bytes4(keccak256("admin()")) == 0xf851a440
        (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440");
        require(success);
        return abi.decode(returndata, (address));
    }

    /**
     * @dev Changes the admin of `proxy` to `newAdmin`.
     *
     * Requirements:
     *
     * - This contract must be the current admin of `proxy`.
     */
    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {
        proxy.changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {
        proxy.upgradeTo(implementation);
    }

    /**
     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See
     * {TransparentUpgradeableProxy-upgradeToAndCall}.
     *
     * Requirements:
     *
     * - This contract must be the admin of `proxy`.
     */
    function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {
        proxy.upgradeToAndCall{value: msg.value}(implementation, data);
    }
}

File 7 of 13 : IBeacon.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

File 8 of 13 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        // solhint-disable-next-line no-inline-assembly
        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 because we don't know the 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()) }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback () external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive () external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {
    }
}

File 9 of 13 : ERC1967Upgrade.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

import "../beacon/IBeacon.sol";
import "../../utils/Address.sol";
import "../../utils/StorageSlot.sol";

/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 *
 * @custom:oz-upgrades-unsafe-allow delegatecall
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallSecure(address newImplementation, bytes memory data, bool forceCall) internal {
        address oldImplementation = _getImplementation();

        // Initial upgrade and setup call
        _setImplementation(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }

        // Perform rollback test if not already in progress
        StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
        if (!rollbackTesting.value) {
            // Trigger rollback using upgradeTo from the new implementation
            rollbackTesting.value = true;
            Address.functionDelegateCall(
                newImplementation,
                abi.encodeWithSignature(
                    "upgradeTo(address)",
                    oldImplementation
                )
            );
            rollbackTesting.value = false;
            // Check rollback was effective
            require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
            // Finally reset to the new implementation and log the upgrade
            _setImplementation(newImplementation);
            emit Upgraded(newImplementation);
        }
    }

    /**
     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
     *
     * Emits a {BeaconUpgraded} event.
     */
    function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {
        _setBeacon(newBeacon);
        emit BeaconUpgraded(newBeacon);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
        }
    }

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Returns the current admin.
     */
    function _getAdmin() internal view returns (address) {
        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        require(newAdmin != address(0), "ERC1967: new admin is the zero address");
        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     */
    function _changeAdmin(address newAdmin) internal {
        emit AdminChanged(_getAdmin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
     */
    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;

    /**
     * @dev Emitted when the beacon is upgraded.
     */
    event BeaconUpgraded(address indexed beacon);

    /**
     * @dev Returns the current beacon.
     */
    function _getBeacon() internal view returns (address) {
        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;
    }

    /**
     * @dev Stores a new beacon in the EIP1967 beacon slot.
     */
    function _setBeacon(address newBeacon) private {
        require(
            Address.isContract(newBeacon),
            "ERC1967: new beacon is not a contract"
        );
        require(
            Address.isContract(IBeacon(newBeacon).implementation()),
            "ERC1967: beacon implementation is not a contract"
        );
        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
    }
}

File 10 of 13 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

File 11 of 13 : StorageSlot.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

File 12 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

File 13 of 13 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

6080604052604051610772380380610772833981016040819052610022916102f7565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61040f565b60008051602061072b8339815191521461007757634e487b7160e01b600052600160045260246000fd5b6100838282600061008a565b5050610474565b610093836100f4565b6040516001600160a01b038416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000825111806100d45750805b156100ef576100ed83836101b460201b6100291760201c565b505b505050565b610107816101e060201b6100551760201c565b61016e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b8061019360008051602061072b83398151915260001b6101e660201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606101d9838360405180606001604052806027815260200161074b602791396101e9565b9392505050565b3b151590565b90565b6060833b6102485760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610165565b600080856001600160a01b03168560405161026391906103c0565b600060405180830381855af49150503d806000811461029e576040519150601f19603f3d011682016040523d82523d6000602084013e6102a3565b606091505b5090925090506102b48282866102be565b9695505050505050565b606083156102cd5750816101d9565b8251156102dd5782518084602001fd5b8160405162461bcd60e51b815260040161016591906103dc565b60008060408385031215610309578182fd5b82516001600160a01b038116811461031f578283fd5b60208401519092506001600160401b038082111561033b578283fd5b818501915085601f83011261034e578283fd5b8151818111156103605761036061045e565b604051601f8201601f19908116603f011681019083821181831017156103885761038861045e565b816040528281528860208487010111156103a0578586fd5b6103b1836020830160208801610432565b80955050505050509250929050565b600082516103d2818460208701610432565b9190910192915050565b60006020825282518060208401526103fb816040850160208701610432565b601f01601f19169190910160400192915050565b60008282101561042d57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561044d578181015183820152602001610435565b838111156100ed5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104836000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b600060208252825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209b8470f06e8a3960c912103fc2be177edaad69584ee3c7d2809ee737e79408e764736f6c63430008020033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000092868a5255c628da08f550a858a802f5351c5223000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a41459457a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

486:830:1:-:0;;;;;;2835:11:3;:9;:11::i;:::-;486:830:1;;2611:11:3;2257:110;2332:28;2342:17;:15;:17::i;:::-;2332:9;:28::i;:::-;2257:110::o;6276:198:9:-;6359:12;6390:77;6411:6;6419:4;6390:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6383:84;6276:198;-1:-1:-1;;;6276:198:9:o;718:413::-;1078:20;1116:8;;;718:413::o;1542:147:11:-;1669:4;1645:38::o;1174:140:1:-;1241:12;1272:35;901:66:2;1251:54;-1:-1:-1;;;;;1251:54:2;;1172:140;1272:35:1;1265:42;;1174:140;:::o;883:895:3:-;1277:14;1274:1;1271;1258:34;1491:1;1488;1472:14;1469:1;1453:14;1446:5;1433:60;1567:16;1564:1;1561;1546:38;1605:6;1672:38;;;;1743:16;1740:1;1733:27;1672:38;1691:16;1688:1;1681:27;6660:417:9;6771:12;1078:20;;6795:69;;;;-1:-1:-1;;;6795:69:9;;883:2:13;6795:69:9;;;865:21:13;922:2;902:18;;;895:30;961:34;941:18;;;934:62;-1:-1:-1;;;1012:18:13;;;1005:36;1058:19;;6795:69:9;;;;;;;;;6935:12;6949:23;6976:6;-1:-1:-1;;;;;6976:19:9;6996:4;6976:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6934:67;;;;7018:52;7036:7;7045:10;7057:12;7018:17;:52::i;:::-;7011:59;6660:417;-1:-1:-1;;;;;;6660:417:9:o;7083:725::-;7198:12;7226:7;7222:580;;;-1:-1:-1;7256:10:9;7249:17;;7222:580;7367:17;;:21;7363:429;;7625:10;7619:17;7685:15;7672:10;7668:2;7664:19;7657:44;7574:145;7764:12;7757:20;;-1:-1:-1;;;7757:20:9;;;;;;;;:::i;14:274:13:-;;181:6;175:13;197:53;243:6;238:3;231:4;223:6;219:17;197:53;:::i;:::-;266:16;;;;;151:137;-1:-1:-1;;151:137:13:o;293:383::-;;442:2;431:9;424:21;474:6;468:13;517:6;512:2;501:9;497:18;490:34;533:66;592:6;587:2;576:9;572:18;567:2;559:6;555:15;533:66;:::i;:::-;660:2;639:15;-1:-1:-1;;635:29:13;620:45;;;;667:2;616:54;;414:262;-1:-1:-1;;414:262:13:o;1088:258::-;1160:1;1170:113;1184:6;1181:1;1178:13;1170:113;;;1260:11;;;1254:18;1241:11;;;1234:39;1206:2;1199:10;1170:113;;;1301:6;1298:1;1295:13;1292:2;;;1336:1;1327:6;1322:3;1318:16;1311:27;1292:2;;1141:205;;;:::o

Swarm Source

ipfs://9b8470f06e8a3960c912103fc2be177edaad69584ee3c7d2809ee737e79408e7
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.