code: def start(self, host, port, ssl_keyfile, ssl_certfile):
      import grpc  # temporary workaround for M1 build
  
      if ssl_keyfile and ssl_certfile:
          with open(ssl_keyfile, "rb") as f:
              private_key = f.read()
          with open(ssl_certfile, "rb") as f:
              certificate_chain = f.read()
          server_credentials = grpc.ssl_server_credentials(
              [
                  (
                      private_key,
                      certificate_chain,
                  )
              ]
          )
          self._server.add_secure_port(
              f"{host}:{port}", server_credentials
          )
      else:
          self._server.add_insecure_port(f"{host}:{port}")
  
      self._server.start()
  
imports: import os
  import time
  from typing import Optional
  from concurrent import futures
  from aim.ext.cleanup import AutoClean
  from aim.ext.transport.config import AIM_RT_MAX_MESSAGE_SIZE, AIM_RT_DEFAULT_MAX_MESSAGE_SIZE
  from aim.ext.transport.handlers import get_tree, get_structured_run, get_repo, get_lock, get_run_heartbeat, get_file_manager
  from aim.ext.transport.heartbeat import RPCHeartbeatWatcher
  from aim.ext.transport.worker import RemoteWorker, LocalWorker
  from aim.ext.transport.health import HealthServicer, health_pb2_grpc
  from aim.ext.transport.router import RemoteRouterServicer, router_pb2_grpc
  from aim.ext.transport.remote_tracking import RemoteTrackingServicer, tracking_pb2_grpc, ResourceTypeRegistry
label_desc: Use image node_id 2 for calling the RPCServer obj's underlying member method code with example usage: obj.start(host, port, ssl_keyfile, ssl_certfile) without return types