File: config-mailboxdistribution.html

package info (click to toggle)
cyrus-imapd 3.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 59,108 kB
  • sloc: ansic: 284,386; perl: 137,327; javascript: 9,659; sh: 5,730; yacc: 2,565; makefile: 2,188; cpp: 2,147; lex: 662; xml: 621; awk: 303; python: 272; asm: 262
file content (352 lines) | stat: -rw-r--r-- 25,263 bytes parent folder | download
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 &mdash; 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 &amp; 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 &quot;Items Exclusion&quot;.</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>&#169; 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>