Apache Mod Autoindex

Customizing Apache Directory Listings with Mod Autoindex

Apache Mod Autoindex serves as a critical utility for the automated generation of directory listings in environments where a static index file is absent. In the context of large scale infrastructure, such as cloud storage arrays or regional energy monitoring repositories, this module provides the logic required to present raw data structures as navigable web interfaces. The role of mod_autoindex within a professional stack is to bridge the gap between low-level filesystem storage and the presentation layer; ensuring that telemetry logs, firmware updates, and diagnostic payloads are accessible to authorized personnel without the overhead of a dedicated content management system. This manual addresses the requirement for an organized, secure, and high-performance file-access protocol. The problem addressed is the default, unformatted, and potentially insecure listing of server contents. The solution provided herein involves the implementation of a customized indexing logic that optimizes metadata delivery while maintaining high throughput and low latency for the end-user.

Technical Specifications

| Requirement | Specification |
|:—|:—|
| Software Version | Apache HTTP Server 2.4.x or higher |
| Default Port | 80 (HTTP), 443 (HTTPS) |
| Operating Range | Unix/Linux (POSIX) or Windows Server |
| Protocol/Standard | HTTP/1.1 or HTTP/2; RFC 2616 |
| Impact Level | 4 (Information Disclosure/Operational Visibility) |
| CPU Resource | < 1% at 100 concurrent requests | | RAM Resource | ~2 MB per worker process overhead | | Material Grade | Enterprise Cloud/Hybrid-Cloud Ready |

THE CONFIGURATION PROTOCOL

Environment Prerequisites:

The deployment of a customized directory listing requires a functional Apache installation with the mod_autoindex and mod_alias modules enabled. The system must adhere to standard security protocols; ensuring the www-data or apache user has read-only access to the targeted directories. Version 2.4+ of the Apache HTTP Server is mandatory to support sophisticated directory directives and efficient memory management. Administrative access via sudo or a root-equivalent shell is required for modifying configuration files located in /etc/apache/sites-available/ or /etc/httpd/conf.d/.

Section A: Implementation Logic:

The theoretical design of a directory index is based on the principle of encapsulation: raw inodes and file metadata are wrapped in an HTML response generated on-the-fly by the server. This process must be idempotent; ensuring that every request for the directory produces a consistent view of the current filesystem state without modifying the underlying data. From a performance perspective, the generation of this index introduces a small amount of overhead as the server must walk the directory tree and perform stat calls on each file. To mitigate latency, the engineering approach focuses on limiting the amount of metadata processed by the kernel and caching icon assets. Security logic dictates that directory listings be disabled by default (the “Principle of Least Privilege”) and only enabled for specific, audited paths where file visibility is an operational requirement.

Step-By-Step Execution

1. Verification of Module Status

Execute the command sudo a2enmod autoindex to ensure the module is active. System Note: This command creates a symbolic link between the module library in /etc/apache2/mods-available/ and the active configuration in /etc/apache2/mods-enabled/, allowing the Apache kernel to load the mod_autoindex.so binary into the address space upon service restart.

2. Implementation of Directory Directives

Open the site configuration file at /etc/apache2/sites-available/000-default.conf and locate the block for your data repository. System Note: Modifying this block changes how the Apache worker process interacts with the VFS (Virtual File System) for that specific mount point: adjusting the permissions for directory crawling.

3. Enabling Indexing via Options

Add the line Options +Indexes +FollowSymLinks within the directory block. System Note: The +Indexes flag triggers the mod_autoindex handler when no file matching the DirectoryIndex directive (e.g., index.html) is found. +FollowSymLinks allows the indexer to traverse partitions, which is vital for distributed network storage.

4. Configuring FancyIndexing Logic

Insert the directive IndexOptions FancyIndexing HTMLTable ScanHTMLTitles VersionSort into the configuration. System Note: This instruction changes the internal parsing mode. HTMLTable forces the module to output the file list in a structured table, which improves the throughput of visual data for the client; while VersionSort applies a natural sort algorithm to numeric increments in filenames, which is essential for managing firmware versions.

5. Defining Column Widths and Metadata

Append IndexOptions NameWidth= DescriptionWidth= SuppressHTMLPreamble to the configuration block. System Note: Setting the width to an asterisk allows the server to dynamically adjust column sizes based on the longest filename in the directory, preventing truncated strings and maintaining data integrity in the UI.

6. Mapping Icons to File MIME Types

Utilize the AddIcon directive to associate visual markers with specific file types: AddIcon /icons/compressed.gif .zip .gz .tar. System Note: Associating icons facilitates faster cognitive processing of file types for human operators. These icons are typically cached in the browser, reducing overall network packet-loss by minimizing repetitive asset requests.

7. Global Exclusion of Sensitive Files

Implement the IndexIgnore directive: IndexIgnore .?? ~ # HEADER README RCS CVS ,v *,t. System Note: This instruction tells the directory walker to skip files matching these patterns. It prevents the disclosure of hidden configuration files (like .env) and temporary swap files created by text editors, significantly hardening the security posture of the node.

8. Customizing the Header and Footer Files

Add HeaderName /include/HEADER.html and ReadmeName /include/FOOTER.html to the directory block. System Note: This causes the server to inject custom HTML content before and after the generated file list. By providing context or legal notices via these files, you ensure that the directory listing complies with organizational data-access policies.

9. Syntax Verification

Execute the command sudo apachectl configtest. System Note: This command performs a dry run of the configuration parsing logic. It identifies any syntax errors or library conflicts before the changes are committed to the live service, preventing downtime in the production environment.

10. Service Reload

Apply the changes using sudo systemctl reload apache2. System Note: A reload is preferred over a restart because it sends a SIGHUP signal to the master process. This allows child workers to finish serving current requests before inheriting the new configuration, ensuring zero-latency transitions for active sessions.

Section B: Dependency Fault-Lines:

A frequent bottleneck in directory indexing is the interaction with large SAN (Storage Area Network) arrays. If the underlying disk has high latency, the ScanHTMLTitles option can cause the Apache process to hang while waiting for I/O, as it must open and read the beginning of every HTML file to find the </strong> tag. Furthermore, if <strong>AllowOverride</strong> is set to <strong>None</strong> in the master config, any directives placed in a local <strong>.htaccess</strong> file will be ignored. This conflict often leads to “403 Forbidden” errors or default “Plain” indexing despite configuration efforts. Ensure that the <strong>mod_alias</strong> module is loaded; otherwise, the icon paths defined in <strong>AddIcon</strong> will fail to resolve, resulting in broken image icons and increased log noise.</p> <p><h3>THE TROUBLESHOOTING MATRIX</h3> </p> <p><h3>Section C: Logs & Debugging:</h3> <p>When directory listings fail to render, the first point of audit is the error log, typically located at <strong>/var/log/apache2/error.log</strong> or <strong>/var/log/httpd/error_log</strong>. Specific error strings provide immediate insight into the failure mechanism. For instance, “Directory index forbidden by Options directive” indicates that the <strong>+Indexes</strong> flag is missing or restricted by a higher-level configuration. If the log shows “client denied by server configuration” for the icon directory, verify that the alias for <strong>/icons/</strong> has a corresponding <strong><Directory></strong> block with <strong>Require all granted</strong>. </p> <p>To debug performance issues, use the <strong>time curl -I http://localhost/data/</strong> command to measure the Time To First Byte (TTFB). If latency is high, disable <strong>FancyIndexing</strong> and <strong>ScanHTMLTitles</strong> to see if the processing time decreases. For signal-attenuation issues in remote network environments, monitor the <strong>packet-loss</strong> during the transfer of large directory listings using tools like <strong>mtr</strong>. If the payload is too large, consider utilizing the <strong>IgnoreClient</strong> option to simplify the output.</p> <p><h3>OPTIMIZATION & HARDENING</h3> </p> <p>– <strong>Performance Tuning:</strong> To maximize throughput, enable <strong>mod_deflate</strong> to compress the HTML output of the directory listing. This significantly reduces the payload size for large directories. Set <strong>IndexOptions TrackModified</strong> to include the “Last-Modified” header in the listing, which allows browsers to utilize local caching more effectively. If the server experiences high concurrency, ensure that the <strong>MaxRequestWorkers</strong> in the MPM (Multi-Processing Module) config is tuned to handle the spikes in directory-walking processes without hitting thermal-inertia limits on the CPU.</p> <p>– <strong>Security Hardening:</strong> Always use <strong>IndexIgnore</strong> to hide system-critical files. For high-security environments, wrap the directory block in a <strong><Limit></strong> or <strong><RequireAll></strong> block to restrict access to specific IP ranges or authenticated users (via <strong>mod_authz_core</strong>). Never allow directory indexing in the root directory (<strong>/var/www/</strong> or <strong>/</strong>) as this exposes the entire server structure to discovery. Ensure that the <strong>ServerSignature</strong> is set to <strong>Off</strong> to prevent the exposure of Apache version numbers and OS details in the footer of the directory listing.</p> <p>– <strong>Scaling Logic:</strong> As your file repository grows to include millions of files, <strong>mod_autoindex</strong> may become a performance liability. In such cases, transition to a hybrid approach: use a cron job to generate static <strong>index.html</strong> files for deeply nested, high-traffic directories. This moves the overhead from request-time to a scheduled task, ensuring that throughput remains constant even during peak load. For distributed infrastructures, synchronize the directory configuration across all nodes in the cluster to maintain an idempotent user experience regardless of which physical asset handles the request.</p> <p><h3>THE ADMIN DESK</h3> </p> <p><strong>How do I hide specific file extensions from the listing?</strong><br /> Use the <strong>IndexIgnore</strong> directive followed by the patterns you wish to hide. For example, <strong>IndexIgnore <em>.php </em>.sh *.config</strong> will prevent these files from appearing in the generated list, securing your scripts and sensitive system configuration files from public view.</p> <p><strong>Why are my icons not appearing next to the files?</strong><br /> This is usually caused by a missing <strong>Alias</strong> for the icons directory. Ensure that <strong>Alias /icons/ “/usr/share/apache2/icons/”</strong> is defined and that the corresponding directory has <strong>Require all granted</strong> permissions to allow the server to serve the images.</p> <p><strong>Can I change the default sorting of the files?</strong><br /> Yes; use <strong>IndexOrderDefault Descending Name</strong> to sort files by name in reverse alphabetical order. You can also sort by <strong>Date</strong>, <strong>Size</strong>, or <strong>Description</strong>. This is useful for placing the newest logs at the top of the interface.</p> <p><strong>How do I make the directory listing look more modern?</strong><br /> Inject a custom CSS file using the <strong>IndexStyleSheet “/css/custom-style.css”</strong> directive. This allows you to style the table, fonts, and colors of the output to match your organization’s internal branding or to improve readability on mobile devices.</p> <p><strong>What is the “VersionSort” option used for?</strong><br /> <strong>VersionSort</strong> is specifically designed for filenames containing version numbers like <strong>patch-1.2.1.tar.gz</strong>. Without it, the server might sort <strong>patch-1.10</strong> before <strong>patch-1.2</strong>. This directive ensures that numbers within strings are compared numerically rather than lexicographically.</p> </div><!-- .entry-content .clear --> </div> </article><!-- #post-## --> <nav class="navigation post-navigation" aria-label="Posts"> <div class="nav-links"><div class="nav-previous"><a title="How to Create Functional Directory Listings Using Nginx Autoindex" href="https://adminmanuals.com/how-to-create-functional-directory-listings-using-nginx-autoindex/" rel="prev"><span class="ast-left-arrow" aria-hidden="true">←</span> Previous Post</a></div><div class="nav-next"><a title="Managing Symbolic Links Safely in an Nginx Environment" href="https://adminmanuals.com/managing-symbolic-links-safely-in-an-nginx-environment/" rel="next">Next Post <span class="ast-right-arrow" aria-hidden="true">→</span></a></div></div> </nav><div class="ast-single-related-posts-container ast-container--fallback"><div class="ast-related-posts-title-section"> <h2 class="ast-related-posts-title"> Must Read </h2> </div><div class="ast-related-posts-wrapper"> <article class="ast-related-post post-2064 post type-post status-publish format-standard has-post-thumbnail hentry category-categories"> <div class="ast-related-posts-inner-section"> <div class="ast-related-post-content"> <div class="ast-related-post-featured-section post-has-thumb"><div class="post-thumb-img-content post-thumb"><a aria-label="Read more about The Complete Guide to Setting Up and Deploying Ubuntu 24.04 LTS" href="https://adminmanuals.com/the-complete-guide-to-setting-up-and-deploying-ubuntu-24-04-lts-2/"><img width="1024" height="768" src="https://adminmanuals.com/wp-content/uploads/2026/04/Ubuntu-24.04-LTS-Setup.jpg" class="attachment-large size-large wp-post-image" alt="Ubuntu 24.04 LTS Setup" itemprop="" decoding="async" srcset="https://adminmanuals.com/wp-content/uploads/2026/04/Ubuntu-24.04-LTS-Setup.jpg 1024w, https://adminmanuals.com/wp-content/uploads/2026/04/Ubuntu-24.04-LTS-Setup-300x225.jpg 300w, https://adminmanuals.com/wp-content/uploads/2026/04/Ubuntu-24.04-LTS-Setup-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a> </div></div> <header class="entry-header related-entry-header"> <h3 class="ast-related-post-title entry-title"> <a href="https://adminmanuals.com/the-complete-guide-to-setting-up-and-deploying-ubuntu-24-04-lts-2/" target="_self" rel="bookmark noopener noreferrer">The Complete Guide to Setting Up and Deploying Ubuntu 24.04 LTS</a> </h3> <div class="entry-meta ast-related-cat-style--none ast-related-tag-style--none"><span class="ast-taxonomy-container cat-links default"><a href="https://adminmanuals.com/category/categories/" rel="category tag">Categories</a></span></div> </header> <div class="entry-content clear"> </div> </div> </div> </article> <article class="ast-related-post post-2066 post type-post status-publish format-standard has-post-thumbnail hentry category-categories"> <div class="ast-related-posts-inner-section"> <div class="ast-related-post-content"> <div class="ast-related-post-featured-section post-has-thumb"><div class="post-thumb-img-content post-thumb"><a aria-label="Read more about How to Install and Optimize Debian 12 Bookworm for Servers" href="https://adminmanuals.com/how-to-install-and-optimize-debian-12-bookworm-for-servers/"><img width="1024" height="768" src="https://adminmanuals.com/wp-content/uploads/2026/04/Debian-12-Bookworm.jpg" class="attachment-large size-large wp-post-image" alt="Debian 12 Bookworm" itemprop="" decoding="async" srcset="https://adminmanuals.com/wp-content/uploads/2026/04/Debian-12-Bookworm.jpg 1024w, https://adminmanuals.com/wp-content/uploads/2026/04/Debian-12-Bookworm-300x225.jpg 300w, https://adminmanuals.com/wp-content/uploads/2026/04/Debian-12-Bookworm-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></a> </div></div> <header class="entry-header related-entry-header"> <h3 class="ast-related-post-title entry-title"> <a href="https://adminmanuals.com/how-to-install-and-optimize-debian-12-bookworm-for-servers/" target="_self" rel="bookmark noopener noreferrer">How to Install and Optimize Debian 12 Bookworm for Servers</a> </h3> <div class="entry-meta ast-related-cat-style--none ast-related-tag-style--none"><span class="ast-taxonomy-container cat-links default"><a href="https://adminmanuals.com/category/categories/" rel="category tag">Categories</a></span></div> </header> <div class="entry-content clear"> </div> </div> </div> </article> </div> </div> <div id="comments" class="comments-area comment-form-position-below "> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Comment <small><a rel="nofollow" id="cancel-comment-reply-link" href="/customizing-apache-directory-listings-with-mod-autoindex/#respond" style="display:none;">Cancel Reply</a></small></h3><form action="https://adminmanuals.com/wp-comments-post.php" method="post" id="ast-commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><div class="ast-row comment-textarea"><fieldset class="comment-form-comment"><legend class ="comment-form-legend"></legend><div class="comment-form-textarea ast-grid-common-col"><label for="comment" class="screen-reader-text">Type here..</label><textarea id="comment" name="comment" placeholder="Type here.." cols="45" rows="8" aria-required="true"></textarea></div></fieldset></div><div class="ast-comment-formwrap ast-row"> <p class="comment-form-author ast-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"> <label for="author" class="screen-reader-text">Name*</label> <input id="author" name="author" type="text" value="" placeholder="Name*" size="30" aria-required='true' autocomplete="name" /> </p> <p class="comment-form-email ast-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"> <label for="email" class="screen-reader-text">Email*</label> <input id="email" name="email" type="text" value="" placeholder="Email*" size="30" aria-required='true' autocomplete="email" /> </p> <p class="comment-form-url ast-grid-common-col ast-width-lg-33 ast-width-md-4 ast-float"> <label for="url" class="screen-reader-text">Website</label> <input id="url" name="url" type="text" value="" placeholder="Website" size="30" autocomplete="url" /> </p> </div> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment »" /> <input type='hidden' name='comment_post_ID' value='2510' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p></form> </div><!-- #respond --> </div><!-- #comments --> </main><!-- #main --> </div><!-- #primary --> <div class="widget-area secondary" id="secondary" itemtype="https://schema.org/WPSideBar" itemscope="itemscope"> <div class="sidebar-main" > <aside id="search-1" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://adminmanuals.com/"> <label for="search-field"> <span class="screen-reader-text">Search for:</span> <input type="search" id="search-field-sticky" class="search-field" placeholder="Search..." value="" name="s" tabindex="-1"> <button class="search-submit ast-search-submit" aria-label="Search Submit"> <span hidden>Search</span> <i><span class="ast-icon icon-search"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="-893 477 142 142" enable-background="new -888 480 142 142" xml:space="preserve"> <path d="M-787.4,568.7h-6.3l-2.4-2.4c7.9-8.7,12.6-20.5,12.6-33.1c0-28.4-22.9-51.3-51.3-51.3 c-28.4,0-51.3,22.9-51.3,51.3c0,28.4,22.9,51.3,51.3,51.3c12.6,0,24.4-4.7,33.1-12.6l2.4,2.4v6.3l39.4,39.4l11.8-11.8L-787.4,568.7 L-787.4,568.7z M-834.7,568.7c-19.7,0-35.5-15.8-35.5-35.5c0-19.7,15.8-35.5,35.5-35.5c19.7,0,35.5,15.8,35.5,35.5 C-799.3,553-815,568.7-834.7,568.7L-834.7,568.7z" /> </svg></span></i> </button> </label> <input type="submit" class="search-submit" value="Search"> </form> </aside><aside id="categories-1" class="widget widget_categories"><h2 class="widget-title">Categories</h2><nav aria-label="Categories"> <ul> <li class="cat-item cat-item-1"><a href="https://adminmanuals.com/category/categories/">Categories</a> (278) </li> </ul> </nav></aside> </div><!-- .sidebar-main --> </div><!-- #secondary --> </div> <!-- ast-container --> </div><!-- #content --> <footer class="site-footer" id="colophon" itemtype="https://schema.org/WPFooter" itemscope="itemscope" itemid="#colophon"> <div class="site-above-footer-wrap ast-builder-grid-row-container site-footer-focus-item ast-builder-grid-row-2-equal ast-builder-grid-row-tablet-full ast-builder-grid-row-mobile-full ast-footer-row-stack ast-footer-row-tablet-stack ast-footer-row-mobile-stack" data-section="section-above-footer-builder"> <div class="ast-builder-grid-row-container-inner"> <div class="ast-builder-footer-grid-columns site-above-footer-inner-wrap ast-builder-grid-row"> <div class="site-footer-above-section-1 site-footer-section site-footer-section-1"> <div class="footer-widget-area widget-area site-footer-focus-item ast-footer-html-2" data-section="section-fb-html-2"> <div class="ast-header-html inner-link-style-"><div class="ast-builder-html-element"><h2>Sign up for Newsletter</h2> </div></div> </div> </div> <div class="site-footer-above-section-2 site-footer-section site-footer-section-2"> <div class="footer-widget-area widget-area site-footer-focus-item ast-footer-html-1" data-section="section-fb-html-1"> <div class="ast-header-html inner-link-style-"><div class="ast-builder-html-element"> <div class="srfm-form-container srfm-form-container-1895 srfm-bg-color srfm-submit-button-hidden"> <style> /* Need to check and remove the input variables related to the Style Tab. */ .srfm-form-container-1895 { /* New test variables */ --srfm-color-scheme-primary: var(--ast-global-color-0); --srfm-color-scheme-text-on-primary: #FFFFFF; --srfm-color-scheme-text: var(--ast-global-color-2); --srfm-quill-editor-color: var(--ast-global-color-0); --srfm-color-input-label: var(--ast-global-color-2); --srfm-color-input-description: hsl( from var(--ast-global-color-2) h s l / 0.65 ); --srfm-color-input-placeholder: hsl( from var(--ast-global-color-2) h s l / 0.5 ); --srfm-color-input-text: var(--ast-global-color-2); --srfm-color-input-prefix: hsl( from var(--ast-global-color-2) h s l / 0.65 ); --srfm-color-input-background: hsl( from var(--ast-global-color-2) h s l / 0.02 ); --srfm-color-input-background-hover: hsl( from var(--ast-global-color-2) h s l / 0.05 ); --srfm-color-input-background-disabled: hsl( from var(--ast-global-color-2) h s l / 0.07 ); --srfm-color-input-border: hsl( from var(--ast-global-color-2) h s l / 0.25 ); --srfm-color-input-border-disabled: hsl( from var(--ast-global-color-2) h s l / 0.15 ); --srfm-color-multi-choice-svg: hsl( from var(--ast-global-color-2) h s l / 0.7 ); --srfm-color-input-border-hover: hsl( from var(--ast-global-color-0) h s l / 0.65 ); --srfm-color-input-border-focus-glow: hsl( from var(--ast-global-color-0) h s l / 0.15 ); --srfm-color-input-selected: hsl( from var(--ast-global-color-0) h s l / 0.1 ); --srfm-btn-color-hover: hsl( from var(--ast-global-color-0) h s l / 0.9 ); --srfm-btn-color-disabled: hsl( from var(--ast-global-color-0) h s l / 0.25 ); /* Dropdown Variables */ --srfm-dropdown-input-background-hover: hsl( from var(--ast-global-color-2) h s l / 0.05 ); --srfm-dropdown-option-background-hover: hsl( from var(--ast-global-color-2) h s l / 0.10 ); --srfm-dropdown-option-background-selected: hsl( from var(--ast-global-color-2) h s l / 0.05 ); --srfm-dropdown-option-selected-icon: hsl( from var(--ast-global-color-2) h s l / 0.65 ); --srfm-dropdown-option-text-color: hsl( from var(--ast-global-color-2) h s l / 0.80 ); --srfm-dropdown-option-selected-text: var(--ast-global-color-2); --srfm-dropdown-badge-background: hsl( from var(--ast-global-color-2) h s l / 0.05 ); --srfm-dropdown-badge-background-hover: hsl( from var(--ast-global-color-2) h s l / 0.10 ); --srfm-dropdown-menu-border-color: hsl( from var(--ast-global-color-2) h s l / 0.10 ); --srfm-dropdown-placeholder-color: hsl( from var(--ast-global-color-2) h s l / 0.50 ); --srfm-dropdown-icon-color: hsl( from var(--ast-global-color-2) h s l / 0.65 ); --srfm-dropdown-icon-disabled: hsl( from var(--ast-global-color-2) h s l / 0.25 ); /* Background Control Variables */ --srfm-instant-form-padding-top: 32px;--srfm-instant-form-padding-right: 32px;--srfm-instant-form-padding-bottom: 32px;--srfm-instant-form-padding-left: 32px;--srfm-instant-form-border-radius-top: 12px;--srfm-instant-form-border-radius-right: 12px;--srfm-instant-form-border-radius-bottom: 12px;--srfm-instant-form-border-radius-left: 12px;--srfm-form-padding-top: 0px;--srfm-form-padding-right: 0px;--srfm-form-padding-bottom: 0px;--srfm-form-padding-left: 0px;--srfm-form-border-radius-top: 0px;--srfm-form-border-radius-right: 0px;--srfm-form-border-radius-bottom: 0px;--srfm-form-border-radius-left: 0px;--srfm-bg-overlay-opacity: 1; --srfm-row-gap-between-blocks: 18px;--srfm-address-label-font-size: 16px;--srfm-address-label-line-height: 24px;--srfm-address-description-font-size: 14px;--srfm-address-description-line-height: 20px;--srfm-col-gap-between-fields: 16px;--srfm-row-gap-between-fields: 16px;--srfm-gap-below-address-label: 14px;--srfm-dropdown-font-size: 14px;--srfm-dropdown-gap-between-input-menu: 4px;--srfm-dropdown-badge-padding: 2px 6px;--srfm-dropdown-multiselect-font-size: 12px;--srfm-dropdown-multiselect-line-height: 16px;--srfm-dropdown-padding-right: 12px;--srfm-dropdown-padding-right-icon: calc( var( --srfm-dropdown-padding-right ) + 20px );--srfm-dropdown-multiselect-padding: 8px var( --srfm-dropdown-padding-right-icon ) 8px 8px;--srfm-input-height: 44px;--srfm-input-field-padding: 10px 12px;--srfm-input-field-font-size: 16px;--srfm-input-field-line-height: 24px;--srfm-input-field-margin-top: 6px;--srfm-input-field-margin-bottom: 6px;--srfm-checkbox-label-font-size: 16px;--srfm-checkbox-label-line-height: 24px;--srfm-checkbox-description-font-size: 14px;--srfm-checkbox-description-line-height: 20px;--srfm-check-ctn-width: 16px;--srfm-check-ctn-height: 16px;--srfm-check-svg-size: 10px;--srfm-checkbox-margin-top-frontend: 4px;--srfm-checkbox-margin-top-editor: 6px;--srfm-check-gap: 8px;--srfm-checkbox-description-margin-left: 24px;--srfm-flag-section-padding: 10px 0 10px 12px;--srfm-gap-between-icon-text: 8px;--srfm-label-font-size: 16px;--srfm-label-line-height: 24px;--srfm-description-font-size: 14px;--srfm-description-line-height: 20px;--srfm-btn-padding: 10px 14px;--srfm-btn-font-size: 16px;--srfm-btn-line-height: 24px;--srfm-multi-choice-horizontal-padding: 20px;--srfm-multi-choice-vertical-padding: 20px;--srfm-multi-choice-internal-option-gap: 8px;--srfm-multi-choice-vertical-svg-size: 40px;--srfm-multi-choice-horizontal-image-size: 24px;--srfm-multi-choice-vertical-image-size: 120px;--srfm-multi-choice-outer-padding: 2px; } </style> <form method="post" enctype="multipart/form-data" id="srfm-form-1895" class="srfm-form " form-id="1895" after-submission="hide form" message-type="same page" success-url="" ajaxurl="https://adminmanuals.com/wp-admin/admin-ajax.php" data-submit-token="afd304ee991336baefa90f7d544b8f2764a955db7e1fac3d9ef02dc394b06e14" > <input type="hidden" value="1895" name="form-id"> <input type="hidden" value="" name="srfm-sender-email-field" id="srfm-sender-email"> <input type="hidden" value="" id="srfm-page-break"> <p id="srfm-error-message" class="srfm-common-error-message srfm-error-message srfm-head-error" hidden> <span class="srfm-icon" aria-hidden="true"> <svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none'><path d='M9.99935 18.3327C14.6017 18.3327 18.3327 14.6017 18.3327 9.99935C18.3327 5.39698 14.6017 1.66602 9.99935 1.66602C5.39698 1.66602 1.66602 5.39698 1.66602 9.99935C1.66602 14.6017 5.39698 18.3327 9.99935 18.3327Z' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /><path d='M10 6.66602V9.99935' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /><path d='M10 13.334H10.0083' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /></svg> </span> <span class="srfm-error-content">There was an error trying to submit your form. Please try again.</span></p> <div data-block-id="67ef71e4" class="srfm-block-single srfm-block srfm-email-block srf-email-67ef71e4-block srfm-block-width-66-66 srfm-slug-email 1895 srfm-email-block-wrap"> <div class="srfm-email-block srf-email-67ef71e4-block"> <div class="srfm-block-wrap"> <input class="srfm-input-common srfm-input-email" type="email" name="srfm-email-67ef71e4-lbl-RW1haWwgYWRkcmVzcw-email" id="srfm-email-67ef71e4-lbl-RW1haWwgYWRkcmVzcw" aria-describedby='srfm-error-67ef71e4' data-required="true" aria-required="true" data-unique="false" value="" placeholder="Email address *" /> </div> <div class="srfm-error-wrap"> <div class="srfm-error-message" data-srfm-id="srfm-error-67ef71e4" data-error-msg="This field is required." data-unique-msg="Value needs to be unique."> This field is required. </div> </div> </div> </div> <div data-block-id="1885c5be" class=" 1895 srf-inline-button-1885c5be-block srfm-block-width-33-33 srfm-block srfm-custom-button-ctn "> <button style=" font-family: inherit; font-weight: var(--wp--custom--font-weight--medium); line-height: normal;width:100%;" id="srfm-submit-btn" class="srfm-button srfm-submit-button srfm-btn-frontend srfm-custom-button" > <div class="srfm-submit-wrap"> Subscribe <div class="srfm-loader"></div> </div> </button> <div class="srfm-error-wrap"></div> </div> <div class="srfm-submit-container " style="visibility:hidden;position:absolute;"> <div style="width: ; text-align: left" class="wp-block-button"> </div> </div> <p id="srfm-error-message" class="srfm-common-error-message srfm-error-message srfm-footer-error" hidden> <span class="srfm-icon" aria-hidden="true"> <svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none'><path d='M9.99935 18.3327C14.6017 18.3327 18.3327 14.6017 18.3327 9.99935C18.3327 5.39698 14.6017 1.66602 9.99935 1.66602C5.39698 1.66602 1.66602 5.39698 1.66602 9.99935C1.66602 14.6017 5.39698 18.3327 9.99935 18.3327Z' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /><path d='M10 6.66602V9.99935' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /><path d='M10 13.334H10.0083' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' /></svg> </span> <span class="srfm-error-content">There was an error trying to submit your form. Please try again.</span></p> </form> <div class="srfm-single-form srfm-success-box in-page"> <div aria-live="polite" aria-atomic="true" role="alert" id="srfm-success-message-page-1895" class="srfm-success-box-description"></div> </div> </div> </div></div> </div> </div> </div> </div> </div> <div class="site-primary-footer-wrap ast-builder-grid-row-container site-footer-focus-item ast-builder-grid-row-4-equal ast-builder-grid-row-tablet-2-equal ast-builder-grid-row-mobile-full ast-footer-row-stack ast-footer-row-tablet-stack ast-footer-row-mobile-stack" data-section="section-primary-footer-builder"> <div class="ast-builder-grid-row-container-inner"> <div class="ast-builder-footer-grid-columns site-primary-footer-inner-wrap ast-builder-grid-row"> <div class="site-footer-primary-section-1 site-footer-section site-footer-section-1"> </div> <div class="site-footer-primary-section-2 site-footer-section site-footer-section-2"> </div> <div class="site-footer-primary-section-3 site-footer-section site-footer-section-3"> <aside class="footer-widget-area widget-area site-footer-focus-item footer-widget-area-inner" data-section="sidebar-widgets-footer-widget-3" aria-label="Footer Widget 3" role="region" > </aside> </div> <div class="site-footer-primary-section-4 site-footer-section site-footer-section-4"> <aside class="footer-widget-area widget-area site-footer-focus-item footer-widget-area-inner" data-section="sidebar-widgets-footer-widget-4" aria-label="Footer Widget 4" role="region" > <section id="nav_menu-3" class="widget widget_nav_menu"><h2 class="widget-title">Legal Pages</h2><nav class="menu-footer-legal-container" aria-label="Legal Pages"><ul id="menu-footer-legal" class="menu"><li id="menu-item-1986" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1986"><a href="https://adminmanuals.com/cookie-policy/" class="menu-link">Cookie Policy</a></li> <li id="menu-item-1987" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1987"><a href="https://adminmanuals.com/disclaimer/" class="menu-link">Disclaimer</a></li> <li id="menu-item-2058" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-2058"><a rel="privacy-policy" href="https://adminmanuals.com/privacy-policy/" class="menu-link">Privacy Policy</a></li> <li id="menu-item-2059" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2059"><a href="https://adminmanuals.com/terms-of-service/" class="menu-link">Terms of Service</a></li> </ul></nav></section> </aside> </div> </div> </div> </div> <div class="site-below-footer-wrap ast-builder-grid-row-container site-footer-focus-item ast-builder-grid-row-full ast-builder-grid-row-tablet-full ast-builder-grid-row-mobile-full ast-footer-row-stack ast-footer-row-tablet-stack ast-footer-row-mobile-stack" data-section="section-below-footer-builder"> <div class="ast-builder-grid-row-container-inner"> <div class="ast-builder-footer-grid-columns site-below-footer-inner-wrap ast-builder-grid-row"> <div class="site-footer-below-section-1 site-footer-section site-footer-section-1"> <div class="ast-builder-layout-element ast-flex site-footer-focus-item ast-footer-copyright" data-section="section-footer-builder"> <div class="ast-footer-copyright"><p style="text-align: center">Copyright © 2026 Admin Manuals.</p> </div> </div> </div> </div> </div> </div> </footer><!-- #colophon --> </div><!-- #page --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/astra/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script type="text/javascript"> (function() { // Global page view and session tracking for UAEL Modal Popup feature try { // Session tracking: increment if this is a new session // Check if any popup on this page uses current page tracking var hasCurrentPageTracking = false; var currentPagePopups = []; // Check all modal popups on this page for current page tracking if (typeof jQuery !== 'undefined') { jQuery('.uael-modal-parent-wrapper').each(function() { var scope = jQuery(this).data('page-views-scope'); var enabled = jQuery(this).data('page-views-enabled'); var popupId = jQuery(this).attr('id').replace('-overlay', ''); if (enabled === 'yes' && scope === 'current') { hasCurrentPageTracking = true; currentPagePopups.push(popupId); } }); } // Global tracking: ALWAYS increment if ANY popup on the site uses global tracking // Current page tracking: increment per-page counters if (hasCurrentPageTracking && currentPagePopups.length > 0) { var currentUrl = window.location.href; var urlKey = 'uael_page_views_' + btoa(currentUrl).replace(/[^a-zA-Z0-9]/g, '').substring(0, 50); var currentPageViews = parseInt(localStorage.getItem(urlKey) || '0'); currentPageViews++; localStorage.setItem(urlKey, currentPageViews.toString()); // Store URL mapping for each popup for (var i = 0; i < currentPagePopups.length; i++) { var popupUrlKey = 'uael_popup_' + currentPagePopups[i] + '_url_key'; localStorage.setItem(popupUrlKey, urlKey); } } } catch (e) { // Silently fail if localStorage is not available } })(); </script> <div id="ast-scroll-top" tabindex="0" class="ast-scroll-top-icon ast-scroll-to-top-right" data-on-devices="both"> <span class="ast-icon icon-arrow"><svg class="ast-arrow-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="26px" height="16.043px" viewBox="57 35.171 26 16.043" enable-background="new 57 35.171 26 16.043" xml:space="preserve"> <path d="M57.5,38.193l12.5,12.5l12.5-12.5l-2.5-2.5l-10,10l-10-10L57.5,38.193z" /> </svg></span> <span class="screen-reader-text">Scroll to Top</span> </div> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <link rel='stylesheet' id='srfm-frontend-default-css' href='https://adminmanuals.com/wp-content/plugins/sureforms/assets/css/minified/blocks/default/frontend.min.css?ver=2.9.0' media='all' /> <link rel='stylesheet' id='srfm-common-css' href='https://adminmanuals.com/wp-content/plugins/sureforms/assets/css/minified/common.min.css?ver=2.9.0' media='all' /> <link rel='stylesheet' id='srfm-form-css' href='https://adminmanuals.com/wp-content/plugins/sureforms/assets/css/minified/frontend/form.min.css?ver=2.9.0' media='all' /> <link rel='stylesheet' id='srfm-tom-select-css' href='https://adminmanuals.com/wp-content/plugins/sureforms/assets/css/minified/deps/tom-select.css?ver=2.9.0' media='all' /> <link rel='stylesheet' id='srfm-intl-tel-input-css' href='https://adminmanuals.com/wp-content/plugins/sureforms/assets/css/minified/deps/intl/intlTelInput.min.css?ver=2.9.0' media='all' /> <script src="https://adminmanuals.com/wp-includes/js/comment-reply.min.js?ver=6.9.4" id="comment-reply-js" async data-wp-strategy="async" fetchpriority="low"></script> <script id="astra-theme-js-js-extra"> var astra = {"break_point":"921","isRtl":"","is_scroll_to_id":"","is_scroll_to_top":"1","is_header_footer_builder_active":"1","responsive_cart_click":"flyout","is_dark_palette":""}; //# sourceURL=astra-theme-js-js-extra </script> <script src="https://adminmanuals.com/wp-content/themes/astra/assets/js/minified/frontend.min.js?ver=4.13.2" id="astra-theme-js-js"></script> <script src="https://adminmanuals.com/wp-includes/js/dist/dom-ready.min.js?ver=f77871ff7694fffea381" id="wp-dom-ready-js"></script> <script id="starter-templates-zip-preview-js-extra"> var starter_templates_zip_preview = {"AstColorPaletteVarPrefix":"--ast-global-color-","AstEleColorPaletteVarPrefix":["ast-global-color-0","ast-global-color-1","ast-global-color-2","ast-global-color-3","ast-global-color-4","ast-global-color-5","ast-global-color-6","ast-global-color-7","ast-global-color-8"]}; //# sourceURL=starter-templates-zip-preview-js-extra </script> <script src="https://adminmanuals.com/wp-content/plugins/astra-pro-sites/inc/lib/onboarding/assets/dist/template-preview/main.js?ver=aabd2ae4238bd052108b" id="starter-templates-zip-preview-js"></script> <script id="astra-addon-js-js-extra"> var astraAddon = {"is_elementor_active":"1","sticky_active":"","svgIconClose":"\u003Cspan class=\"ast-icon icon-close\"\u003E\u003Csvg viewBox=\"0 0 512 512\" aria-hidden=\"true\" role=\"img\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"18px\" height=\"18px\"\u003E\n \u003Cpath d=\"M71.029 71.029c9.373-9.372 24.569-9.372 33.942 0L256 222.059l151.029-151.03c9.373-9.372 24.569-9.372 33.942 0 9.372 9.373 9.372 24.569 0 33.942L289.941 256l151.03 151.029c9.372 9.373 9.372 24.569 0 33.942-9.373 9.372-24.569 9.372-33.942 0L256 289.941l-151.029 151.03c-9.373 9.372-24.569 9.372-33.942 0-9.372-9.373-9.372-24.569 0-33.942L222.059 256 71.029 104.971c-9.372-9.373-9.372-24.569 0-33.942z\" /\u003E\n \u003C/svg\u003E\u003C/span\u003E","hf_account_show_menu_on":"hover","hf_account_action_type":"link","hf_account_logout_action":"link","is_header_builder_active":"1"}; //# sourceURL=astra-addon-js-js-extra </script> <script src="https://adminmanuals.com/wp-content/uploads/astra-addon/astra-addon-6a02f6886ce521-39238020.js?ver=4.13.2" id="astra-addon-js-js"></script> <script src="https://adminmanuals.com/wp-content/plugins/astra-addon/assets/js/minified/purify.min.js?ver=4.13.2" id="astra-dom-purify-js"></script> <script src="https://adminmanuals.com/wp-includes/js/dist/hooks.min.js?ver=dd5603f07f9220ed27f1" id="wp-hooks-js"></script> <script src="https://adminmanuals.com/wp-includes/js/dist/i18n.min.js?ver=c26c3dc7bed366793375" id="wp-i18n-js"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script src="https://adminmanuals.com/wp-includes/js/dist/url.min.js?ver=9e178c9516d1222dc834" id="wp-url-js"></script> <script src="https://adminmanuals.com/wp-includes/js/dist/api-fetch.min.js?ver=3a4d9af2b423048b0dee" id="wp-api-fetch-js"></script> <script id="wp-api-fetch-js-after"> wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://adminmanuals.com/wp-json/" ) ); wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "ee90b99d18" ); wp.apiFetch.use( wp.apiFetch.nonceMiddleware ); wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware ); wp.apiFetch.nonceEndpoint = "https://adminmanuals.com/wp-admin/admin-ajax.php?action=rest-nonce"; //# sourceURL=wp-api-fetch-js-after </script> <script id="srfm-form-submit-js-extra"> var srfm_submit = {"site_url":"https://adminmanuals.com","nonce":"ee90b99d18","messages":{"srfm_valid_phone_number":"Enter a valid phone number.","srfm_valid_url":"Enter a valid URL.","srfm_confirm_email_same":"Confirmation email does not match.","srfm_valid_email":"Enter a valid email address.","srfm_textarea_min_chars":"Please enter at least %s characters.","srfm_input_min_value":"Minimum value is %s.","srfm_input_max_value":"Maximum value is %s.","srfm_dropdown_min_selections":"Select at least %s options.","srfm_dropdown_max_selections":"You can select up to %s options.","srfm_multi_choice_min_selections":"Select at least %s options.","srfm_multi_choice_max_selections":"You can select up to %s options.","srfm_turnstile_error_message":"Turnstile sitekey verification failed. Please contact your site administrator.","srfm_google_captcha_error_message":"Google Captcha sitekey verification failed. Please contact your site administrator.","srfm_captcha_h_error_message":"HCaptcha sitekey verification failed. Please contact your site administrator."},"is_rtl":""}; //# sourceURL=srfm-form-submit-js-extra </script> <script src="https://adminmanuals.com/wp-content/plugins/sureforms/assets/build/formSubmit.js?ver=2.9.0" id="srfm-form-submit-js"></script> <script src="https://adminmanuals.com/wp-content/plugins/sureforms/assets/js/minified/frontend.min.js?ver=2.9.0" id="srfm-frontend-js"></script> <script> /(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1); </script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://adminmanuals.com/wp-includes/js/wp-emoji-release.min.js?ver=6.9.4"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://adminmanuals.com/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html> <!-- Page supported by LiteSpeed Cache 7.8.1 on 2026-05-15 16:52:26 -->