def realm_user_summary_table(all_records: List[QuerySet], admin_emails: Set[str]) -> Tuple[(Dict[(str, Dict[(str, Any)])], str)]:
    user_records = {}

    def by_email(record: QuerySet) -> str:
        return record.user_profile.delivery_email
    for (email, records) in itertools.groupby(all_records, by_email):
        user_records[email] = get_user_activity_summary(list(records))

    def get_last_visit(user_summary: Dict[(str, Dict[(str, datetime)])], k: str) -> Optional[datetime]:
        if (k in user_summary):
            return user_summary[k]['last_visit']
        else:
            return None

    def get_count(user_summary: Dict[(str, Dict[(str, str)])], k: str) -> str:
        if (k in user_summary):
            return user_summary[k]['count']
        else:
            return ''

    def is_recent(val: Optional[datetime]) -> bool:
        age = (timezone_now() - val)
        return (age.total_seconds() < (5 * 60))
    rows = []
    for (email, user_summary) in user_records.items():
        email_link = user_activity_link(email)
        sent_count = get_count(user_summary, 'send')
        cells = [user_summary['name'], email_link, sent_count]
        row_class = ''
        for field in ['use', 'send', 'pointer', 'desktop', 'ZulipiOS', 'Android']:
            visit = get_last_visit(user_summary, field)
            if (field == 'use'):
                if (visit and is_recent(visit)):
                    row_class += ' recently_active'
                if (email in admin_emails):
                    row_class += ' admin'
            val = format_date_for_activity_reports(visit)
            cells.append(val)
        row = dict(cells=cells, row_class=row_class)
        rows.append(row)

    def by_used_time(row: Dict[(str, Any)]) -> str:
        return row['cells'][3]
    rows = sorted(rows, key=by_used_time, reverse=True)
    cols = ['Name', 'Email', 'Total sent', 'Heard from', 'Message sent', 'Pointer motion', 'Desktop', 'ZulipiOS', 'Android']
    title = 'Summary'
    content = make_table(title, cols, rows, has_row_class=True)
    return (user_records, content)
def realm_user_summary_table(all_records: List[QuerySet], admin_emails: Set[str]) -> Tuple[(Dict[(str, Dict[(str, Any)])], str)]:
    user_records = {}

    def by_email(record: QuerySet) -> str:
        return record.user_profile.delivery_email
    for (email, records) in itertools.groupby(all_records, by_email):
        user_records[email] = get_user_activity_summary(list(records))

    def get_last_visit(user_summary: Dict[(str, Dict[(str, datetime)])], k: str) -> Optional[datetime]:
        if (k in user_summary):
            return user_summary[k]['last_visit']
        else:
            return None

    def get_count(user_summary: Dict[(str, Dict[(str, str)])], k: str) -> str:
        if (k in user_summary):
            return user_summary[k]['count']
        else:
            return 

    def is_recent(val: Optional[datetime]) -> bool:
        age = (timezone_now() - val)
        return (age.total_seconds() < (5 * 60))
    rows = []
    for (email, user_summary) in user_records.items():
        email_link = user_activity_link(email)
        sent_count = get_count(user_summary, 'send')
        cells = [user_summary['name'], email_link, sent_count]
        row_class = 
        for field in ['use', 'send', 'pointer', 'desktop', 'ZulipiOS', 'Android']:
            visit = get_last_visit(user_summary, field)
            if (field == 'use'):
                if (visit and is_recent(visit)):
                    row_class += ' recently_active'
                if (email in admin_emails):
                    row_class += ' admin'
            val = format_date_for_activity_reports(visit)
            cells.append(val)
        row = dict(cells=cells, row_class=row_class)
        rows.append(row)

    def by_used_time(row: Dict[(str, Any)]) -> str:
        return row['cells'][3]
    rows = sorted(rows, key=by_used_time, reverse=True)
    cols = ['Name', 'Email', 'Total sent', 'Heard from', 'Message sent', 'Pointer motion', 'Desktop', 'ZulipiOS', 'Android']
    title = 'Summary'
    content = make_table(title, cols, rows, has_row_class=True)
    return (user_records, content)