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 EIP1967, so that it doesn't conflict with the storage layout of the implementation behind the proxy.
event AdminChanged(address previousAdmin, address newAdmin)
event BeaconUpgraded(address indexed beacon)
event Upgraded(address indexed implementation)