code: def find_class(self, module, name):
      if cfg.safety.serdes.federation.restricted_type == "unrestricted":
          return super().find_class(module, name)
      for m in self.__BUILDIN_MODULES:
          if module.startswith(m):
              return super().find_class(module, name)
      if module in self.__ALLOW_MODULES:
          return super().find_class(module, name)
      elif (
          module in self.__ALLOW_CLASSES
          and name in self.__ALLOW_CLASSES[module]
      ):
          return super().find_class(module, name)
      else:
          if (
              cfg.safety.serdes.federation.restricted_type
              == "restricted_catch_miss"
          ):
              self.__ALLOW_CLASSES.setdefault(module, set()).add(name)
              path_to_write = f"{cfg.safety.serdes.federation.restricted_catch_miss_path}_{self._federation.local_party[0]}_{self._federation.local_party[1]}"
              with open(path_to_write, "a") as f:
                  f.write(f"{module}.{name}\n")
              return super().find_class(module, name)
          elif (
              cfg.safety.serdes.federation.restricted_type
              == "restricted"
          ):
              raise ValueError(
                  f"Deserialization is restricted for class `{module}`.`{name}`, allowlist: {self.__ALLOW_CLASSES}"
              )
          else:
              raise ValueError(
                  f"invalid restricted_type: {cfg.safety.serdes.federation.restricted_type}"
              )
  
imports: import io
  import logging
  import pickle
  import struct
  import typing
  from typing import Any, List, Tuple, TypeVar
  from fate.arch.config import cfg
  from ._table_meta import TableMeta
  from ._type import PartyMeta
label_desc: Use image node_id 3 for calling the TableRemotePersistentUnpickler obj's underlying member method code with example usage: obj.find_class(module, name) and returns: super, super, super, super, super