{
  "contractName": "Clonable",
  "abi": [
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "self",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "clone",
          "type": "address"
        }
      ],
      "name": "Cloned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cloned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "self",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"self\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"Cloned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cloned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"self\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cloned()\":{\"notice\":\"Tells whether this contract is a clone of `self()`\"},\"initialized()\":{\"notice\":\"Tells whether this instance has been initialized.\"},\"self()\":{\"notice\":\"Contract address to which clones will be re-directed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/patterns/Clonable.sol\":\"Clonable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"project:/contracts/patterns/Clonable.sol\":{\"keccak256\":\"0xdfaf080d882e5b4f5e419da4ed2a5f1f0367eb2449b37b9d62d6b3d5649c3b6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed194f0ddb44f9c2e14156090f1f43c055d4fda23115041ab928da9ca538f6ed\",\"dweb:/ipfs/QmZnD4Z9yrT1SY5HTZagwv1bT9FJfsgmntZHf9qzLwDX7K\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.6.0 <0.9.0;\r\n\r\nimport \"./Initializable.sol\";\r\n\r\nabstract contract Clonable\r\n    is\r\n        Initializable\r\n{\r\n    address immutable internal _SELF = address(this);\r\n\r\n    event Cloned(address indexed by, address indexed self, address indexed clone);\r\n\r\n    modifier onlyDelegateCalls virtual {\r\n        require(address(this) != _SELF, \"Clonable: not a delegate call\");\r\n        _;\r\n    }\r\n\r\n    modifier wasInitialized {\r\n        require(initialized(), \"Clonable: not initialized\");\r\n        _;\r\n    }\r\n\r\n    /// @notice Tells whether this contract is a clone of `self()`\r\n    function cloned()\r\n        public view\r\n        returns (bool)\r\n    {\r\n        return (\r\n            address(this) != self()\r\n        );\r\n    }\r\n\r\n    /// @notice Tells whether this instance has been initialized.\r\n    function initialized() virtual public view returns (bool);\r\n\r\n    /// @notice Contract address to which clones will be re-directed.\r\n    function self() virtual public view returns (address) {\r\n        return _SELF;\r\n    }\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract\r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function should always provide a new address, no matter how many times \r\n    /// @dev is actually called from the same `msg.sender`.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function _clone()\r\n        internal\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE new instance:\r\n            _instance := create(0, ptr, 0x37)\r\n        }        \r\n        require(_instance != address(0), \"Clonable: CREATE failed\");\r\n        emit Cloned(msg.sender, self(), _instance);\r\n    }\r\n\r\n    /// @notice Returns minimal proxy's deploy bytecode.\r\n    function _cloneBytecode()\r\n        virtual internal view\r\n        returns (bytes memory)\r\n    {\r\n        return abi.encodePacked(\r\n            hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\",\r\n            bytes20(self()),\r\n            hex\"5af43d82803e903d91602b57fd5bf3\"\r\n        );\r\n    }\r\n\r\n    /// @notice Returns mem pointer to minimal proxy's deploy bytecode.\r\n    function _cloneBytecodePtr()\r\n        virtual internal view\r\n        returns (bytes memory ptr)\r\n    {\r\n        address _base = self();\r\n        assembly {\r\n            // ptr to free mem:\r\n            ptr := mload(0x40)\r\n            // begin minimal proxy construction bytecode:\r\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\r\n            // make minimal proxy delegate all calls to `self()`:\r\n            mstore(add(ptr, 0x14), shl(0x60, _base))\r\n            // end minimal proxy construction bytecode:\r\n            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\r\n        }\r\n    }\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract \r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\r\n    /// @dev the clone. Using the same `_salt` multiple times will revert, since\r\n    /// @dev no contract can be deployed more than once at the same address.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function _cloneDeterministic(bytes32 _salt)\r\n        virtual internal\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE2 new instance:\r\n            _instance := create2(0, ptr, 0x37, _salt)\r\n        }\r\n        require(_instance != address(0), \"Clonable: CREATE2 failed\");\r\n        emit Cloned(msg.sender, self(), _instance);\r\n    }\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\patterns\\Clonable.sol",
  "ast": {
    "absolutePath": "project:/contracts/patterns/Clonable.sol",
    "exportedSymbols": {
      "Clonable": [
        24003
      ],
      "Initializable": [
        253
      ]
    },
    "id": 24004,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 23835,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:76"
      },
      {
        "absolutePath": "project:/contracts/patterns/Initializable.sol",
        "file": "./Initializable.sol",
        "id": 23836,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 24004,
        "sourceUnit": 24007,
        "src": "70:29:76",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 23837,
              "name": "Initializable",
              "nameLocations": [
                "147:13:76"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 253,
              "src": "147:13:76"
            },
            "id": 23838,
            "nodeType": "InheritanceSpecifier",
            "src": "147:13:76"
          }
        ],
        "canonicalName": "Clonable",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 24003,
        "linearizedBaseContracts": [
          24003,
          253
        ],
        "name": "Clonable",
        "nameLocation": "121:8:76",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 23844,
            "mutability": "immutable",
            "name": "_SELF",
            "nameLocation": "196:5:76",
            "nodeType": "VariableDeclaration",
            "scope": 24003,
            "src": "169:48:76",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 23839,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "169:7:76",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 23842,
                  "name": "this",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4294967268,
                  "src": "212:4:76",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Clonable_$24003",
                    "typeString": "contract Clonable"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_contract$_Clonable_$24003",
                    "typeString": "contract Clonable"
                  }
                ],
                "id": 23841,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "204:7:76",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 23840,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "204:7:76",
                  "typeDescriptions": {}
                }
              },
              "id": 23843,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "typeConversion",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "204:13:76",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "eventSelector": "f376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc248",
            "id": 23852,
            "name": "Cloned",
            "nameLocation": "232:6:76",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 23851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23846,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "by",
                  "nameLocation": "255:2:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 23852,
                  "src": "239:18:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "239:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23848,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "275:4:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 23852,
                  "src": "259:20:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23847,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "259:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23850,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "clone",
                  "nameLocation": "297:5:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 23852,
                  "src": "281:21:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "281:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "238:65:76"
            },
            "src": "226:78:76"
          },
          {
            "body": {
              "id": 23865,
              "nodeType": "Block",
              "src": "347:95:76",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 23860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 23857,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967268,
                              "src": "374:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Clonable_$24003",
                                "typeString": "contract Clonable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Clonable_$24003",
                                "typeString": "contract Clonable"
                              }
                            ],
                            "id": 23856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "366:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 23855,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "366:7:76",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "366:13:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 23859,
                          "name": "_SELF",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23844,
                          "src": "383:5:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "366:22:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a206e6f7420612064656c65676174652063616c6c",
                        "id": 23861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "390:31:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b6a1122071e92f90224e417e2cb497d39f585d67396ea1fbd7e68cd4a26d5ef3",
                          "typeString": "literal_string \"Clonable: not a delegate call\""
                        },
                        "value": "Clonable: not a delegate call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b6a1122071e92f90224e417e2cb497d39f585d67396ea1fbd7e68cd4a26d5ef3",
                          "typeString": "literal_string \"Clonable: not a delegate call\""
                        }
                      ],
                      "id": 23854,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "358:7:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "358:64:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23863,
                  "nodeType": "ExpressionStatement",
                  "src": "358:64:76"
                },
                {
                  "id": 23864,
                  "nodeType": "PlaceholderStatement",
                  "src": "433:1:76"
                }
              ]
            },
            "id": 23866,
            "name": "onlyDelegateCalls",
            "nameLocation": "321:17:76",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 23853,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "339:0:76"
            },
            "src": "312:130:76",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 23875,
              "nodeType": "Block",
              "src": "474:82:76",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 23869,
                          "name": "initialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23898,
                          "src": "493:11:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 23870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "493:13:76",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a206e6f7420696e697469616c697a6564",
                        "id": 23871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "508:27:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ce61f321a906d42c94add0f81a303e335ce4d3c44e707c18568ea10a1470b252",
                          "typeString": "literal_string \"Clonable: not initialized\""
                        },
                        "value": "Clonable: not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ce61f321a906d42c94add0f81a303e335ce4d3c44e707c18568ea10a1470b252",
                          "typeString": "literal_string \"Clonable: not initialized\""
                        }
                      ],
                      "id": 23868,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "485:7:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "485:51:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23873,
                  "nodeType": "ExpressionStatement",
                  "src": "485:51:76"
                },
                {
                  "id": 23874,
                  "nodeType": "PlaceholderStatement",
                  "src": "547:1:76"
                }
              ]
            },
            "id": 23876,
            "name": "wasInitialized",
            "nameLocation": "459:14:76",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 23867,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "474:0:76"
            },
            "src": "450:106:76",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 23891,
              "nodeType": "Block",
              "src": "700:75:76",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 23888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 23884,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967268,
                              "src": "741:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Clonable_$24003",
                                "typeString": "contract Clonable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Clonable_$24003",
                                "typeString": "contract Clonable"
                              }
                            ],
                            "id": 23883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "733:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 23882,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "733:7:76",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "733:13:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 23886,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23907,
                            "src": "750:4:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 23887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "750:6:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "733:23:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 23889,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "718:49:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 23881,
                  "id": 23890,
                  "nodeType": "Return",
                  "src": "711:56:76"
                }
              ]
            },
            "documentation": {
              "id": 23877,
              "nodeType": "StructuredDocumentation",
              "src": "564:62:76",
              "text": "@notice Tells whether this contract is a clone of `self()`"
            },
            "functionSelector": "a04daef0",
            "id": 23892,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cloned",
            "nameLocation": "641:6:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "647:2:76"
            },
            "returnParameters": {
              "id": 23881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23880,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 23892,
                  "src": "689:4:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 23879,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "689:4:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "688:6:76"
            },
            "scope": 24003,
            "src": "632:143:76",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 23893,
              "nodeType": "StructuredDocumentation",
              "src": "783:61:76",
              "text": "@notice Tells whether this instance has been initialized."
            },
            "functionSelector": "158ef93e",
            "id": 23898,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "initialized",
            "nameLocation": "859:11:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "870:2:76"
            },
            "returnParameters": {
              "id": 23897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23896,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 23898,
                  "src": "902:4:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 23895,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "902:4:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "901:6:76"
            },
            "scope": 24003,
            "src": "850:58:76",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 23906,
              "nodeType": "Block",
              "src": "1041:31:76",
              "statements": [
                {
                  "expression": {
                    "id": 23904,
                    "name": "_SELF",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 23844,
                    "src": "1059:5:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 23903,
                  "id": 23905,
                  "nodeType": "Return",
                  "src": "1052:12:76"
                }
              ]
            },
            "documentation": {
              "id": 23899,
              "nodeType": "StructuredDocumentation",
              "src": "916:65:76",
              "text": "@notice Contract address to which clones will be re-directed."
            },
            "functionSelector": "7104ddb2",
            "id": 23907,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "self",
            "nameLocation": "996:4:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23900,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1000:2:76"
            },
            "returnParameters": {
              "id": 23903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23902,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 23907,
                  "src": "1032:7:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1032:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1031:9:76"
            },
            "scope": 24003,
            "src": "987:85:76",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 23937,
              "nodeType": "Block",
              "src": "1604:303:76",
              "statements": [
                {
                  "assignments": [
                    23914
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23914,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "1628:3:76",
                      "nodeType": "VariableDeclaration",
                      "scope": 23937,
                      "src": "1615:16:76",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 23913,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1615:5:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 23917,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23915,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23969,
                      "src": "1634:17:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 23916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1634:19:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1615:38:76"
                },
                {
                  "AST": {
                    "nativeSrc": "1673:96:76",
                    "nodeType": "YulBlock",
                    "src": "1673:96:76",
                    "statements": [
                      {
                        "nativeSrc": "1725:33:76",
                        "nodeType": "YulAssignment",
                        "src": "1725:33:76",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1745:1:76",
                              "nodeType": "YulLiteral",
                              "src": "1745:1:76",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "1748:3:76",
                              "nodeType": "YulIdentifier",
                              "src": "1748:3:76"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1753:4:76",
                              "nodeType": "YulLiteral",
                              "src": "1753:4:76",
                              "type": "",
                              "value": "0x37"
                            }
                          ],
                          "functionName": {
                            "name": "create",
                            "nativeSrc": "1738:6:76",
                            "nodeType": "YulIdentifier",
                            "src": "1738:6:76"
                          },
                          "nativeSrc": "1738:20:76",
                          "nodeType": "YulFunctionCall",
                          "src": "1738:20:76"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "1725:9:76",
                            "nodeType": "YulIdentifier",
                            "src": "1725:9:76"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 23911,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1725:9:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23914,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1748:3:76",
                      "valueSize": 1
                    }
                  ],
                  "id": 23918,
                  "nodeType": "InlineAssembly",
                  "src": "1664:105:76"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 23925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 23920,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23911,
                          "src": "1795:9:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 23923,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1816:1:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 23922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1808:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 23921,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1808:7:76",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1808:10:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1795:23:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a20435245415445206661696c6564",
                        "id": 23926,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1820:25:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8cfba6ed78807628b270dde5bcd8cbfca4a14a698a8ee8cad29a9a244bc492e",
                          "typeString": "literal_string \"Clonable: CREATE failed\""
                        },
                        "value": "Clonable: CREATE failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8cfba6ed78807628b270dde5bcd8cbfca4a14a698a8ee8cad29a9a244bc492e",
                          "typeString": "literal_string \"Clonable: CREATE failed\""
                        }
                      ],
                      "id": 23919,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1787:7:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1787:59:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23928,
                  "nodeType": "ExpressionStatement",
                  "src": "1787:59:76"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 23930,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1869:3:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 23931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1873:6:76",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1869:10:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 23932,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23907,
                          "src": "1881:4:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 23933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1881:6:76",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 23934,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23911,
                        "src": "1889:9:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 23929,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23852,
                      "src": "1862:6:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 23935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1862:37:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23936,
                  "nodeType": "EmitStatement",
                  "src": "1857:42:76"
                }
              ]
            },
            "documentation": {
              "id": 23908,
              "nodeType": "StructuredDocumentation",
              "src": "1080:440:76",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract\n behaviour while using its own EVM storage.\n @dev This function should always provide a new address, no matter how many times \n @dev is actually called from the same `msg.sender`.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 23938,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_clone",
            "nameLocation": "1535:6:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1541:2:76"
            },
            "returnParameters": {
              "id": 23912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23911,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "1588:9:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 23938,
                  "src": "1580:17:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23910,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1580:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1579:19:76"
            },
            "scope": 24003,
            "src": "1526:381:76",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 23955,
              "nodeType": "Block",
              "src": "2067:193:76",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3d602d80600a3d3981f3363d3d373d3d3d363d73",
                        "id": 23946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2116:45:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 23949,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23907,
                              "src": "2184:4:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 23950,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2184:6:76",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 23948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2176:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": {
                            "id": 23947,
                            "name": "bytes20",
                            "nodeType": "ElementaryTypeName",
                            "src": "2176:7:76",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 23951,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2176:15:76",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "hexValue": "5af43d82803e903d91602b57fd5bf3",
                        "id": 23952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2206:35:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      ],
                      "expression": {
                        "id": 23944,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "2085:3:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 23945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "2089:12:76",
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "2085:16:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 23953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2085:167:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 23943,
                  "id": 23954,
                  "nodeType": "Return",
                  "src": "2078:174:76"
                }
              ]
            },
            "documentation": {
              "id": 23939,
              "nodeType": "StructuredDocumentation",
              "src": "1915:52:76",
              "text": "@notice Returns minimal proxy's deploy bytecode."
            },
            "id": 23956,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecode",
            "nameLocation": "1982:14:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23940,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1996:2:76"
            },
            "returnParameters": {
              "id": 23943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23942,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 23956,
                  "src": "2048:12:76",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 23941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2048:5:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2047:14:76"
            },
            "scope": 24003,
            "src": "1973:287:76",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 23968,
              "nodeType": "Block",
              "src": "2442:571:76",
              "statements": [
                {
                  "assignments": [
                    23963
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23963,
                      "mutability": "mutable",
                      "name": "_base",
                      "nameLocation": "2461:5:76",
                      "nodeType": "VariableDeclaration",
                      "scope": 23968,
                      "src": "2453:13:76",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 23962,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2453:7:76",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 23966,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23964,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23907,
                      "src": "2469:4:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 23965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2469:6:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2453:22:76"
                },
                {
                  "AST": {
                    "nativeSrc": "2495:511:76",
                    "nodeType": "YulBlock",
                    "src": "2495:511:76",
                    "statements": [
                      {
                        "nativeSrc": "2543:18:76",
                        "nodeType": "YulAssignment",
                        "src": "2543:18:76",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2556:4:76",
                              "nodeType": "YulLiteral",
                              "src": "2556:4:76",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "2550:5:76",
                            "nodeType": "YulIdentifier",
                            "src": "2550:5:76"
                          },
                          "nativeSrc": "2550:11:76",
                          "nodeType": "YulFunctionCall",
                          "src": "2550:11:76"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nativeSrc": "2543:3:76",
                            "nodeType": "YulIdentifier",
                            "src": "2543:3:76"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "2641:3:76",
                              "nodeType": "YulIdentifier",
                              "src": "2641:3:76"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2646:66:76",
                              "nodeType": "YulLiteral",
                              "src": "2646:66:76",
                              "type": "",
                              "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "2634:6:76",
                            "nodeType": "YulIdentifier",
                            "src": "2634:6:76"
                          },
                          "nativeSrc": "2634:79:76",
                          "nodeType": "YulFunctionCall",
                          "src": "2634:79:76"
                        },
                        "nativeSrc": "2634:79:76",
                        "nodeType": "YulExpressionStatement",
                        "src": "2634:79:76"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "2805:3:76",
                                  "nodeType": "YulIdentifier",
                                  "src": "2805:3:76"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "2810:4:76",
                                  "nodeType": "YulLiteral",
                                  "src": "2810:4:76",
                                  "type": "",
                                  "value": "0x14"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "2801:3:76",
                                "nodeType": "YulIdentifier",
                                "src": "2801:3:76"
                              },
                              "nativeSrc": "2801:14:76",
                              "nodeType": "YulFunctionCall",
                              "src": "2801:14:76"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "2821:4:76",
                                  "nodeType": "YulLiteral",
                                  "src": "2821:4:76",
                                  "type": "",
                                  "value": "0x60"
                                },
                                {
                                  "name": "_base",
                                  "nativeSrc": "2827:5:76",
                                  "nodeType": "YulIdentifier",
                                  "src": "2827:5:76"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nativeSrc": "2817:3:76",
                                "nodeType": "YulIdentifier",
                                "src": "2817:3:76"
                              },
                              "nativeSrc": "2817:16:76",
                              "nodeType": "YulFunctionCall",
                              "src": "2817:16:76"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "2794:6:76",
                            "nodeType": "YulIdentifier",
                            "src": "2794:6:76"
                          },
                          "nativeSrc": "2794:40:76",
                          "nodeType": "YulFunctionCall",
                          "src": "2794:40:76"
                        },
                        "nativeSrc": "2794:40:76",
                        "nodeType": "YulExpressionStatement",
                        "src": "2794:40:76"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "2916:3:76",
                                  "nodeType": "YulIdentifier",
                                  "src": "2916:3:76"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "2921:4:76",
                                  "nodeType": "YulLiteral",
                                  "src": "2921:4:76",
                                  "type": "",
                                  "value": "0x28"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "2912:3:76",
                                "nodeType": "YulIdentifier",
                                "src": "2912:3:76"
                              },
                              "nativeSrc": "2912:14:76",
                              "nodeType": "YulFunctionCall",
                              "src": "2912:14:76"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2928:66:76",
                              "nodeType": "YulLiteral",
                              "src": "2928:66:76",
                              "type": "",
                              "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "2905:6:76",
                            "nodeType": "YulIdentifier",
                            "src": "2905:6:76"
                          },
                          "nativeSrc": "2905:90:76",
                          "nodeType": "YulFunctionCall",
                          "src": "2905:90:76"
                        },
                        "nativeSrc": "2905:90:76",
                        "nodeType": "YulExpressionStatement",
                        "src": "2905:90:76"
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 23963,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2827:5:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23960,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2543:3:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23960,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2641:3:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23960,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2805:3:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23960,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2916:3:76",
                      "valueSize": 1
                    }
                  ],
                  "id": 23967,
                  "nodeType": "InlineAssembly",
                  "src": "2486:520:76"
                }
              ]
            },
            "documentation": {
              "id": 23957,
              "nodeType": "StructuredDocumentation",
              "src": "2268:67:76",
              "text": "@notice Returns mem pointer to minimal proxy's deploy bytecode."
            },
            "id": 23969,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecodePtr",
            "nameLocation": "2350:17:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23958,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2367:2:76"
            },
            "returnParameters": {
              "id": 23961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23960,
                  "mutability": "mutable",
                  "name": "ptr",
                  "nameLocation": "2432:3:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 23969,
                  "src": "2419:16:76",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 23959,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2419:5:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2418:18:76"
            },
            "scope": 24003,
            "src": "2341:672:76",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24001,
              "nodeType": "Block",
              "src": "3682:305:76",
              "statements": [
                {
                  "assignments": [
                    23978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23978,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "3706:3:76",
                      "nodeType": "VariableDeclaration",
                      "scope": 24001,
                      "src": "3693:16:76",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 23977,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3693:5:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 23981,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 23979,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23969,
                      "src": "3712:17:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 23980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3712:19:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3693:38:76"
                },
                {
                  "AST": {
                    "nativeSrc": "3751:105:76",
                    "nodeType": "YulBlock",
                    "src": "3751:105:76",
                    "statements": [
                      {
                        "nativeSrc": "3804:41:76",
                        "nodeType": "YulAssignment",
                        "src": "3804:41:76",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3825:1:76",
                              "nodeType": "YulLiteral",
                              "src": "3825:1:76",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "3828:3:76",
                              "nodeType": "YulIdentifier",
                              "src": "3828:3:76"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3833:4:76",
                              "nodeType": "YulLiteral",
                              "src": "3833:4:76",
                              "type": "",
                              "value": "0x37"
                            },
                            {
                              "name": "_salt",
                              "nativeSrc": "3839:5:76",
                              "nodeType": "YulIdentifier",
                              "src": "3839:5:76"
                            }
                          ],
                          "functionName": {
                            "name": "create2",
                            "nativeSrc": "3817:7:76",
                            "nodeType": "YulIdentifier",
                            "src": "3817:7:76"
                          },
                          "nativeSrc": "3817:28:76",
                          "nodeType": "YulFunctionCall",
                          "src": "3817:28:76"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "3804:9:76",
                            "nodeType": "YulIdentifier",
                            "src": "3804:9:76"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 23975,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3804:9:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23972,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3839:5:76",
                      "valueSize": 1
                    },
                    {
                      "declaration": 23978,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3828:3:76",
                      "valueSize": 1
                    }
                  ],
                  "id": 23982,
                  "nodeType": "InlineAssembly",
                  "src": "3742:114:76"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 23989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 23984,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23975,
                          "src": "3874:9:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 23987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3895:1:76",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 23986,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3887:7:76",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 23985,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3887:7:76",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 23988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3887:10:76",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3874:23:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c653a2043524541544532206661696c6564",
                        "id": 23990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3899:26:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_62587aaa6633c4a97ccbc8d0b840d369355afe237fccc225f604c3b177c5bfdf",
                          "typeString": "literal_string \"Clonable: CREATE2 failed\""
                        },
                        "value": "Clonable: CREATE2 failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_62587aaa6633c4a97ccbc8d0b840d369355afe237fccc225f604c3b177c5bfdf",
                          "typeString": "literal_string \"Clonable: CREATE2 failed\""
                        }
                      ],
                      "id": 23983,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3866:7:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 23991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3866:60:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23992,
                  "nodeType": "ExpressionStatement",
                  "src": "3866:60:76"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 23994,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "3949:3:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 23995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3953:6:76",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3949:10:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 23996,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23907,
                          "src": "3961:4:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 23997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3961:6:76",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 23998,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23975,
                        "src": "3969:9:76",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 23993,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23852,
                      "src": "3942:6:76",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 23999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3942:37:76",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 24000,
                  "nodeType": "EmitStatement",
                  "src": "3937:42:76"
                }
              ]
            },
            "documentation": {
              "id": 23970,
              "nodeType": "StructuredDocumentation",
              "src": "3021:543:76",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract \n behaviour while using its own EVM storage.\n @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\n @dev the clone. Using the same `_salt` multiple times will revert, since\n @dev no contract can be deployed more than once at the same address.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 24002,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneDeterministic",
            "nameLocation": "3579:19:76",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 23973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23972,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "3607:5:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 24002,
                  "src": "3599:13:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 23971,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3599:7:76",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3598:15:76"
            },
            "returnParameters": {
              "id": 23976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23975,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "3666:9:76",
                  "nodeType": "VariableDeclaration",
                  "scope": 24002,
                  "src": "3658:17:76",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 23974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3658:7:76",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3657:19:76"
            },
            "scope": 24003,
            "src": "3570:417:76",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 24004,
        "src": "103:3887:76",
        "usedErrors": [
          16,
          19
        ],
        "usedEvents": [
          24,
          23852
        ]
      }
    ],
    "src": "35:3955:76"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.709Z",
  "devdoc": {
    "errors": {
      "InvalidInitialization()": [
        {
          "details": "The contract is already initialized."
        }
      ],
      "NotInitializing()": [
        {
          "details": "The contract is not initializing."
        }
      ]
    },
    "events": {
      "Initialized(uint64)": {
        "details": "Triggered when the contract has been initialized or reinitialized."
      }
    },
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "cloned()": {
        "notice": "Tells whether this contract is a clone of `self()`"
      },
      "initialized()": {
        "notice": "Tells whether this instance has been initialized."
      },
      "self()": {
        "notice": "Contract address to which clones will be re-directed."
      }
    },
    "version": 1
  }
}