code: def authenticated_developers_only(self, redirect=True):
      def wrap(fun: AuthenticatedAIOHTTPHandler):
          @self.authenticated_users_only(redirect)
          @wraps(fun)
          async def wrapped(
              request: web.Request, userdata: UserData, *args, **kwargs
          ):
              if userdata["is_developer"] == 1:
                  return await fun(request, userdata, *args, **kwargs)
              raise web.HTTPUnauthorized()
  
          return wrapped
  
      return wrap
  
imports: import abc
  import asyncio
  import logging
  import urllib.parse
  from functools import wraps
  from typing import Awaitable, Callable, Optional, Tuple, TypedDict
  import aiohttp
  import aiohttp_session
  from aiohttp import web
  from hailtop import httpx
  from hailtop.config import get_deploy_config
  from hailtop.utils import retry_transient_errors
  from .time_limited_max_size_cache import TimeLimitedMaxSizeCache
label_desc: Use image node_id 3 for calling the Authenticator obj's underlying member method code with example usage: obj.authenticated_developers_only(redirect) and returns: wrap, wrapped, unknown