1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
|
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mailbox Distribution — Cyrus IMAP 3.10.2 documentation</title>
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/graphviz.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/cyrus.css" type="text/css" />
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/sphinx_highlight.js"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="Cyrus Murder" href="murder/murder.html" />
<link rel="prev" title="Monitoring" href="monitoring.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
Cyrus IMAP
</a>
<div class="version">
3.10.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Cyrus IMAP</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../download.html">Download</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../quickstart.html">Quickstart Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../overview.html">Overview</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../setup.html">Setup</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../operations.html">Operations</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../manpages/index.html">Man pages</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../admin.html">Administrator Guide</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../admin.html#architecture">Architecture</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="../admin.html#management">Management</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="locations.html">File & Directory Locations</a></li>
<li class="toctree-l4"><a class="reference internal" href="ports-sockets.html">Ports and Sockets</a></li>
<li class="toctree-l4"><a class="reference internal" href="access-control.html">Access Control</a></li>
<li class="toctree-l4"><a class="reference internal" href="quotas.html">Quotas</a></li>
<li class="toctree-l4"><a class="reference internal" href="sieve.html">Cyrus Sieve</a></li>
<li class="toctree-l4"><a class="reference internal" href="backups.html">Cyrus Backups</a></li>
<li class="toctree-l4"><a class="reference internal" href="nntp.html">Cyrus NNTP</a></li>
<li class="toctree-l4"><a class="reference internal" href="protlayer.html">Cyrus Prot Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="sop.html">Standard Operating Procedures</a></li>
<li class="toctree-l4"><a class="reference internal" href="eventsource.html">Cyrus Event Source</a></li>
<li class="toctree-l4"><a class="reference internal" href="monitoring.html">Monitoring</a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#">Mailbox Distribution</a></li>
<li class="toctree-l4"><a class="reference internal" href="murder/murder.html">Cyrus Murder</a></li>
<li class="toctree-l4"><a class="reference internal" href="nginx-proxy.html">HOWTO: Using an NGINX IMAP Proxy</a></li>
<li class="toctree-l4"><a class="reference internal" href="tweaking.html">Tweaking Cyrus IMAP</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../faq.html">Frequently Asked Questions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../developers.html">Developers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../support.html">Support/Community</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Cyrus SASL</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="http://www.cyrusimap.org/sasl">Cyrus SASL</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">Cyrus IMAP</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../../operations.html">Operations</a></li>
<li class="breadcrumb-item"><a href="../admin.html">Administrator Guide</a></li>
<li class="breadcrumb-item active">Mailbox Distribution</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/cyrusimap/cyrus-imapd/blob/master/docsrc/imap/reference/admin/config-mailboxdistribution.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="mailbox-distribution">
<h1>Mailbox Distribution<a class="headerlink" href="#mailbox-distribution" title="Permalink to this heading"></a></h1>
<p>In a Cyrus IMAP Murder, the backend server and/or partition on which a new mailbox is created, when created through a Cyrus IMAP Murder frontend, is traditionally selected by querying each of the configured backends (<strong>serverlist</strong> setting in <a class="reference internal" href="../manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a> on the Murder frontend) for the absolute amount of free disk space. The largest amount of absolute free disk space is used as the server and partition on which to create the new mailbox.</p>
<p>On a Cyrus IMAP Murder frontend, a default backend can be configured using the <strong>defaultserver</strong> setting in <a class="reference internal" href="../manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>, and on a Cyrus IMAP Murder backend, a default partition can be configured with the <strong>defaultpartition</strong> setting in <a class="reference internal" href="../manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>.</p>
<p>As of Cyrus IMAP 2.5, the server and/or partition on which new mailboxes are created is fully configurable, and provides a lot more option value with more intelligent selection routines available. Please note that the related settings can be changed at any time and without impact to existing mailboxes.</p>
<p>In Cyrus IMAP 2.5, the backend server and/or partition selection can be controlled with <strong>serverlist_select_mode</strong> for frontend server selection, and <strong>partition_select_mode</strong> for backend partition selection. The <strong>partition_select_mode</strong> naturally applies to stand-alone Cyrus IMAP 2.5 servers not part of a murder topology as well.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>Only on Mailbox Creation</strong></p>
<p>Please note that the settings only impact backend and partition selection during the creation of mailboxes. No automatic balancing of mailboxes by number, use or size during runtime is currently available, nor is any storage hierarchy concept.</p>
</div>
<section id="selection-modes">
<h2>Selection Modes<a class="headerlink" href="#selection-modes" title="Permalink to this heading"></a></h2>
<p>Selection modes configurable on frontend and backend share the same principles. In each case, a list of available items are considered: those are the backends when creating the mailbox through a frontend, and the partitions when being on the backend. Depending on the configured selection mode, each item has an associated (disk) capacity and free space which will be used to select the most fitting one.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>Unified murder</strong>
Please remember that when using a unified murder configuration, a server is both a frontend and a backend: you can create and access local or remote mailboxes. Since configuration settings are distinct for each role the server can take, you can apply different selection modes for each role.</p>
</div>
<section id="available-selection-modes">
<h3>Available Selection Modes<a class="headerlink" href="#available-selection-modes" title="Permalink to this heading"></a></h3>
<p><strong>random</strong></p>
<blockquote>
<div><p>Choice is (pseudo-)random. Each item has the same probability of being selected.</p>
</div></blockquote>
<p><strong>freespace-most</strong></p>
<blockquote>
<div><p>The item which has the most free space (counted in KiB units) is selected. That is the default selection mode.</p>
<div class="line-block">
<div class="line">Example: Suppose that the available items are:</div>
<div class="line"><br /></div>
<div class="line"><strong>item1</strong> with 1000GB of capacity, 400GB being free (40% free space)</div>
<div class="line"><strong>item2</strong> with 1000GB of capacity, 600GB being free (60% free space)</div>
<div class="line"><strong>item3</strong> with 100GB of capacity, 30GB being free (30% free space)</div>
<div class="line"><strong>item4</strong> with 100GB of capacity, 70GB being free (70% free space)</div>
<div class="line"><br /></div>
<div class="line">In this case <strong>item2</strong> will be selected as most fitting, since 600GB of free space is the biggest space of all.</div>
</div>
</div></blockquote>
<p><strong>freespace-percent-most</strong></p>
<blockquote>
<div><p>The item which has the most percentage of free space is selected.</p>
<div class="line-block">
<div class="line">Example: Suppose that the available items are:</div>
<div class="line"><br /></div>
<div class="line"><strong>item1</strong> with 1000GB of capacity, 400GB being free (40% free space)</div>
<div class="line"><strong>item2</strong> with 1000GB of capacity, 600GB being free (60% free space)</div>
<div class="line"><strong>item3</strong> with 100GB of capacity, 30GB being free (30% free space)</div>
<div class="line"><strong>item4</strong> with 100GB of capacity, 70GB being free (70% free space)</div>
</div>
<div class="line-block">
<div class="line">In this case <strong>item4</strong> would be selected as most fitting, since 70% of free space is the largest percentage of all.</div>
</div>
</div></blockquote>
<p><strong>freespace-percent-weighted</strong></p>
<blockquote>
<div><p>For each item, the percentage of free space is its weight. Then a weighted choice is performed to select one of those items.
As such, the more free space the item has, the more chances it has to be selected.</p>
<div class="line-block">
<div class="line">Example:</div>
<div class="line"><br /></div>
<div class="line"><strong>item1</strong> with 1000GB of capacity, 400GB being free (40% free space), weight is 40</div>
<div class="line"><strong>item2</strong> with 1000GB of capacity, 600GB being free (60% free space), weight is 60</div>
<div class="line"><strong>item3</strong> with 100GB of capacity, 30GB being free (30% free space), weight is 30</div>
<div class="line"><strong>item4</strong> with 100GB of capacity, 70GB being free (70% free space), weight is 70</div>
<div class="line"><br /></div>
<div class="line">The sum of the weights being 200, the probability for each item to be selected as most fitting would be::</div>
<div class="line"><br /></div>
<div class="line">100 * (40 / 200) = 20% for item1</div>
<div class="line">100 * (60 / 200) = 30% for item2</div>
<div class="line">100 * (30 / 200) = 15% for item3</div>
<div class="line">100 * (70 / 200) = 35% for item4</div>
</div>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>Usage convergence</strong>
Using the freespace-percent-weighted mode, the percentage usages will converge towards 100%. So if they have different usages, those differences will stay and only really diminish upon reaching 100% of usage.</p>
<p>You may also observe growing differences between items usages when they do not have the same total disk space.</p>
</div>
<p><strong>freespace-percent-weighted-delta</strong></p>
<blockquote>
<div><p>As for <strong>freespace-percent-weighted</strong>, a weight is associated to each item. It is computed as follows:</p>
<p><code class="docutils literal notranslate"><span class="pre">(*percentage</span> <span class="pre">of</span> <span class="pre">freespace</span> <span class="pre">of</span> <span class="pre">item*)</span> <span class="pre">-</span> <span class="pre">(*lowest</span> <span class="pre">percentage</span> <span class="pre">of</span> <span class="pre">freespace</span> <span class="pre">of</span> <span class="pre">all</span> <span class="pre">items*)</span> <span class="pre">+</span> <span class="pre">0.5</span></code></p>
<p>Then a weighted choice is performed to select one of those items.</p>
<p>(The added 0.5 in item's weight is so that selection gets smoother when all items usage percentages get close to each other.)</p>
<p>As such, considering the usage percentages, the more the item is lagging behind the most used one (which has the lowest percentage of free space), the more chances it has to be selected.</p>
<div class="line-block">
<div class="line">Example: In the same conditions as above, the weight of each item would be::</div>
<div class="line"><br /></div>
<div class="line">40 - 30 + 0.5 = 10.5 for item1</div>
<div class="line">60 - 30 + 0.5 = 30.5 for item2</div>
<div class="line">30 - 30 + 0.5 = 0.5 for item3</div>
<div class="line">0 - 30 + 0.5 = 40.5 for item4</div>
</div>
<div class="line-block">
<div class="line">The sum of the weights being 82, the probability for each item to be selected as most fitting would be::</div>
<div class="line"><br /></div>
<div class="line">100 * (10.5 / 82) = 12.8% for item1</div>
<div class="line">100 * (30.5 / 82) = 37.2% for item2</div>
<div class="line">100 * (0.5 / 82) = 0.6% for item3</div>
<div class="line">100 * (40.5 / 82) = 49.4% for item4</div>
</div>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>Usage convergence</strong>
Using the freespace-percent-weighted-delta mode, items percentage usages will converge towards the most used one. And then items usage will grow equally.</p>
</div>
</section>
<section id="guidelines">
<h3>Guidelines<a class="headerlink" href="#guidelines" title="Permalink to this heading"></a></h3>
<p>Which mode to use depends primarily on whether you are building the platform from scratch, or adding servers and partitions and if you plan to create a lot of empty mailboxes in a short period of time.</p>
<p>The Selection mode can be changed as needed.</p>
<p>If you plan to create a lot of empty mailboxes in a short period of time, use <strong>random</strong>. The other modes rely on the amount of freespace on backends and partitions, and thus would create most (if not all) the mailboxes at the same place, which will become an issue later as those mailboxes grow.</p>
<p>If you only care about the amount of free space, you can use the default mode (<strong>freespace-most</strong>) or <strong>freespace-percent-most</strong>.</p>
<p>Otherwise you should use <strong>freespace-percent-weighted-delta</strong>, which is generally good enough for situations where mailbox creation pace is slow, or <strong>freespace-percent-weighted</strong>.</p>
</section>
</section>
<section id="special-cases">
<h2>Special cases<a class="headerlink" href="#special-cases" title="Permalink to this heading"></a></h2>
<section id="what-happens-when-two-items-are-equal-as-most-fitting">
<h3>What happens when two items are equal as most fitting ?<a class="headerlink" href="#what-happens-when-two-items-are-equal-as-most-fitting" title="Permalink to this heading"></a></h3>
<p>The freespace-most and freespace-percent-most modes do select the item with the most free space or percent of free space. It may happen that two or more items do have the same value. If this value appears as most fitting, only one item will be selected, but you may not know in advance which one will be. In particular, it may not be the first one that appears listed in your configuration.</p>
<p>Also note that after the mailbox is created on the selected item, it will have less free space and thus shall not be seen as most fitting next time.</p>
</section>
<section id="what-happens-when-two-items-are-actually-the-same">
<h3>What happens when two items are actually the same ?<a class="headerlink" href="#what-happens-when-two-items-are-actually-the-same" title="Permalink to this heading"></a></h3>
<p>Each item has an associated id:</p>
<ul class="simple">
<li><p>its name for a backend</p></li>
<li><p>its device id for a partition</p></li>
</ul>
<p>If two or more items share the same id when using the freespace-most or freespace-percent-most mode, only one of those items will actually be checked, as if the others were not configured. You may not know in advance which one will be.</p>
</section>
<section id="items-exclusion">
<h3>Items Exclusion<a class="headerlink" href="#items-exclusion" title="Permalink to this heading"></a></h3>
<p>When using a selection mode other than random, items can be automatically excluded if their usage percentage is beyond a configured integer setting:</p>
<ul class="simple">
<li><p><strong>serverlist_select_soft_usage_limit</strong> on a frontend</p></li>
<li><p><strong>partition_select_soft_usage_limit</strong> on a backend</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Soft usage limit
If all items are beyond the configured value, this feature is automatically deactivated. An item is thus selected as if the setting was not set.</p>
</div>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Exclusion is not absolute
Items are only excluded when creating a new user mailbox according to the configured selection mode.
If you explicitly specify an excluded item, the mailbox will be created on that item.
Mailboxes previously created there are of course still accessible, and subfolders are by default still created at the same place than the parent folder.</p>
</div>
</section>
<section id="items-usage-data-reset">
<h3>Items Usage Data Reset<a class="headerlink" href="#items-usage-data-reset" title="Permalink to this heading"></a></h3>
<p>By default items usage data are retrieved only once upon service initialization (that is when an imapd instance is created). This only concerns selection modes other than random.</p>
<p>If you tend to use the same service instance for a long lapse of time and perform a large amount of mailboxes creation, usage data will soon be out-of-date. For the cases where it is useful to refresh those data, you can configure the number of creation requests after which data are reset:</p>
<ul class="simple">
<li><p><strong>serverlist_select_usage_reinit</strong> for a frontend</p></li>
<li><p><strong>partition_select_usage_reinit</strong> for a backend</p></li>
</ul>
</section>
</section>
<section id="application">
<h2>Application<a class="headerlink" href="#application" title="Permalink to this heading"></a></h2>
<p>What each item (disk) capacity and free space represents depends on the situation.</p>
<section id="on-backend">
<h3>On backend<a class="headerlink" href="#on-backend" title="Permalink to this heading"></a></h3>
<p>On the backend a partition is represented by its disk capacity and free space. Each example listed in Available Selection Modes can be interpreted in a straightforward way by replacing references to item by partition.</p>
</section>
<section id="on-frontend">
<h3>On frontend<a class="headerlink" href="#on-frontend" title="Permalink to this heading"></a></h3>
<p>On the frontend a backend is represented by its available partition with the most percentage of free space, except for the <strong>freespace-most</strong> mode where it is the sum of all its available partitions. Of course this does not apply to the <strong>random</strong> mode.</p>
<section id="example-of-backend-representation-on-frontend">
<h4>Example of backend representation on frontend<a class="headerlink" href="#example-of-backend-representation-on-frontend" title="Permalink to this heading"></a></h4>
<blockquote>
<div><p>Suppose that a backend has a 2000GiB capacity, 900GiB being free (45% free space), composed of 2 partitions</p>
<ul class="simple">
<li><p><strong>part1</strong> which has a 1000GiB capacity, 200GiB being free (20% free space)</p></li>
<li><p><strong>part2</strong> which has a 1000GiB capacity, 700GiB being free (70% free space)</p></li>
</ul>
<p>That backend would be represented by:</p>
<ul class="simple">
<li><p>its partition <strong>part2</strong> for the <strong>freespace-percent-most</strong>, <strong>freespace-percent-weighted</strong> and <strong>freespace-percent-weighted-delta</strong> modes, since that partition has the most percentage of free space: that is a 1000GiB capacity, 700GiB being free (70% free space)</p></li>
<li><p>the sum of all its available partitions for the <strong>freespace-most</strong> mode: that is a 2000GiB capacity, 900GiB being free (45% free space)</p></li>
</ul>
</div></blockquote>
<p>Keeping that in mind, you can refer to examples listed in Available Selection Modes to determine how most fitting backends are selected.</p>
</section>
</section>
<section id="backends-exclusion">
<h3>Backends Exclusion<a class="headerlink" href="#backends-exclusion" title="Permalink to this heading"></a></h3>
<p>For details on exclusion based on disk usage, see Section "Items Exclusion".</p>
<section id="example-of-backend-exclusion-using-serverlist-select-soft-usage-limit">
<h4>Example of backend exclusion using serverlist_select_soft_usage_limit<a class="headerlink" href="#example-of-backend-exclusion-using-serverlist-select-soft-usage-limit" title="Permalink to this heading"></a></h4>
<p>The backend in “Example of backend representation on frontend” would be excluded using the <strong>freespace-most</strong> selection mode and setting <strong>serverlist_select_soft_usage_limit</strong> to 50 since in that mode it is represented by a disk usage of 55%. In other modes it would not be excluded, since it would be represented by a disk usage of 30%.</p>
</section>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="monitoring.html" class="btn btn-neutral float-left" title="Monitoring" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="murder/murder.html" class="btn btn-neutral float-right" title="Cyrus Murder" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 1993–2025, The Cyrus Team.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
|