// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.17; interface IImplementationAuthorityLegacy { function getImplementation() external view returns (address); } contract LegacyProxy { address public implementationAuthority; constructor( address _implementationAuthority, address _identityRegistry, address _compliance, string memory _name, string memory _symbol, uint8 _decimals, address _onchainID ) { implementationAuthority = _implementationAuthority; address logic = IImplementationAuthorityLegacy(implementationAuthority).getImplementation(); // solhint-disable-next-line avoid-low-level-calls (bool success, ) = logic.delegatecall( abi.encodeWithSignature( 'init(address,address,string,string,uint8,address)', _identityRegistry, _compliance, _name, _symbol, _decimals, _onchainID ) ); require(success, 'Initialization failed.'); } fallback() external payable { address logic = IImplementationAuthorityLegacy(implementationAuthority).getImplementation(); assembly { // solium-disable-line calldatacopy(0x0, 0x0, calldatasize()) let success := delegatecall(sub(gas(), 10000), logic, 0x0, calldatasize(), 0, 0) let retSz := returndatasize() returndatacopy(0, 0, retSz) switch success case 0 { revert(0, retSz) } default { return(0, retSz) } } } }