{"contractName":"FallbackManager","abi":[{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"handler","type":"address"}],"name":"setFallbackHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50610239806100206000396000f3fe60806040526004361061001e5760003560e01c8063f08a0323146100c8575b60003411806100305750600080369050145b1561003a576100c6565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146100c357366000803760008036600080855af13d6000803e60008114156100be573d6000fd5b3d6000f35b50505b005b3480156100d457600080fd5b50610117600480360360208110156100eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610119565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461019d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806101d9602c913960400191505060405180910390fd5b6101a6816101a9565b50565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b9050818155505056fe4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207468697320636f6e7472616374a265627a7a72315820da839b3f17a6f7bbe3674215016f6b34f6f6dc99771b4307a14dacb1ce88bb0664736f6c634300050e0032","deployedBytecode":"0x60806040526004361061001e5760003560e01c8063f08a0323146100c8575b60003411806100305750600080369050145b1561003a576100c6565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146100c357366000803760008036600080855af13d6000803e60008114156100be573d6000fd5b3d6000f35b50505b005b3480156100d457600080fd5b50610117600480360360208110156100eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610119565b005b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461019d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806101d9602c913960400191505060405180910390fd5b6101a6816101a9565b50565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b9050818155505056fe4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207468697320636f6e7472616374a265627a7a72315820da839b3f17a6f7bbe3674215016f6b34f6f6dc99771b4307a14dacb1ce88bb0664736f6c634300050e0032","sourceMap":"215:1756:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;215:1756:3;;;;;;;","deployedSourceMap":"215:1756:3:-;;;;;;;;;;;;;;;;;;1251:1;1239:9;:13;:37;;;;1275:1;1256:8;;:15;;:20;1239:37;1235:74;;;1292:7;;1235:74;1318:12;376:66;1333:29;;1318:44;;1372:15;1501:4;1495:11;1484:22;;1549:1;1530:21;;:7;:21;;;1526:437;;1681:14;1678:1;1675;1662:34;1772:1;1769;1753:14;1750:1;1747;1738:7;1733:3;1728:46;1812:16;1809:1;1806;1791:38;1861:1;1852:7;1849:14;1846:2;;;1876:16;1873:1;1866:27;1846:2;1922:16;1919:1;1912:27;1644:309;1108:861;;;215:1756;967:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;967:135:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;967:135:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;;252:4:11;230:27;;:10;:27;;;222:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1060:35:3;1087:7;1060:26;:35::i;:::-;967:135;:::o;449:250::-;521:12;376:66;536:29;;521:44;;675:7;669:4;662:21;648:45;;:::o","source":"pragma solidity >=0.5.0 <0.7.0;\n\nimport \"../common/SelfAuthorized.sol\";\n\n/// @title Fallback Manager - A contract that manages fallback calls made to this contract\n/// @author Richard Meissner - <richard@gnosis.pm>\ncontract FallbackManager is SelfAuthorized {\n\n    // keccak256(\"fallback_manager.handler.address\")\n    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;\n\n    function internalSetFallbackHandler(address handler) internal {\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\n        // solium-disable-next-line security/no-inline-assembly\n        assembly {\n            sstore(slot, handler)\n        }\n    }\n\n    /// @dev Allows to add a contract to handle fallback calls.\n    ///      Only fallback calls without value and with data will be forwarded.\n    ///      This can only be done via a Safe transaction.\n    /// @param handler contract to handle fallbacks calls.\n    function setFallbackHandler(address handler)\n        public\n        authorized\n    {\n        internalSetFallbackHandler(handler);\n    }\n\n    function ()\n        external\n        payable\n    {\n        // Only calls without value and with data will be forwarded\n        if (msg.value > 0 || msg.data.length == 0) {\n            return;\n        }\n        bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;\n        address handler;\n        // solium-disable-next-line security/no-inline-assembly\n        assembly {\n            handler := sload(slot)\n        }\n\n        if (handler != address(0)) {\n            // solium-disable-next-line security/no-inline-assembly\n            assembly {\n                calldatacopy(0, 0, calldatasize())\n                let success := call(gas, handler, 0, 0, calldatasize(), 0, 0)\n                returndatacopy(0, 0, returndatasize())\n                if eq(success, 0) { revert(0, returndatasize()) }\n                return(0, returndatasize())\n            }\n        }\n    }\n}","compiler":{"name":"solc","version":"0.5.14+commit.01f1aaa4.Emscripten.clang"},"networks":{},"schemaVersion":"2.0.3","updatedAt":"2022-11-11T08:20:54.731Z"}