[
  {
    "type": "constructor",
    "inputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchRegisterOrgContracts",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "registrations",
        "type": "tuple[]",
        "internalType": "struct OrgRegistry.ContractRegistration[]",
        "components": [
          {
            "name": "typeId",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "proxy",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "beacon",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "owner",
            "type": "address",
            "internalType": "address"
          }
        ]
      },
      {
        "name": "autoUpgrade",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "lastRegister",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "contractOf",
    "inputs": [
      {
        "name": "contractId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "proxy",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "beacon",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "autoUpgrade",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "owner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "createOrgBootstrap",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "name",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "metadataHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "getContractBeacon",
    "inputs": [
      {
        "name": "contractId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "beacon",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getHats",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOrgContract",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "typeId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "proxy",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOrgIds",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes32[]",
        "internalType": "bytes32[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOrgMetadataAdminHat",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRoleHat",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "roleIndex",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getTopHat",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "initialize",
    "inputs": [
      {
        "name": "initialOwner",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "_hats",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "isAutoUpgrade",
    "inputs": [
      {
        "name": "contractId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "orgCount",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "orgIds",
    "inputs": [
      {
        "name": "index",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "orgOf",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "executor",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "contractCount",
        "type": "uint32",
        "internalType": "uint32"
      },
      {
        "name": "bootstrap",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "exists",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "proxyOf",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "typeId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "registerHatsTree",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "topHatId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "roleHatIds",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "registerOrg",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "executorAddr",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "name",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "metadataHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "registerOrgContract",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "typeId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "proxy",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "beacon",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "autoUp",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "moduleOwner",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "lastRegister",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "renounceOwnership",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setHats",
    "inputs": [
      {
        "name": "newHats",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setOrgExecutor",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "executorAddr",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setOrgMetadataAdminHat",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "hatId",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "totalContracts",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "transferOwnership",
    "inputs": [
      {
        "name": "newOwner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "updateOrgMeta",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "newName",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "newMetadataHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "updateOrgMetaAsAdmin",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "newName",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "newMetadataHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "event",
    "name": "ContractRegistered",
    "inputs": [
      {
        "name": "contractId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "orgId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "typeId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "proxy",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "beacon",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "autoUpgrade",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      },
      {
        "name": "owner",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "HatsSet",
    "inputs": [
      {
        "name": "hats",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "HatsTreeRegistered",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "topHatId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "roleHatIds",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Initialized",
    "inputs": [
      {
        "name": "version",
        "type": "uint64",
        "indexed": false,
        "internalType": "uint64"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MetaUpdated",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "newName",
        "type": "bytes",
        "indexed": false,
        "internalType": "bytes"
      },
      {
        "name": "newMetadataHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OrgMetadataAdminHatSet",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "hatId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OrgRegistered",
    "inputs": [
      {
        "name": "orgId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "executor",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "name",
        "type": "bytes",
        "indexed": false,
        "internalType": "bytes"
      },
      {
        "name": "metadataHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferred",
    "inputs": [
      {
        "name": "previousOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "AutoUpgradeRequired",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ContractUnknown",
    "inputs": []
  },
  {
    "type": "error",
    "name": "EmptyTitle",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidInitialization",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidParam",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotInitializing",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotOrgExecutor",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotOrgMetadataAdmin",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotRegistryAdmin",
    "inputs": []
  },
  {
    "type": "error",
    "name": "OrgExists",
    "inputs": []
  },
  {
    "type": "error",
    "name": "OrgUnknown",
    "inputs": []
  },
  {
    "type": "error",
    "name": "OwnableInvalidOwner",
    "inputs": [
      {
        "name": "owner",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "OwnableUnauthorizedAccount",
    "inputs": [
      {
        "name": "account",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "OwnerOnlyDuringBootstrap",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TitleTooLong",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TypeTaken",
    "inputs": []
  },
  {
    "type": "error",
    "name": "CapBelowCommitted",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidPayout",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidString",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ZeroAddress",
    "inputs": []
  }
]
