From ca920a03982ee995886727d15cf128767d848468 Mon Sep 17 00:00:00 2001 From: Marc Worrell Date: Tue, 14 Oct 2025 13:40:40 +0200 Subject: [PATCH 1/2] Add ringbuffer:whereis/1, update doc styling and CI --- .github/workflows/test.yml | 4 +- doc/img/logo.png | Bin 0 -> 9843 bytes doc/style.css | 75 +++++++++++++++++++++++++++++++++++++ rebar.config | 21 +++++++++++ src/ringbuffer.erl | 40 ++++++++++++++++---- src/ringbuffer_app.erl | 5 ++- src/ringbuffer_process.erl | 5 ++- src/ringbuffer_sup.erl | 16 ++++---- test/ringbuffer_test.erl | 10 +++-- 9 files changed, 152 insertions(+), 24 deletions(-) create mode 100644 doc/img/logo.png create mode 100644 doc/style.css diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 29b34df..bab31a4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,14 +18,14 @@ jobs: strategy: matrix: - otp_version: [22,23,24] + otp_version: [26,27,28] os: [ubuntu-latest] container: image: erlang:${{ matrix.otp_version }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Compile run: make - name: Test diff --git a/doc/img/logo.png b/doc/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..94ea9de05137b897f08fbc6d773ccaeeb0ae042b GIT binary patch literal 9843 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 TY{%yjg-H9T-tXy0tgrnqF_4I{ literal 0 HcmV?d00001 diff --git a/doc/style.css b/doc/style.css new file mode 100644 index 0000000..182fb40 --- /dev/null +++ b/doc/style.css @@ -0,0 +1,75 @@ +/* standard EDoc style sheet */ +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + margin-left: .25in; + margin-right: .2in; + margin-top: 0.2in; + margin-bottom: 0.2in; + color: #000000; + background-color: #ffffff; +} +h1,h2 { + margin-left: -0.2in; +} +div.navbar { + background-color: #add8e6; + padding: 0.2em; +} +h2.indextitle { + padding: 0.4em; + background-color: #add8e6; +} +h3.function,h3.typedecl { + background-color: #add8e6; + padding-left: 1em; +} +div.spec { + margin-left: 2em; + + background-color: #eeeeee; +} +a.module { + text-decoration:none +} +a.module:hover { + background-color: #eeeeee; +} +ul.definitions { + list-style-type: none; +} +ul.index { + list-style-type: none; + background-color: #eeeeee; +} + +/* + * Minor style tweaks + */ +ul { + list-style-type: square; +} +table { + border-collapse: collapse; +} +td { + padding: 3px; + vertical-align: middle; +} + +/* +Tune styles +*/ + +table[summary="navigation bar"] { + background-image: url('http://zotonic.com/lib/images/logo.png'); + background-repeat: no-repeat; + background-position: center; +} + +code, p>tt, a>tt { + font-size: 1.2em; +} + +p { + line-height: 1.5; +} diff --git a/rebar.config b/rebar.config index d7b9b94..f88739e 100644 --- a/rebar.config +++ b/rebar.config @@ -5,6 +5,8 @@ warn_unused_import ]}. +{project_plugins, [rebar3_hex, rebar3_ex_doc]}. + {deps, [ ]}. @@ -13,3 +15,22 @@ {xref_checks, [undefined_function_calls, locals_not_used, deprecated_function_calls]}. + +{edoc_opts, [ + {preprocess, true}, {stylesheet, "style.css"} +]}. + +{hex, [ + {doc, #{provider => ex_doc}} +]}. + +{ex_doc, [ + {extras, [ + {"README.md", #{title => "Overview"}}, + {"LICENSE", #{title => "License"}} + ]}, + {main, "README.md"}, + {source_url, "https://github.com/zotonic/ringbuffer"}, + {assets, "assets"}, + {api_reference, true} +]}. \ No newline at end of file diff --git a/src/ringbuffer.erl b/src/ringbuffer.erl index be3f688..f171ac5 100644 --- a/src/ringbuffer.erl +++ b/src/ringbuffer.erl @@ -1,5 +1,5 @@ %% @author Marc Worrell -%% @copyright 2021 Marc Worrell +%% @copyright 2021-2025 Marc Worrell %% @doc Ringbuffer implements a length limited queue. In systems this is %% often implemented as a ring, or cylic, buffer. Where the writer can %% push the reader ahead if the buffer is full. @@ -26,8 +26,9 @@ %%
  • As many queues as needed.
  • %% %% +%% @end -%% Copyright 2021 Marc Worrell +%% Copyright 2021-2025 Marc Worrell %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -46,6 +47,7 @@ -export([ start/0, new/2, + whereis/1, delete/1, write/2, read/1 @@ -63,21 +65,40 @@ start() -> %% @doc Create a new named buffer of Size entries. The name must be unique for all ets tables. %% The name must be an atom, and is used for the name of the ets table. A process owning the %% ets table and synchronizing the readers is added to ringbuffer_sup. --spec new( Name :: atom(), Size :: pos_integer() ) -> {ok, pid()} | {error, term()}. -new( Name, Size ) -> - ringbuffer_sup:start_child(Name, Size). +-spec new( Name, Size ) -> {ok, pid()} | {error, Reason} when + Name :: atom(), + Size :: pos_integer(), + Reason :: {already_started, pid()} | term(). +new(Name, Size) -> + case ?MODULE:whereis(Name) of + undefined -> + ringbuffer_sup:start_child(Name, Size); + Pid -> + {error, {already_started, Pid}} + end. +%% @doc Find the ringbuffer with a certain name, return the pid if found, otherwise undefined. +-spec whereis(Name) -> pid() | undefined when + Name :: atom(). +whereis(Name) -> + case ringbuffer_process:process_pid(Name) of + {ok, Pid} -> Pid; + {error, _} -> undefined + end. %% @doc Delete a named ringbuffer, all queued data is destroyed. The ets table and the %% synchronizing process are deleted. --spec delete( Name :: atom() ) -> ok | {error, not_found}. +-spec delete(Name) -> ok | {error, not_found} when + Name :: atom(). delete(Name) -> ringbuffer_sup:stop_child(Name). %% @doc Add an entry to the named ringbuffer. Never fails, if the ringbuffer %% is full then older entries are overwritten. --spec write( Name :: atom(), Payload :: term() ) -> ok. +-spec write(Name, Payload) -> ok when + Name :: atom(), + Payload :: term(). write(Name, Payload) -> ringbuffer_process:write(Name, Payload). @@ -85,7 +106,10 @@ write(Name, Payload) -> %% the payload of the entry read. An entry is skipped if the readers are falling behind the %% writers by more that the size of the buffer. {error, empty} is returned if the %% buffer is empty. --spec read( Name :: atom() ) -> {ok, {non_neg_integer(), term()}} | {error, empty}. +-spec read( Name ) -> {ok, {SkipCount, Payload}} | {error, empty} when + Name :: atom(), + SkipCount :: non_neg_integer(), + Payload :: term(). read(Name) -> ringbuffer_process:read(Name). diff --git a/src/ringbuffer_app.erl b/src/ringbuffer_app.erl index b6806d8..fca63af 100644 --- a/src/ringbuffer_app.erl +++ b/src/ringbuffer_app.erl @@ -1,8 +1,9 @@ %% @author Marc Worrell -%% @copyright 2021 Marc Worrell +%% @copyright 2021-2025 Marc Worrell %% @doc RingBuffer application +%% @end -%% Copyright 2021 Marc Worrell +%% Copyright 2021-2025 Marc Worrell %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/src/ringbuffer_process.erl b/src/ringbuffer_process.erl index 98e80c8..1fee61d 100644 --- a/src/ringbuffer_process.erl +++ b/src/ringbuffer_process.erl @@ -1,8 +1,9 @@ %% @author Marc Worrell -%% @copyright 2021 Marc Worrell +%% @copyright 2021-2025 Marc Worrell %% @doc Process to own the created ets table for the ring buffer. +%% @end -%% Copyright 2021 Marc Worrell +%% Copyright 2021-2025 Marc Worrell %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/src/ringbuffer_sup.erl b/src/ringbuffer_sup.erl index 306b407..8d6676a 100644 --- a/src/ringbuffer_sup.erl +++ b/src/ringbuffer_sup.erl @@ -1,8 +1,9 @@ %% @author Marc Worrell -%% @copyright 2021 Marc Worrell +%% @copyright 2021-2025 Marc Worrell %% @doc Supervisor for the ring buffers processes. +%% @end -%% Copyright 2021 Marc Worrell +%% Copyright 2021-2025 Marc Worrell %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -22,7 +23,7 @@ %% API -export([start_link/0]). --export([start_child/2, stop_child/1]). +-export([start_child/2, find_child/1, stop_child/1]). %% Supervisor callbacks -export([init/1]). @@ -50,11 +51,12 @@ stop_child(Name) -> {error, _} -> {error, not_found} end. +%% @doc Find the Pid of the ringbuffer with a certain name. +-spec find_child( Name :: atom() ) -> {ok, pid()} | {error, not_found}. find_child(Name) -> - try - ringbuffer_process:process_pid(Name) - catch - error:badarg -> {error, not_found} + case ringbuffer_process:process_pid(Name) of + {ok, _} = Ok -> Ok; + {error, badarg} -> {error, not_found} end. %% =================================================================== diff --git a/test/ringbuffer_test.erl b/test/ringbuffer_test.erl index f5b806d..171499d 100644 --- a/test/ringbuffer_test.erl +++ b/test/ringbuffer_test.erl @@ -1,8 +1,9 @@ %% @author Marc Worrell -%% @copyright 2021 Marc Worrell +%% @copyright 2021-2025 Marc Worrell %% @doc Tests for ringbuffer +%% @end -%% Copyright 2021 Marc Worrell +%% Copyright 2021-2025 Marc Worrell %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -26,7 +27,7 @@ all_test_() -> [ fun test_simple/0 , fun test_full/0 , fun test_race/0 - , fun test_busy/0 + , {timeout, 60, fun test_busy/0} ]}. setup() -> @@ -57,6 +58,8 @@ test_full() -> ok = ringbuffer:delete(full), ok. +%% Test with many concurrent writers, all messages should be +%% queued (and no overflow as the buffer is larger). test_race() -> {ok, _} = ringbuffer:new(race, 10000), Self = self(), @@ -79,6 +82,7 @@ test_race() -> ok. +%% Test with many concurrent readers and writers test_busy() -> {ok, _} = ringbuffer:new(busy, 100), NMsgs = 10000, From 81b1a1aaa3ecb5026b98b645db77605fc928c369 Mon Sep 17 00:00:00 2001 From: Marc Worrell Date: Tue, 14 Oct 2025 13:47:13 +0200 Subject: [PATCH 2/2] New doc --- GNUmakefile | 2 +- doc/.build | 29 + doc/404.html | 160 +++++ doc/api-reference.html | 230 +++++++ doc/dist/handlebars.runtime-NWIB6V2M.js | 30 + doc/dist/handlebars.templates-K7URE6B4.js | 224 +++++++ doc/dist/html-PVRIOB7F.js | 56 ++ doc/dist/html-erlang-4IXSOGMD.css | 6 + ...nconsolata-latin-400-normal-RGKDDNDD.woff2 | Bin 0 -> 16244 bytes ...nconsolata-latin-700-normal-DTS2D7TO.woff2 | Bin 0 -> 16368 bytes ...solata-latin-ext-400-normal-K7HVGTP7.woff2 | Bin 0 -> 14772 bytes ...solata-latin-ext-700-normal-4MPBLFZC.woff2 | Bin 0 -> 14908 bytes ...olata-vietnamese-400-normal-IGQPHHJH.woff2 | Bin 0 -> 6836 bytes ...olata-vietnamese-700-normal-LHEGSN35.woff2 | Bin 0 -> 6944 bytes doc/dist/lato-latin-300-normal-YUMVEFOL.woff2 | Bin 0 -> 23236 bytes doc/dist/lato-latin-400-normal-W7754I4D.woff2 | Bin 0 -> 23580 bytes doc/dist/lato-latin-700-normal-2XVSBPG4.woff2 | Bin 0 -> 23040 bytes .../lato-latin-ext-300-normal-VPGGJKJL.woff2 | Bin 0 -> 5624 bytes .../lato-latin-ext-400-normal-N27NCBWW.woff2 | Bin 0 -> 5472 bytes .../lato-latin-ext-700-normal-Q2L5DVMW.woff2 | Bin 0 -> 5368 bytes doc/dist/remixicon-NKANDIL5.woff2 | Bin 0 -> 1956 bytes doc/dist/search_data-3FEDF90C.js | 1 + doc/dist/sidebar_items-C002F7F1.js | 1 + doc/img/logo.png | Bin 9843 -> 0 bytes doc/index.html | 25 +- doc/license.html | 385 +++++++++++ doc/modules-frame.html | 2 +- doc/overview-summary.html | 2 +- doc/readme.html | 252 ++++++++ doc/ringbuffer.epub | Bin 0 -> 23046 bytes doc/ringbuffer.html | 554 +++++++++++++--- doc/ringbuffer_app.html | 298 +++++++-- doc/ringbuffer_process.html | 606 ++++++++++++++---- doc/ringbuffer_sup.html | 421 ++++++++++-- doc/search.html | 158 +++++ doc/style.css | 75 --- doc/stylesheet.css | 55 -- rebar.config | 5 +- 38 files changed, 3122 insertions(+), 455 deletions(-) create mode 100644 doc/.build create mode 100644 doc/404.html create mode 100644 doc/api-reference.html create mode 100644 doc/dist/handlebars.runtime-NWIB6V2M.js create mode 100644 doc/dist/handlebars.templates-K7URE6B4.js create mode 100644 doc/dist/html-PVRIOB7F.js create mode 100644 doc/dist/html-erlang-4IXSOGMD.css create mode 100644 doc/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 create mode 100644 doc/dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 create mode 100644 doc/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 create mode 100644 doc/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 create mode 100644 doc/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 create mode 100644 doc/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 create mode 100644 doc/dist/lato-latin-300-normal-YUMVEFOL.woff2 create mode 100644 doc/dist/lato-latin-400-normal-W7754I4D.woff2 create mode 100644 doc/dist/lato-latin-700-normal-2XVSBPG4.woff2 create mode 100644 doc/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 create mode 100644 doc/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 create mode 100644 doc/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 create mode 100644 doc/dist/remixicon-NKANDIL5.woff2 create mode 100644 doc/dist/search_data-3FEDF90C.js create mode 100644 doc/dist/sidebar_items-C002F7F1.js delete mode 100644 doc/img/logo.png create mode 100644 doc/license.html create mode 100644 doc/readme.html create mode 100644 doc/ringbuffer.epub create mode 100644 doc/search.html delete mode 100644 doc/style.css delete mode 100644 doc/stylesheet.css diff --git a/GNUmakefile b/GNUmakefile index ef0b6de..6410f59 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -41,5 +41,5 @@ test: $(REBAR) ## Doc targets ## edoc: $(REBAR) - $(REBAR) edoc + $(REBAR) ex_doc diff --git a/doc/.build b/doc/.build new file mode 100644 index 0000000..3303377 --- /dev/null +++ b/doc/.build @@ -0,0 +1,29 @@ +404.html +api-reference.html +dist/handlebars.runtime-NWIB6V2M.js +dist/handlebars.templates-K7URE6B4.js +dist/html-PVRIOB7F.js +dist/html-erlang-4IXSOGMD.css +dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 +dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 +dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 +dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 +dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 +dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 +dist/lato-latin-300-normal-YUMVEFOL.woff2 +dist/lato-latin-400-normal-W7754I4D.woff2 +dist/lato-latin-700-normal-2XVSBPG4.woff2 +dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 +dist/lato-latin-ext-400-normal-N27NCBWW.woff2 +dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 +dist/remixicon-NKANDIL5.woff2 +dist/search_data-3FEDF90C.js +dist/sidebar_items-C002F7F1.js +index.html +license.html +readme.html +ringbuffer.html +ringbuffer_app.html +ringbuffer_process.html +ringbuffer_sup.html +search.html diff --git a/doc/404.html b/doc/404.html new file mode 100644 index 0000000..f602822 --- /dev/null +++ b/doc/404.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + 404 — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +

    + Page not found +

    + +

    Sorry, but the page you were trying to get to, does not exist. You +may want to try searching this site using the sidebar + + or using our API Reference page + +to find what you were looking for.

    + +
    +
    +
    + + + diff --git a/doc/api-reference.html b/doc/api-reference.html new file mode 100644 index 0000000..e763d6f --- /dev/null +++ b/doc/api-reference.html @@ -0,0 +1,230 @@ + + + + + + + + + + + API Reference — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + + API Reference ringbuffer v1.2.0+build.18.refca920a0 +

    + + +
    +

    + + + + Modules +

    + +
    +
    +
    + ringbuffer + +
    + +

    Ringbuffer implements a length limited queue. In systems this is often implemented as a ring, or cylic, buffer. Where the writer can push the reader ahead if the buffer is full.

    + +
    +
    + + +

    RingBuffer application

    + +
    +
    + + +

    Process to own the created ets table for the ring buffer.

    + +
    +
    + + +

    Supervisor for the ring buffers processes.

    + +
    + +
    +
    + + +
    + + + +
    +
    +
    + + + diff --git a/doc/dist/handlebars.runtime-NWIB6V2M.js b/doc/dist/handlebars.runtime-NWIB6V2M.js new file mode 100644 index 0000000..117dc6c --- /dev/null +++ b/doc/dist/handlebars.runtime-NWIB6V2M.js @@ -0,0 +1,30 @@ +/**! + + @license + handlebars v4.7.7 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/(function(r,e){typeof exports=="object"&&typeof module=="object"?module.exports=e():typeof define=="function"&&define.amd?define([],e):typeof exports=="object"?exports.Handlebars=e():r.Handlebars=e()})(this,function(){return function(u){var r={};function e(n){if(r[n])return r[n].exports;var t=r[n]={exports:{},id:n,loaded:!1};return u[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}return e.m=u,e.c=r,e.p="",e(0)}([function(u,r,e){"use strict";var n=e(1).default,t=e(2).default;r.__esModule=!0;var f=e(3),a=n(f),i=e(36),l=t(i),h=e(5),v=t(h),P=e(4),H=n(P),C=e(37),E=n(C),I=e(43),o=t(I);function g(){var y=new a.HandlebarsEnvironment;return H.extend(y,a),y.SafeString=l.default,y.Exception=v.default,y.Utils=H,y.escapeExpression=H.escapeExpression,y.VM=E,y.template=function(p){return E.template(p,y)},y}var w=g();w.create=g,o.default(w),w.default=w,r.default=w,u.exports=r.default},function(u,r){"use strict";r.default=function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n},r.__esModule=!0},function(u,r){"use strict";r.default=function(e){return e&&e.__esModule?e:{default:e}},r.__esModule=!0},function(u,r,e){"use strict";var n=e(2).default;r.__esModule=!0,r.HandlebarsEnvironment=g;var t=e(4),f=e(5),a=n(f),i=e(9),l=e(29),h=e(31),v=n(h),P=e(32),H="4.7.7";r.VERSION=H;var C=8;r.COMPILER_REVISION=C;var E=7;r.LAST_COMPATIBLE_COMPILER_REVISION=E;var I={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};r.REVISION_CHANGES=I;var o="[object Object]";function g(y,p,R){this.helpers=y||{},this.partials=p||{},this.decorators=R||{},i.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}g.prototype={constructor:g,logger:v.default,log:v.default.log,registerHelper:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple helpers");t.extend(this.helpers,p)}else this.helpers[p]=R},unregisterHelper:function(p){delete this.helpers[p]},registerPartial:function(p,R){if(t.toString.call(p)===o)t.extend(this.partials,p);else{if(typeof R>"u")throw new a.default('Attempting to register a partial called "'+p+'" as undefined');this.partials[p]=R}},unregisterPartial:function(p){delete this.partials[p]},registerDecorator:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple decorators");t.extend(this.decorators,p)}else this.decorators[p]=R},unregisterDecorator:function(p){delete this.decorators[p]},resetLoggedPropertyAccesses:function(){P.resetLoggedProperties()}};var w=v.default.log;r.log=w,r.createFrame=t.createFrame,r.logger=v.default},function(u,r){"use strict";r.__esModule=!0,r.extend=a,r.indexOf=v,r.escapeExpression=P,r.isEmpty=H,r.createFrame=C,r.blockParams=E,r.appendContextPath=I;var e={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},n=/[&<>"'`=]/g,t=/[&<>"'`=]/;function f(o){return e[o]}function a(o){for(var g=1;g0?(a.ids&&(a.ids=[a.name]),t.helpers.each(f,a)):i(this);if(a.data&&a.ids){var h=n.createFrame(a.data);h.contextPath=n.appendContextPath(a.data.contextPath,a.name),a={data:h}}return l(f,a)})},u.exports=r.default},function(u,r,e){(function(n){"use strict";var t=e(12).default,f=e(2).default;r.__esModule=!0;var a=e(4),i=e(5),l=f(i);r.default=function(h){h.registerHelper("each",function(v,P){if(!P)throw new l.default("Must pass iterator to #each");var H=P.fn,C=P.inverse,E=0,I="",o=void 0,g=void 0;P.data&&P.ids&&(g=a.appendContextPath(P.data.contextPath,P.ids[0])+"."),a.isFunction(v)&&(v=v.call(this)),P.data&&(o=a.createFrame(P.data));function w(b,F,c){o&&(o.key=b,o.index=F,o.first=F===0,o.last=!!c,g&&(o.contextPath=g+b)),I=I+H(v[b],{data:o,blockParams:a.blockParams([v[b],b],[g+b,null])})}if(v&&typeof v=="object")if(a.isArray(v))for(var y=v.length;E=0?a=i:a=parseInt(a,10)}return a},log:function(a){if(a=t.lookupLevel(a),typeof console<"u"&&t.lookupLevel(t.level)<=a){var i=t.methodMap[a];console[i]||(i="log");for(var l=arguments.length,h=Array(l>1?l-1:0),v=1;v=P.LAST_COMPATIBLE_COMPILER_REVISION&&O<=P.COMPILER_REVISION))if(O{(function(){var d=Handlebars.template,y=Handlebars.templates=Handlebars.templates||{};y["autocomplete-suggestions"]=d({1:function(e,l,a,p,u){var o,n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i="function",c=e.escapeExpression,t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return' +
    +`+((o=t(a,"if").call(r,l!=null?t(l,"deprecated"):l,{name:"if",hash:{},fn:e.program(2,u,0),inverse:e.program(4,u,0),data:u,loc:{start:{line:16,column:10},end:{line:20,column:17}}}))!=null?o:"")+` +`+((o=t(a,"each").call(r,l!=null?t(l,"labels"):l,{name:"each",hash:{},fn:e.program(6,u,0),inverse:e.noop,data:u,loc:{start:{line:22,column:10},end:{line:24,column:19}}}))!=null?o:"")+`
    + +
    +
    + +
    +
    + +`+((o=t(a,"if").call(r,l!=null?t(l,"description"):l,{name:"if",hash:{},fn:e.program(8,u,0),inverse:e.noop,data:u,loc:{start:{line:39,column:8},end:{line:43,column:15}}}))!=null?o:"")+`
    +`},2:function(e,l,a,p,u){var o,n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' '+((o=(n=(n=r(a,"title")||(l!=null?r(l,"title"):l))!=null?n:e.hooks.helperMissing,typeof n=="function"?n.call(l??(e.nullContext||{}),{name:"title",hash:{},data:u,loc:{start:{line:17,column:49},end:{line:17,column:60}}}):n))!=null?o:"")+` +`},4:function(e,l,a,p,u){var o,n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' '+((o=(n=(n=r(a,"title")||(l!=null?r(l,"title"):l))!=null?n:e.hooks.helperMissing,typeof n=="function"?n.call(l??(e.nullContext||{}),{name:"title",hash:{},data:u,loc:{start:{line:19,column:46},end:{line:19,column:57}}}):n))!=null?o:"")+` +`},6:function(e,l,a,p,u){return' '+e.escapeExpression(e.lambda(l,l))+` +`},8:function(e,l,a,p,u){var o,n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
    + `+((o=(n=(n=r(a,"description")||(l!=null?r(l,"description"):l))!=null?n:e.hooks.helperMissing,typeof n=="function"?n.call(l??(e.nullContext||{}),{name:"description",hash:{},data:u,loc:{start:{line:41,column:10},end:{line:41,column:27}}}):n))!=null?o:"")+` +
    +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n,r=l??(e.nullContext||{}),s=e.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return`
    +
    +
    +
    + + Autocompletion results for "`+e.escapeExpression((n=(n=s(a,"term")||(l!=null?s(l,"term"):l))!=null?n:e.hooks.helperMissing,typeof n=="function"?n.call(r,{name:"term",hash:{},data:u,loc:{start:{line:6,column:55},end:{line:6,column:63}}}):n))+`" + + + Press RETURN for full-text search, TAB for previews + +
    +
    +`+((o=s(a,"each").call(r,l!=null?s(l,"suggestions"):l,{name:"each",hash:{},fn:e.program(1,u,0),inverse:e.noop,data:u,loc:{start:{line:13,column:6},end:{line:45,column:15}}}))!=null?o:"")+`
    +
    +
    +`},useData:!0}),y["modal-layout"]=d({compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){return` +`},useData:!0}),y["quick-switch-modal-body"]=d({compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){return`
    + + +
    +
    +`},useData:!0}),y["quick-switch-results"]=d({1:function(e,l,a,p,u){var o,n=l??(e.nullContext||{}),r=e.hooks.helperMissing,s="function",i=e.escapeExpression,c=e.lookupProperty||function(t,f){if(Object.prototype.hasOwnProperty.call(t,f))return t[f]};return'
    + `+i((o=(o=c(a,"name")||(l!=null?c(l,"name"):l))!=null?o:r,typeof o===s?o.call(n,{name:"name",hash:{},data:u,loc:{start:{line:3,column:4},end:{line:3,column:12}}}):o))+` +
    +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return(o=n(a,"each").call(l??(e.nullContext||{}),l!=null?n(l,"results"):l,{name:"each",hash:{},fn:e.program(1,u,0),inverse:e.noop,data:u,loc:{start:{line:1,column:0},end:{line:5,column:9}}}))!=null?o:""},useData:!0}),y["search-results"]=d({1:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return" Search results for "+e.escapeExpression((o=(o=n(a,"value")||(l!=null?n(l,"value"):l))!=null?o:e.hooks.helperMissing,typeof o=="function"?o.call(l??(e.nullContext||{}),{name:"value",hash:{},data:u,loc:{start:{line:3,column:27},end:{line:3,column:36}}}):o))+` +`},3:function(e,l,a,p,u){return` Invalid search +`},5:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return(o=n(a,"each").call(l??(e.nullContext||{}),l!=null?n(l,"results"):l,{name:"each",hash:{},fn:e.program(6,u,0),inverse:e.noop,data:u,loc:{start:{line:10,column:2},end:{line:21,column:11}}}))!=null?o:""},6:function(e,l,a,p,u){var o,n=e.lambda,r=e.escapeExpression,s=e.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return`
    +

    + + `+r(n(l!=null?s(l,"title"):l,l))+" ("+r(n(l!=null?s(l,"type"):l,l))+`) + +

    +`+((o=s(a,"each").call(l??(e.nullContext||{}),l!=null?s(l,"excerpts"):l,{name:"each",hash:{},fn:e.program(7,u,0),inverse:e.noop,data:u,loc:{start:{line:17,column:8},end:{line:19,column:17}}}))!=null?o:"")+`
    +`},7:function(e,l,a,p,u){var o;return'

    '+((o=e.lambda(l,l))!=null?o:"")+`

    +`},9:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return((o=(n(a,"isArray")||l&&n(l,"isArray")||e.hooks.helperMissing).call(l??(e.nullContext||{}),l!=null?n(l,"results"):l,{name:"isArray",hash:{},fn:e.program(10,u,0),inverse:e.program(12,u,0),data:u,loc:{start:{line:23,column:2},end:{line:29,column:14}}}))!=null?o:"")+` +

    The search functionality is full-text based. Here are some tips:

    + +
      +
    • Multiple words (such as foo bar) are searched as OR
    • +
    • Use * anywhere (such as fo*) as wildcard
    • +
    • Use + before a word (such as +foo) to make its presence required
    • +
    • Use - before a word (such as -foo) to make its absence required
    • +
    • Use : to search on a particular field (such as field:word). The available fields are title, doc and type
    • +
    • Use WORD^NUMBER (such as foo^2) to boost the given word
    • +
    • Use WORD~NUMBER (such as foo~2) to do a search with edit distance on word
    • +
    + +

    To quickly go to a module, type, or function, use the autocompletion feature in the sidebar search.

    +`},10:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return"

    Sorry, we couldn't find anything for "+e.escapeExpression((o=(o=n(a,"value")||(l!=null?n(l,"value"):l))!=null?o:e.hooks.helperMissing,typeof o=="function"?o.call(l??(e.nullContext||{}),{name:"value",hash:{},data:u,loc:{start:{line:24,column:48},end:{line:24,column:57}}}):o))+`.

    +`},12:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return(o=n(a,"if").call(l??(e.nullContext||{}),l!=null?n(l,"value"):l,{name:"if",hash:{},fn:e.program(13,u,0),inverse:e.program(15,u,0),data:u,loc:{start:{line:25,column:2},end:{line:29,column:2}}}))!=null?o:""},13:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return"

    Invalid search: "+e.escapeExpression((o=(o=n(a,"errorMessage")||(l!=null?n(l,"errorMessage"):l))!=null?o:e.hooks.helperMissing,typeof o=="function"?o.call(l??(e.nullContext||{}),{name:"errorMessage",hash:{},data:u,loc:{start:{line:26,column:23},end:{line:26,column:39}}}):o))+`.

    +`},15:function(e,l,a,p,u){return`

    Please type something into the search bar to perform a search.

    + `},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=l??(e.nullContext||{}),r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`

    +`+((o=r(a,"if").call(n,l!=null?r(l,"value"):l,{name:"if",hash:{},fn:e.program(1,u,0),inverse:e.program(3,u,0),data:u,loc:{start:{line:2,column:2},end:{line:6,column:9}}}))!=null?o:"")+`

    + +`+((o=(r(a,"isNonEmptyArray")||l&&r(l,"isNonEmptyArray")||e.hooks.helperMissing).call(n,l!=null?r(l,"results"):l,{name:"isNonEmptyArray",hash:{},fn:e.program(5,u,0),inverse:e.program(9,u,0),data:u,loc:{start:{line:9,column:0},end:{line:44,column:20}}}))!=null?o:"")},useData:!0}),y["settings-modal-body"]=d({1:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return(o=n(a,"if").call(l??(e.nullContext||{}),l!=null?n(l,"description"):l,{name:"if",hash:{},fn:e.program(2,u,0),inverse:e.noop,data:u,loc:{start:{line:40,column:6},end:{line:53,column:13}}}))!=null?o:""},2:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return`
    +
    + `+e.escapeExpression(e.lambda(l!=null?n(l,"description"):l,l))+` +
    +
    +`+((o=n(a,"if").call(l??(e.nullContext||{}),l!=null?n(l,"displayAs"):l,{name:"if",hash:{},fn:e.program(3,u,0),inverse:e.program(5,u,0),data:u,loc:{start:{line:46,column:12},end:{line:50,column:19}}}))!=null?o:"")+`
    +
    +`},3:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return" "+((o=e.lambda(l!=null?n(l,"displayAs"):l,l))!=null?o:"")+` +`},5:function(e,l,a,p,u){var o=e.lookupProperty||function(n,r){if(Object.prototype.hasOwnProperty.call(n,r))return n[r]};return" "+e.escapeExpression(e.lambda(l!=null?o(l,"key"):l,l))+` +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return`
    +
    + + + + +
    + +
    +`},useData:!0}),y["sidebar-items"]=d({1:function(e,l,a,p,u,o,n){var r,s=l??(e.nullContext||{}),i=e.hooks.helperMissing,c=e.lookupProperty||function(t,f){if(Object.prototype.hasOwnProperty.call(t,f))return t[f]};return((r=(c(a,"groupChanged")||l&&c(l,"groupChanged")||i).call(s,n[1],(r=o[0][0])!=null?c(r,"group"):r,{name:"groupChanged",hash:{},fn:e.program(2,u,0,o,n),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:2,column:2},end:{line:6,column:19}}}))!=null?r:"")+` +`+((r=(c(a,"nestingChanged")||l&&c(l,"nestingChanged")||i).call(s,n[1],o[0][0],{name:"nestingChanged",hash:{},fn:e.program(7,u,0,o,n),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:8,column:2},end:{line:10,column:21}}}))!=null?r:"")+` +
  • + +`+((r=c(a,"if").call(s,(r=o[0][0])!=null?c(r,"nested_title"):r,{name:"if",hash:{},fn:e.program(17,u,0,o,n),inverse:e.program(19,u,0,o,n),data:u,blockParams:o,loc:{start:{line:14,column:6},end:{line:18,column:13}}}))!=null?r:"")+` + +`+((r=(c(a,"isEmptyArray")||l&&c(l,"isEmptyArray")||i).call(s,(r=o[0][0])!=null?c(r,"headers"):r,{name:"isEmptyArray",hash:{},fn:e.program(3,u,0,o,n),inverse:e.program(21,u,0,o,n),data:u,blockParams:o,loc:{start:{line:21,column:4},end:{line:24,column:21}}}))!=null?r:"")+` +`+((r=(c(a,"isArray")||l&&c(l,"isArray")||i).call(s,(r=o[0][0])!=null?c(r,"headers"):r,{name:"isArray",hash:{},fn:e.program(24,u,0,o,n),inverse:e.program(28,u,0,o,n),data:u,blockParams:o,loc:{start:{line:26,column:4},end:{line:74,column:16}}}))!=null?r:"")+`
  • +`},2:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return'
  • + `+e.escapeExpression(e.lambda((n=o[1][0])!=null?r(n,"group"):n,l))+` +
  • +`},3:function(e,l,a,p,u){return""},5:function(e,l,a,p,u){return'translate="no"'},7:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' +`},9:function(e,l,a,p,u){return"current-page open"},11:function(e,l,a,p,u){return"#content"},13:function(e,l,a,p,u){return"page"},15:function(e,l,a,p,u){return"false"},17:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return" "+((n=e.lambda((n=o[1][0])!=null?r(n,"nested_title"):n,l))!=null?n:"")+` +`},19:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return" "+((n=e.lambda((n=o[1][0])!=null?r(n,"title"):n,l))!=null?n:"")+` +`},21:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' +`},22:function(e,l,a,p,u){return"true"},24:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return(n=(r(a,"isNonEmptyArray")||l&&r(l,"isNonEmptyArray")||e.hooks.helperMissing).call(l??(e.nullContext||{}),(n=o[1][0])!=null?r(n,"headers"):n,{name:"isNonEmptyArray",hash:{},fn:e.program(25,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:27,column:6},end:{line:35,column:26}}}))!=null?n:""},25:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return'
      +`+((n=r(a,"each").call(l??(e.nullContext||{}),(n=o[2][0])!=null?r(n,"headers"):n,{name:"each",hash:{},fn:e.program(26,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:29,column:10},end:{line:33,column:19}}}))!=null?n:"")+`
    +`},26:function(e,l,a,p,u,o){var n,r,s=l??(e.nullContext||{}),i=e.hooks.helperMissing,c="function",t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return`
  • + '+((n=(r=(r=t(a,"id")||(l!=null?t(l,"id"):l))!=null?r:i,typeof r===c?r.call(s,{name:"id",hash:{},data:u,blockParams:o,loc:{start:{line:31,column:54},end:{line:31,column:62}}}):r))!=null?n:"")+` +
  • +`},28:function(e,l,a,p,u,o){var n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i=e.lookupProperty||function(c,t){if(Object.prototype.hasOwnProperty.call(c,t))return c[t]};return'
      +`+((n=(i(a,"showSections")||l&&i(l,"showSections")||s).call(r,o[1][0],{name:"showSections",hash:{},fn:e.program(29,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:38,column:8},end:{line:52,column:25}}}))!=null?n:"")+((n=(i(a,"showSummary")||l&&i(l,"showSummary")||s).call(r,o[1][0],{name:"showSummary",hash:{},fn:e.program(34,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:53,column:8},end:{line:57,column:24}}}))!=null?n:"")+((n=i(a,"each").call(r,(n=o[1][0])!=null?i(n,"nodeGroups"):n,{name:"each",hash:{},fn:e.program(36,u,1,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:58,column:8},end:{line:72,column:17}}}))!=null?n:"")+`
    +`},29:function(e,l,a,p,u,o){var n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i=e.lambda,c=e.escapeExpression,t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return'
  • + + Sections + + +
      +`+((n=t(a,"each").call(r,l!=null?t(l,"sections"):l,{name:"each",hash:{},fn:e.program(32,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:45,column:14},end:{line:49,column:23}}}))!=null?n:"")+`
    +
  • +`},30:function(e,l,a,p,u){return"open"},32:function(e,l,a,p,u,o){var n,r,s=e.escapeExpression,i=l??(e.nullContext||{}),c=e.hooks.helperMissing,t="function",f=e.lookupProperty||function(m,v){if(Object.prototype.hasOwnProperty.call(m,v))return m[v]};return`
  • + '+((n=(r=(r=f(a,"id")||(l!=null?f(l,"id"):l))!=null?r:c,typeof r===t?r.call(i,{name:"id",hash:{},data:u,blockParams:o,loc:{start:{line:47,column:56},end:{line:47,column:64}}}):r))!=null?n:"")+` +
  • +`},34:function(e,l,a,p,u,o){var n,r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
  • + Summary +
  • +`},36:function(e,l,a,p,u,o){var n,r=e.lambda,s=e.escapeExpression,i=e.lookupProperty||function(c,t){if(Object.prototype.hasOwnProperty.call(c,t))return c[t]};return`
  • + + `+s(r((n=o[0][0])!=null?i(n,"name"):n,l))+` + + +
      +`+((n=i(a,"each").call(l??(e.nullContext||{}),(n=o[0][0])!=null?i(n,"nodes"):n,{name:"each",hash:{},fn:e.program(37,u,0,o),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:65,column:14},end:{line:69,column:23}}}))!=null?n:"")+`
    +
  • +`},37:function(e,l,a,p,u,o){var n,r,s=e.escapeExpression,i=l??(e.nullContext||{}),c=e.hooks.helperMissing,t="function",f=e.lookupProperty||function(m,v){if(Object.prototype.hasOwnProperty.call(m,v))return m[v]};return`
  • + '+s((r=(r=f(a,"id")||(l!=null?f(l,"id"):l))!=null?r:c,typeof r===t?r.call(i,{name:"id",hash:{},data:u,blockParams:o,loc:{start:{line:67,column:89},end:{line:67,column:95}}}):r))+` +
  • +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u,o,n){var r,s=e.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return(r=s(a,"each").call(l??(e.nullContext||{}),l!=null?s(l,"nodes"):l,{name:"each",hash:{},fn:e.program(1,u,2,o,n),inverse:e.noop,data:u,blockParams:o,loc:{start:{line:1,column:0},end:{line:76,column:9}}}))!=null?r:""},useData:!0,useDepths:!0,useBlockParams:!0}),y.tabset=d({1:function(e,l,a,p,u){var o,n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i="function",c=e.escapeExpression,t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return' +`},2:function(e,l,a,p,u){return"-1"},4:function(e,l,a,p,u){return"0"},6:function(e,l,a,p,u){return"false"},8:function(e,l,a,p,u){return"true"},10:function(e,l,a,p,u){var o,n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i="function",c=e.escapeExpression,t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return'
    +`+((o=t(a,"each").call(r,l!=null?t(l,"content"):l,{name:"each",hash:{},fn:e.program(13,u,0),inverse:e.noop,data:u,loc:{start:{line:16,column:4},end:{line:18,column:13}}}))!=null?o:"")+`
    +`},11:function(e,l,a,p,u){return"hidden"},13:function(e,l,a,p,u){var o;return" "+((o=e.lambda(l,l))!=null?o:"")+` +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=l??(e.nullContext||{}),r=e.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
    +`+((o=r(a,"each").call(n,l!=null?r(l,"tabs"):l,{name:"each",hash:{},fn:e.program(1,u,0),inverse:e.noop,data:u,loc:{start:{line:2,column:2},end:{line:9,column:11}}}))!=null?o:"")+`
    + +`+((o=r(a,"each").call(n,l!=null?r(l,"tabs"):l,{name:"each",hash:{},fn:e.program(10,u,0),inverse:e.noop,data:u,loc:{start:{line:12,column:0},end:{line:20,column:9}}}))!=null?o:"")},useData:!0}),y["tooltip-body"]=d({1:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return`
    + `+e.escapeExpression(e.lambda((o=l!=null?n(l,"hint"):l)!=null?n(o,"description"):o,l))+` +
    +`},3:function(e,l,a,p,u){var o,n=e.lambda,r=e.escapeExpression,s=e.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return`
    +

    + `+r(n((o=l!=null?s(l,"hint"):l)!=null?s(o,"title"):o,l))+` +
    `+r(n((o=l!=null?s(l,"hint"):l)!=null?s(o,"version"):o,l))+`
    +

    +
    +`+((o=s(a,"if").call(l??(e.nullContext||{}),(o=l!=null?s(l,"hint"):l)!=null?s(o,"description"):o,{name:"if",hash:{},fn:e.program(4,u,0),inverse:e.noop,data:u,loc:{start:{line:12,column:2},end:{line:16,column:9}}}))!=null?o:"")},4:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return`
    + `+((o=e.lambda((o=l!=null?n(l,"hint"):l)!=null?n(o,"description"):o,l))!=null?o:"")+` +
    +`},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return(o=n(a,"if").call(l??(e.nullContext||{}),l!=null?n(l,"isPlain"):l,{name:"if",hash:{},fn:e.program(1,u,0),inverse:e.program(3,u,0),data:u,loc:{start:{line:1,column:0},end:{line:17,column:7}}}))!=null?o:""},useData:!0}),y["tooltip-layout"]=d({compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){return`
    +
    +
    +`},useData:!0}),y["versions-dropdown"]=d({1:function(e,l,a,p,u){var o,n,r=l??(e.nullContext||{}),s=e.hooks.helperMissing,i="function",c=e.escapeExpression,t=e.lookupProperty||function(f,m){if(Object.prototype.hasOwnProperty.call(f,m))return f[m]};return' +`},2:function(e,l,a,p,u){return" selected disabled"},compiler:[8,">= 4.3.0"],main:function(e,l,a,p,u){var o,n=e.lookupProperty||function(r,s){if(Object.prototype.hasOwnProperty.call(r,s))return r[s]};return`
    + +
    +`},useData:!0})})();})(); diff --git a/doc/dist/html-PVRIOB7F.js b/doc/dist/html-PVRIOB7F.js new file mode 100644 index 0000000..178fef2 --- /dev/null +++ b/doc/dist/html-PVRIOB7F.js @@ -0,0 +1,56 @@ +(()=>{var ri=Object.create;var pt=Object.defineProperty;var si=Object.getOwnPropertyDescriptor;var oi=Object.getOwnPropertyNames;var ai=Object.getPrototypeOf,ci=Object.prototype.hasOwnProperty;var ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var li=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of oi(t))!ci.call(e,r)&&r!==n&&pt(e,r,{get:()=>t[r],enumerable:!(i=si(t,r))||i.enumerable});return e};var mt=(e,t,n)=>(n=e!=null?ri(ai(e)):{},li(t||!e||!e.__esModule?pt(n,"default",{value:e,enumerable:!0}):n,e));var At=ht((uo,Ct)=>{var It="Expected a function",_t=NaN,Ii="[object Symbol]",Ci=/^\s+|\s+$/g,Ai=/^[-+]0x[0-9a-f]+$/i,Pi=/^0b[01]+$/i,Ri=/^0o[0-7]+$/i,Ni=parseInt,Qi=typeof global=="object"&&global&&global.Object===Object&&global,Hi=typeof self=="object"&&self&&self.Object===Object&&self,Fi=Qi||Hi||Function("return this")(),Di=Object.prototype,Mi=Di.toString,Bi=Math.max,zi=Math.min,Fe=function(){return Fi.Date.now()};function $i(e,t,n){var i,r,s,o,a,l,u=0,f=!1,y=!1,g=!0;if(typeof e!="function")throw new TypeError(It);t=Ot(t)||0,ve(n)&&(f=!!n.leading,y="maxWait"in n,s=y?Bi(Ot(n.maxWait)||0,t):s,g="trailing"in n?!!n.trailing:g);function L(S){var C=i,D=r;return i=r=void 0,u=S,o=e.apply(D,C),o}function b(S){return u=S,a=setTimeout(h,t),f?L(S):o}function T(S){var C=S-l,D=S-u,q=t-C;return y?zi(q,s-D):q}function m(S){var C=S-l,D=S-u;return l===void 0||C>=t||C<0||y&&D>=s}function h(){var S=Fe();if(m(S))return k(S);a=setTimeout(h,T(S))}function k(S){return a=void 0,g&&i?L(S):(i=r=void 0,o)}function w(){a!==void 0&&clearTimeout(a),u=0,i=l=r=a=void 0}function Q(){return a===void 0?o:k(Fe())}function F(){var S=Fe(),C=m(S);if(i=arguments,r=this,l=S,C){if(a===void 0)return b(l);if(y)return a=setTimeout(h,t),L(l)}return a===void 0&&(a=setTimeout(h,t)),o}return F.cancel=w,F.flush=Q,F}function Vi(e,t,n){var i=!0,r=!0;if(typeof e!="function")throw new TypeError(It);return ve(n)&&(i="leading"in n?!!n.leading:i,r="trailing"in n?!!n.trailing:r),$i(e,t,{leading:i,maxWait:t,trailing:r})}function ve(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function qi(e){return!!e&&typeof e=="object"}function ji(e){return typeof e=="symbol"||qi(e)&&Mi.call(e)==Ii}function Ot(e){if(typeof e=="number")return e;if(ji(e))return _t;if(ve(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ve(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(Ci,"");var n=Pi.test(e);return n||Ri.test(e)?Ni(e.slice(2),n?2:8):Ai.test(e)?_t:+e}Ct.exports=Vi});var mn=ht((pn,hn)=>{(function(){var e=function(t){var n=new e.Builder;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),n.searchPipeline.add(e.stemmer),t.call(n,n),n.build()};e.version="2.3.9";e.utils={},e.utils.warn=function(t){return function(n){t.console&&console.warn&&console.warn(n)}}(this),e.utils.asString=function(t){return t==null?"":t.toString()},e.utils.clone=function(t){if(t==null)return t;for(var n=Object.create(null),i=Object.keys(t),r=0;r0){var f=e.utils.clone(n)||{};f.position=[a,u],f.index=s.length,s.push(new e.Token(i.slice(a,o),f))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/;e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,n){n in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+n),t.label=n,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var n=t.label&&t.label in this.registeredFunctions;n||e.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,t)},e.Pipeline.load=function(t){var n=new e.Pipeline;return t.forEach(function(i){var r=e.Pipeline.registeredFunctions[i];if(r)n.add(r);else throw new Error("Cannot load unregistered function: "+i)}),n},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(n){e.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},e.Pipeline.prototype.after=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i=i+1,this._stack.splice(i,0,n)},e.Pipeline.prototype.before=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},e.Pipeline.prototype.remove=function(t){var n=this._stack.indexOf(t);n!=-1&&this._stack.splice(n,1)},e.Pipeline.prototype.run=function(t){for(var n=this._stack.length,i=0;i1&&(ot&&(i=s),o!=t);)r=i-n,s=n+Math.floor(r/2),o=this.elements[s*2];if(o==t||o>t)return s*2;if(ol?f+=2:a==l&&(n+=i[u+1]*r[f+1],u+=2,f+=2);return n},e.Vector.prototype.similarity=function(t){return this.dot(t)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var t=new Array(this.elements.length/2),n=1,i=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new e.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),r.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),r.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&r.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),r.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var f=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new e.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),r.push({node:g,editsRemaining:s.editsRemaining-1,str:f+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var n=new e.TokenSet,i=n,r=0,s=t.length;r=t;n--){var i=this.uncheckedNodes[n],r=i.child.toString();r in this.minimizedNodes?i.parent.edges[i.char]=this.minimizedNodes[r]:(i.child._str=r,this.minimizedNodes[r]=i.child),this.uncheckedNodes.pop()}};e.Index=function(t){this.invertedIndex=t.invertedIndex,this.fieldVectors=t.fieldVectors,this.tokenSet=t.tokenSet,this.fields=t.fields,this.pipeline=t.pipeline},e.Index.prototype.search=function(t){return this.query(function(n){var i=new e.QueryParser(t,n);i.parse()})},e.Index.prototype.query=function(t){for(var n=new e.Query(this.fields),i=Object.create(null),r=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=t},e.Builder.prototype.k1=function(t){this._k1=t},e.Builder.prototype.add=function(t,n){var i=t[this._ref],r=Object.keys(this._fields);this._documents[i]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,n;do t=this.next(),n=t.charCodeAt(0);while(n>47&&n<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var n=t.next();if(n==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){t.escapeCharacter();continue}if(n==":")return e.QueryLexer.lexField;if(n=="~")return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if(n=="^")return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if(n=="+"&&t.width()===1||n=="-"&&t.width()===1)return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(n.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}},e.QueryParser=function(t,n){this.lexer=new e.QueryLexer(t),this.query=n,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var t=this.peekLexeme();return this.lexemeIdx+=1,t},e.QueryParser.prototype.nextClause=function(){var t=this.currentClause;this.query.clause(t),this.currentClause={}},e.QueryParser.parseClause=function(t){var n=t.peekLexeme();if(n!=null)switch(n.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(i+=" with value '"+n.str+"'"),new e.QueryParseError(i,n.start,n.end)}},e.QueryParser.parsePresence=function(t){var n=t.consumeLexeme();if(n!=null){switch(n.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+n.str+"'";throw new e.QueryParseError(i,n.start,n.end)}var r=t.peekLexeme();if(r==null){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,n.start,n.end)}switch(r.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+r.type+"'";throw new e.QueryParseError(i,r.start,r.end)}}},e.QueryParser.parseField=function(t){var n=t.consumeLexeme();if(n!=null){if(t.query.allFields.indexOf(n.str)==-1){var i=t.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),r="unrecognised field '"+n.str+"', possible fields: "+i;throw new e.QueryParseError(r,n.start,n.end)}t.currentClause.fields=[n.str];var s=t.peekLexeme();if(s==null){var r="expecting term, found nothing";throw new e.QueryParseError(r,n.start,n.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var r="expecting term, found '"+s.type+"'";throw new e.QueryParseError(r,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var n=t.consumeLexeme();if(n!=null){t.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(i==null){t.nextClause();return}switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(r,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var n=t.consumeLexeme();if(n!=null){var i=parseInt(n.str,10);if(isNaN(i)){var r="edit distance must be numeric";throw new e.QueryParseError(r,n.start,n.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(s==null){t.nextClause();return}switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(r,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var n=t.consumeLexeme();if(n!=null){var i=parseInt(n.str,10);if(isNaN(i)){var r="boost must be numeric";throw new e.QueryParseError(r,n.start,n.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(s==null){t.nextClause();return}switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(r,s.start,s.end)}}},function(t,n){typeof define=="function"&&define.amd?define(n):typeof pn=="object"?hn.exports=n():t.lunr=n()}(this,function(){return e})})()});Handlebars.registerHelper("groupChanged",function(e,t,n){let i=t||"";if(e.group!==i)return delete e.nestedContext,e.group=i,n.fn(this)});Handlebars.registerHelper("nestingChanged",function(e,t,n){if(t.nested_context&&t.nested_context!==e.nestedContext){if(e.nestedContext=t.nested_context,e.lastModuleSeenInGroup!==t.nested_context)return n.fn(this)}else e.lastModuleSeenInGroup=t.title});Handlebars.registerHelper("showSections",function(e,t){if(e.sections.length>0)return t.fn(this)});Handlebars.registerHelper("showSummary",function(e,t){if(e.nodeGroups)return t.fn(this)});Handlebars.registerHelper("isArray",function(e,t){return Array.isArray(e)?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isNonEmptyArray",function(e,t){return Array.isArray(e)&&e.length>0?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isEmptyArray",function(e,t){return Array.isArray(e)&&e.length===0?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isLocal",function(e,t){let n=window.location.pathname.split("/").pop();return n===e+".html"||n===e?t.fn(this):t.inverse(this)});var c=document.querySelector.bind(document),_=document.querySelectorAll.bind(document);function gt(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function me(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function $(){return document.body.dataset.type}function yt(e,t){if(e){for(let n of e){let i=n.nodeGroups&&n.nodeGroups.find(r=>r.nodes.some(s=>s.anchor===t));if(i)return i.key}return null}}function ge(e,t=!1){if(!e)return t?document.getElementById("top-content"):null;let n=document.getElementById(e);return n?n.matches(".detail")?n:["h1","h2","h3","h4","h5","h6"].includes(n.tagName.toLowerCase())?ui(n):null:null}function ui(e){let t=[e],n=e.nextElementSibling,i=e.tagName.toLowerCase();for(;n;){let s=n.tagName.toLowerCase();["h1","h2","h3","h4","h5","h6"].includes(s)&&s<=i?n=null:(t.push(n),n=n.nextElementSibling)}let r=document.createElement("div");return r.append(...t),r}function te(){return window.location.hash.replace(/^#/,"")}function vt(e){return new URLSearchParams(window.location.search).get(e)}function bt(e){return fetch(e).then(t=>t.ok).catch(()=>!1)}function St(e){document.readyState!=="loading"?e():document.addEventListener("DOMContentLoaded",e)}function ne(e){return!e||e.trim()===""}function xt(e,t){let n;return function(...r){clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)}}function ye(){return document.head.querySelector("meta[name=project][content]").content}function ie(){return/(Macintosh|iPhone|iPad|iPod)/.test(window.navigator.userAgent)}var di="content",fi="tabs-open",pi="tabs-close",hi="H3",mi="tabset";function Lt(){gi().map(yi).forEach(n=>Si(n))}function gi(){let e=document.createNodeIterator(document.getElementById(di),NodeFilter.SHOW_COMMENT,{acceptNode(i){return i.nodeValue.trim()===fi?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),t=[],n;for(;n=e.nextNode();)t.push(n);return t}function yi(e,t,n){let i=[],r=[],s={label:"",content:[]};for(;e=e.nextSibling;){if(vi(e)){Et(s,r,t);break}i.push(e),e.nodeName===hi?(Et(s,r,t),s.label=e.innerText,s.content=[]):s.content.push(e.outerHTML)}let o=document.createElement("div");return o.className=mi,bi(i,o),o.innerHTML=Handlebars.templates.tabset({tabs:r}),o}function vi(e){return e.nodeName==="#comment"&&e.nodeValue.trim()===pi}function Et(e,t,n){if(e.label===""&&!e.content.length)return!1;let i=e.label,r=e.content;t.push({label:i,content:r,setIndex:n})}function bi(e,t){if(!e||!e.length)return!1;e[0].parentNode.insertBefore(t,e[0]),e.forEach(n=>t.appendChild(n))}function Si(e){let t={tabs:e.querySelectorAll(':scope [role="tab"]'),panels:e.querySelectorAll(':scope [role="tabpanel"]'),activeIndex:0};t.tabs.forEach((n,i)=>{n.addEventListener("click",r=>{G(i,t)}),n.addEventListener("keydown",r=>{let s=t.tabs.length-1;r.code==="ArrowLeft"?(r.preventDefault(),t.activeIndex===0?G(s,t):G(t.activeIndex-1,t)):r.code==="ArrowRight"?(r.preventDefault(),t.activeIndex===s?G(0,t):G(t.activeIndex+1,t)):r.code==="Home"?(r.preventDefault(),G(0,t)):r.code==="End"&&(r.preventDefault(),G(s,t))})})}function G(e,t){t.tabs[t.activeIndex].setAttribute("aria-selected","false"),t.tabs[t.activeIndex].tabIndex=-1,t.tabs[e].setAttribute("aria-selected","true"),t.tabs[e].tabIndex=0,t.tabs[e].focus(),t.panels[t.activeIndex].setAttribute("hidden",""),t.panels[t.activeIndex].tabIndex=-1,t.panels[e].removeAttribute("hidden"),t.panels[e].tabIndex=0,t.activeIndex=e}var Tt="ex_doc:settings",xi={tooltips:!0,theme:null,livebookUrl:null},He=class{constructor(){this._subscribers=[],this._settings=xi,this._loadSettings()}get(){return this._settings}update(t){let n=this._settings;this._settings={...this._settings,...t},this._subscribers.forEach(i=>i(this._settings,n)),this._storeSettings()}getAndSubscribe(t){this._subscribers.push(t),t(this._settings)}_loadSettings(){try{let t=localStorage.getItem(Tt);if(t){let n=JSON.parse(t);this._settings={...this._settings,...n}}this._loadSettingsLegacy()}catch(t){console.error(`Failed to load settings: ${t}`)}}_storeSettings(){try{this._storeSettingsLegacy(),localStorage.setItem(Tt,JSON.stringify(this._settings))}catch(t){console.error(`Failed to persist settings: ${t}`)}}_loadSettingsLegacy(){localStorage.getItem("tooltipsDisabled")!==null&&(this._settings={...this._settings,tooltips:!1}),localStorage.getItem("night-mode")==="true"&&(this._settings={...this._settings,nightMode:!0}),this._settings.nightMode===!0&&(this._settings={...this._settings,theme:"dark"})}_storeSettingsLegacy(){this._settings.tooltips?localStorage.removeItem("tooltipsDisabled"):localStorage.setItem("tooltipsDisabled","true"),this._settings.nightMode!==null?localStorage.setItem("night-mode",this._settings.nightMode===!0?"true":"false"):localStorage.removeItem("night-mode"),this._settings.theme!==null?(localStorage.setItem("night-mode",this._settings.theme==="dark"?"true":"false"),this._settings.nightMode=this._settings.theme==="dark"):(delete this._settings.nightMode,localStorage.removeItem("night-mode"))}},O=new He;var Ei=".content",wt=".content-inner",Li=".livebook-badge";function kt(e){e||wi(),ki(),Ti()}function Ti(){c(Ei).querySelectorAll("a").forEach(e=>{e.querySelector("code, img")&&e.classList.add("no-underline")})}function wi(){c(wt).setAttribute("tabindex",-1),c(wt).focus()}function ki(){let t=window.location.pathname.replace(/(\.html)?$/,".livemd"),n=new URL(t,window.location.href).toString();O.getAndSubscribe(i=>{let r=i.livebookUrl?Oi(i.livebookUrl,n):_i(n);for(let s of _(Li))s.href=r})}function _i(e){return`https://livebook.dev/run?url=${encodeURIComponent(e)}`}function Oi(e,t){return`${e}/import?url=${encodeURIComponent(t)}`}var Rt=mt(At());var Ui=768,De=300,re=".sidebar-toggle",Wi=".content",M={CLOSED:"closed",OPEN:"open",NO_PREF:"no_pref"},N={opened:"sidebar-opened",openingStart:"sidebar-opening-start",opening:"sidebar-opening",closed:"sidebar-closed",closingStart:"sidebar-closing-start",closing:"sidebar-closing"},Gi=Object.values(N),A={togglingTimeout:null,lastWindowWidth:window.innerWidth,sidebarPreference:M.NO_PREF};function Nt(){Qt(),Ki(),Yi()}function Ki(){let e=sessionStorage.getItem("sidebar_width");e&&Pt(e),new ResizeObserver(n=>{for(let i of n)Pt(i.contentRect.width)}).observe(document.getElementById("sidebar"))}function Pt(e){sessionStorage.setItem("sidebar_width",e),document.body.style.setProperty("--sidebarWidth",`${e}px`)}function Qt(){sessionStorage.getItem("sidebar_state")==="closed"||Ht()?(V(N.closed),c(re).setAttribute("aria-expanded","false")):(V(N.opened),c(re).setAttribute("aria-expanded","true")),setTimeout(()=>c(re).classList.add("sidebar-toggle--animated"),De)}function Ht(){return window.matchMedia(`screen and (max-width: ${Ui}px)`).matches}function V(...e){document.body.classList.remove(...Gi),document.body.classList.add(...e)}function Yi(){c(re).addEventListener("click",e=>{Me(),Zi()}),c(Wi).addEventListener("click",e=>{Xi()}),window.addEventListener("resize",(0,Rt.default)(e=>{Ji()},100))}function Me(){return Be()?Dt():ze()}function Be(){return document.body.classList.contains(N.opened)||document.body.classList.contains(N.opening)}function Ft(){return document.body.classList.contains(N.opened)}function ze(){return Mt(),sessionStorage.setItem("sidebar_state","opened"),c(re).setAttribute("aria-expanded","true"),new Promise((e,t)=>{requestAnimationFrame(()=>{V(N.openingStart),requestAnimationFrame(()=>{V(N.opening),A.togglingTimeout=setTimeout(()=>{V(N.opened),e()},De)})})})}function Dt(){return Mt(),sessionStorage.setItem("sidebar_state","closed"),c(re).setAttribute("aria-expanded","false"),new Promise((e,t)=>{requestAnimationFrame(()=>{V(N.closingStart),requestAnimationFrame(()=>{V(N.closing),A.togglingTimeout=setTimeout(()=>{V(N.closed),e()},De)})})})}function Mt(){A.togglingTimeout&&(clearTimeout(A.togglingTimeout),A.togglingTimeout=null)}function Ji(){A.lastWindowWidth!==window.innerWidth&&(A.lastWindowWidth=window.innerWidth,(A.sidebarPreference===M.OPEN||A.sidebarPreference===M.NO_PREF)&&Qt())}function Xi(){Ht()&&Be()&&Dt()}function Zi(){switch(A.sidebarPreference){case M.OPEN:A.sidebarPreference=M.CLOSED;break;case M.CLOSED:A.sidebarPreference=M.OPEN;break;case M.NO_PREF:Be()?A.sidebarPreference=M.OPEN:A.sidebarPreference=M.CLOSED}}function le(){return window.sidebarNodes||{}}function Bt(){return window.versionNodes||[]}var $e={search:"search",extras:"extras",modules:"modules",tasks:"tasks"},Ve=[$e.extras,$e.modules,$e.tasks],Se=e=>`#${e}-full-list`;function zt(){Ve.forEach(e=>{er(le(),e)}),be($()),Vt(),$t(),ar()}function er(e,t){let n=e[t]||[],i=c(Se(t));if(!i)return;let r=Handlebars.templates["sidebar-items"]({nodes:n,group:""});i.innerHTML=r,i.querySelectorAll("ul").forEach(s=>{if(s.innerHTML.trim()===""){let o=s.previousElementSibling;o.classList.contains("expand")&&o.classList.remove("expand"),s.remove()}}),i.querySelectorAll("li a + button").forEach(s=>{s.addEventListener("click",o=>{let l=o.target.closest("li");nr(l)})}),i.querySelectorAll("li a").forEach(s=>{s.addEventListener("click",o=>{let l=o.target.closest("li"),u=i.querySelector(".current-section");u&&rr(u),s.matches(".expand")&&(s.pathname===window.location.pathname||s.pathname===window.location.pathname+".html")&&qe(l)})})}function qe(e){e.classList.add("open"),e.querySelector("button[aria-controls]").setAttribute("aria-expanded","true")}function tr(e){e.classList.remove("open"),e.querySelector("button[aria-controls]").setAttribute("aria-expanded","false")}function nr(e){e.classList.contains("open")?tr(e):qe(e)}function ir(e){e.classList.add("current-section"),e.querySelector("a").setAttribute("aria-current","true")}function rr(e){e.classList.remove("current-section"),e.querySelector("a").setAttribute("aria-current","false")}function sr(e){e.classList.add("current-hash"),e.querySelector("a").setAttribute("aria-current","true")}function or(e){e.classList.remove("current-hash"),e.querySelector("a").setAttribute("aria-current","false")}function be(e){Ve.forEach(t=>{let n=c(`#${t}-list-tab-button`);if(n){let i=c(`#${n.getAttribute("aria-controls")}`);t===e?(n.parentElement.classList.add("selected"),n.setAttribute("aria-selected","true"),n.setAttribute("tabindex","0"),i.removeAttribute("hidden")):(n.parentElement.classList.remove("selected"),n.setAttribute("aria-selected","false"),n.setAttribute("tabindex","-1"),i.setAttribute("hidden","hidden"))}})}function $t(){let e=c(Se($()));if(!e)return;let t=e.querySelector("li.current-page");t&&(t.scrollIntoView(),e.scrollTop-=40)}function Vt(){let e=te()||"content",n=le()[$()]||[],i=yt(n,e),r=c(Se($()));if(!r)return;let s=r.querySelector(`li.current-page a.expand[href$="#${i}"]`);s&&qe(s.closest("li"));let o=r.querySelector(`li.current-page a[href$="#${e}"]`);if(o){let a=o.closest("ul");a.classList.contains("deflist")&&ir(a.closest("li")),sr(o.closest("li"))}}function ar(){Ve.forEach(t=>{let n=c(`#${t}-list-tab-button`);n&&n.addEventListener("click",i=>{be(t),$t()})});let e=c("#sidebar-listNav");e.addEventListener("keydown",t=>{if(t.key!=="ArrowRight"&&t.key!=="ArrowLeft")return;let n=Array.from(e.querySelectorAll('[role="tab"]')).map(r=>r.dataset.type),i=e.querySelector('[role="tab"][aria-selected="true"]').dataset.type;if(t.key==="ArrowRight"){let r=n.indexOf(i)+1;r>=n.length&&(r=0);let s=n[r];be(s),c(`#${s}-list-tab-button`).focus()}else if(t.key==="ArrowLeft"){let r=n.indexOf(i)-1;r<0&&(r=n.length-1);let s=n[r];be(s),c(`#${s}-list-tab-button`).focus()}}),window.addEventListener("hashchange",t=>{let n=c(Se($()));if(!n)return;let i=n.querySelector("li.current-page li.current-hash");i&&or(i),Vt()})}var B={module:"module",moduleChild:"module-child",mixTask:"mix-task",extra:"extra",section:"section"};function jt(e,t=8){if(ne(e))return[];let n=le(),i=[...je(n.modules,e,B.module,"module"),...cr(n.modules,e,B.moduleChild),...je(n.tasks,e,B.mixTask,"mix task"),...je(n.extras,e,B.extra,"page"),...Ue(n.modules,e,B.section,"module"),...Ue(n.tasks,e,B.section,"mix task"),...Ue(n.extras,e,B.section,"page")].filter(r=>r!==null);return mr(i).slice(0,t)}function je(e,t,n,i){return e.map(r=>ur(r,t,n,i))}function cr(e,t,n){return e.filter(i=>i.nodeGroups).flatMap(i=>i.nodeGroups.flatMap(({key:r,nodes:s})=>{let o=hr(r);return s.map(a=>dr(a,i.id,t,n,o)||pr(a,i.id,t,n,o))}))}function Ue(e,t,n,i){return e.flatMap(r=>lr(r).map(s=>fr(r,s,t,n,i)))}function lr(e){return(e.sections||[]).concat(e.headers||[])}function ur(e,t,n,i){return Ee(e.title,t)?{link:`${e.id}.html`,title:we(e.title,t),description:null,matchQuality:Le(e.title,t),deprecated:e.deprecated,labels:[i],category:n}:null}function dr(e,t,n,i,r){return Ee(e.id,n)?{link:`${t}.html#${e.anchor}`,title:we(e.id,n),labels:[r],description:t,matchQuality:Le(e.id,n),deprecated:e.deprecated,category:i}:null}function fr(e,t,n,i,r){return Ut(t.id,n)?{link:`${e.id}.html#${t.anchor}`,title:we(t.id,n),description:e.title,matchQuality:Le(t.id,n),labels:[r,"section"],category:i}:null}function pr(e,t,n,i,r){let s=`${t}.${e.id}`,o=`${t}:${e.id}`,a,l;if(Ee(s,n))a=s,l=/\./g;else if(Ee(o,n))a=o,l=/:/g;else return null;let u=n.replace(l," ");return Ut(e.id,u)?{link:`${t}.html#${e.anchor}`,title:we(e.id,u),label:r,description:t,matchQuality:Le(a,n),deprecated:e.deprecated,category:i}:null}function hr(e){switch(e){case"callbacks":return"callback";case"types":return"type";default:return"function"}}function mr(e){return e.slice().sort((t,n)=>t.matchQuality!==n.matchQuality?n.matchQuality-t.matchQuality:qt(t.category)-qt(n.category))}function qt(e){switch(e){case B.module:return 1;case B.moduleChild:return 2;case B.mixTask:return 3;default:return 4}}function Ut(e,t){return Te(t).some(i=>Wt(e,i))}function Ee(e,t){return Te(t).every(i=>Wt(e,i))}function Wt(e,t){return e.toLowerCase().includes(t.toLowerCase())}function Le(e,t){let n=Te(t),r=n.map(o=>o.length).reduce((o,a)=>o+a,0)/e.length,s=gr(e,n[0])?1:0;return r+s}function gr(e,t){return e.toLowerCase().startsWith(t.toLowerCase())}function Te(e){return e.trim().split(/\s+/)}function we(e,t){let n=Te(t).sort((i,r)=>r.length-i.length);return xe(e,n)}function xe(e,t){if(t.length===0)return e;let[n,...i]=t,r=e.match(new RegExp(`(.*)(${gt(n)})(.*)`,"i"));if(r){let[,s,o,a]=r;return xe(s,t)+""+me(o)+""+xe(a,t)}else return xe(e,i)}var ke=null,K=null;function Gt(){K=document.getElementById("toast"),K.addEventListener("click",e=>{clearTimeout(ke),e.target.classList.remove("show")})}function We(e){K&&(clearTimeout(ke),K.innerText=e,K.classList.add("show"),ke=setTimeout(()=>{K.classList.remove("show"),ke=setTimeout(function(){K.innerText=""},1e3)},5e3))}var Kt="dark",Ge=["system","dark","light"];function Yt(e){O.getAndSubscribe(t=>{document.body.classList.toggle(Kt,Xt(e||t.theme))}),vr()}function Jt(){let e=Ge[Ge.indexOf(Ke())+1]||Ge[0];O.update({theme:e}),We(`Set theme to "${e}"`)}function Ke(){return O.get().theme||"system"}function Xt(e){return e==="dark"||yr()&&(e==null||e==="system")}function yr(){return window.matchMedia("(prefers-color-scheme: dark)").matches}function vr(){window.matchMedia("(prefers-color-scheme: dark)").addListener(e=>{let t=O.get().theme,n=Xt(t);(t==null||t==="system")&&(document.body.classList.toggle(Kt,n),We(`Browser changed theme to "${n?"dark":"light"}"`))})}var se=".autocomplete",Oe=".autocomplete-suggestions",_e=".autocomplete-suggestion",I={autocompleteSuggestions:[],previewOpen:!1,selectedIdx:-1};function br(){c(se).classList.add("shown")}function Ye(){c(se).classList.remove("shown")}function Zt(){return c(se).classList.contains("shown")}function Je(e){I.autocompleteSuggestions=jt(e),I.selectedIdx=-1,ne(e)?Ye():(Sr({term:e,suggestions:I.autocompleteSuggestions}),Ie(0),br())}function Sr({term:e,suggestions:t}){let n=Handlebars.templates["autocomplete-suggestions"]({suggestions:t,term:e}),i=c(se);i.innerHTML=n}function en(){return I.selectedIdx===-1?null:I.autocompleteSuggestions[I.selectedIdx]}function Ie(e){nn(xr(e))}function tn(e){if(e.data.type==="preview"){let{contentHeight:t}=e.data,n=c(".autocomplete-preview");n&&(n.style.height=`${t+32}px`,n.classList.remove("loading"))}}function nn(e){I.selectedIdx=e;let t=c(Oe),n=c(`${_e}.selected`),i=c(`${_e}[data-index="${I.selectedIdx}"]`);if(n&&n.classList.remove("selected"),i){if(I.previewOpen){sn(),window.addEventListener("message",tn),t.classList.add("previewing");let r=document.createElement("div");r.classList.add("autocomplete-preview"),r.classList.add("loading");let s=i.href.replace(".html",`.html?preview=true&theme=${Ke()}`),o=document.createElement("iframe");o.setAttribute("src",s),r.appendChild(document.createElement("div")),r.appendChild(document.createElement("span")),r.appendChild(o),i.parentNode.insertBefore(r,i.nextSibling)}i.classList.add("selected"),i.scrollIntoView({block:"nearest"})}else t&&(t.scrollTop=0)}function rn(){I.previewOpen?Ce():Xe()}function Ce(){I.previewOpen=!1;let e=c(Oe);e&&e.classList.remove("previewing"),sn()}function Xe(e){I.previewOpen=!0,e?e=e.closest(_e):e=c(`${_e}[data-index="${I.selectedIdx}"]`),e&&nn(parseInt(e.dataset.index))}function sn(){let e=c(".autocomplete-preview");e&&(e.remove(),window.removeEventListener("message",tn))}function xr(e){let t=I.autocompleteSuggestions.length+1;return(I.selectedIdx+e+1+t)%t-1}var ue="form.search-bar input",Er="form.search-bar .search-close-button";function cn(){Lr(),window.onTogglePreviewClick=function(e,t){e.preventDefault(),e.stopImmediatePropagation(),et(),t?Xe(e.target):Ce()}}function ln(e){let t=c(ue);t.value=e}function et(){let e=c(ue);document.body.classList.add("search-focused"),e.focus()}function Lr(){let e=c(ue);if(document.querySelector('meta[name="exdoc:autocomplete"][content="off"]'))return e.addEventListener("keydown",t=>{t.key==="Enter"&&on(t)}),!0;e.addEventListener("keydown",t=>{let n=ie();t.key==="Escape"?(Ae(),e.blur()):t.key==="Enter"?on(t):t.key==="ArrowUp"||n&&t.ctrlKey&&t.key==="p"?(Ie(-1),t.preventDefault()):t.key==="ArrowDown"||n&&t.ctrlKey&&t.key==="n"?(Ie(1),t.preventDefault()):t.key==="Tab"&&(rn(),t.preventDefault())}),e.addEventListener("input",t=>{Je(t.target.value)}),e.addEventListener("focus",t=>{document.body.classList.contains("search-focused")||(document.body.classList.add("search-focused"),Je(t.target.value))}),e.addEventListener("blur",t=>{let n=t.relatedTarget,i=c(Oe);if(n&&i&&i.contains(n))return setTimeout(()=>{Zt()&&e.focus()},1e3),null;Pe()}),c(se).addEventListener("click",t=>{t.shiftKey||t.ctrlKey?e.focus():(Ae(),Pe())}),c(Er).addEventListener("click",t=>{Ae(),Pe()})}function on(e){let t=c(ue),n=e.shiftKey||e.ctrlKey,i=en();e.preventDefault();let r=n?"_blank":"_self",s=document.createElement("a");if(s.setAttribute("target",r),i)s.setAttribute("href",i.link);else{let o=document.querySelector('meta[name="exdoc:full-text-search-url"]'),a=o?o.getAttribute("content"):"search.html?q=";s.setAttribute("href",`${a}${encodeURIComponent(t.value)}`)}s.click(),n||(Ae(),Pe())}function Ae(){let e=c(ue);e.value=""}function Pe(){Ce(),document.body.classList.remove("search-focused"),Ye()}var Ze=window.scrollY,Tr=70,an=-2;window.addEventListener("scroll",function(){let e=window.scrollY;e===0||Ze-eTr?document.body.classList.remove("scroll-sticky"):Ze-e>Math.abs(an)&&document.body.classList.add("scroll-sticky"),Ze=e<=0?0:e},!1);var un=".sidebar-projectVersion",dn=".sidebar-projectVersionsDropdown";function fn(){let e=Bt();if(e.length>0){let n=c(un).textContent.trim(),i=kr(e,n);wr({nodes:i})}}function wr({nodes:e}){let t=c(un),n=Handlebars.templates["versions-dropdown"]({nodes:e});t.innerHTML=n,c(dn).addEventListener("change",Or)}function kr(e,t){return _r(e,t).map(i=>({...i,isCurrentVersion:i.version===t}))}function _r(e,t){return e.some(i=>i.version===t)?e:[{version:t,url:"#"},...e]}function Or(e){let t=e.target.value,n=window.location.pathname.split("/").pop()+window.location.hash,i=`${t}/${n}`;bt(i).then(r=>{r?window.location.href=i:window.location.href=t})}function tt(){let e=c(dn);e&&(e.focus(),e.addEventListener("keydown",t=>{(t.key==="Escape"||t.key==="v")&&(t.preventDefault(),e.blur())}),navigator.userActivation.isActive&&"showPicker"in HTMLSelectElement.prototype&&e.showPicker())}var H=mt(mn());var Re=80,Ir="#search";function yn(){let e=window.location.pathname;if(e.endsWith("/search.html")||e.endsWith("/search")){let t=vt("q");Cr(t)}}async function Cr(e){if(ne(e))nt({value:e});else{ln(e);let t=await Ar();try{let n=e.replaceAll(/(\B|\\):/g,"\\:"),i=zr(t.search(n));nt({value:e,results:i})}catch(n){nt({value:e,errorMessage:n.message})}}}function nt({value:e,results:t,errorMessage:n}){let i=c(Ir),r=Handlebars.templates["search-results"]({value:e,results:t,errorMessage:n});i.innerHTML=r}async function Ar(){H.default.tokenizer.separator=/\s+/,H.default.QueryLexer.termSeparator=/\s+/,H.default.Pipeline.registerFunction(bn,"docTokenSplitter"),H.default.Pipeline.registerFunction(Sn,"docTrimmer");let e=await Pr();if(e)return e;let t=Dr();return Rr(t),t}async function Pr(){try{let e=sessionStorage.getItem(vn());if(e){let t=await Qr(e);return H.default.Index.load(t)}else return null}catch(e){return console.error("Failed to load index: ",e),null}}async function Rr(e){try{let t=await Nr(e);sessionStorage.setItem(vn(),t)}catch(t){console.error("Failed to save index: ",t)}}async function Nr(e){let t=new Blob([JSON.stringify(e)],{type:"application/json"}).stream().pipeThrough(new window.CompressionStream("gzip")),i=await(await new Response(t).blob()).arrayBuffer();return Hr(i)}async function Qr(e){let t=new Blob([Fr(e)],{type:"application/json"}).stream().pipeThrough(new window.DecompressionStream("gzip")),n=await new Response(t).text();return JSON.parse(n)}function Hr(e){let t="",n=new Uint8Array(e),i=n.byteLength;for(let r=0;r{this.add(e)})})}function Mr(e){e.pipeline.before(H.default.stemmer,bn)}function bn(e){let t=[e],n=/\/\d+$/,i=/\:|\./,r=e.toString();if(r.startsWith("`")&&r.endsWith("`")&&(r=r.slice(1,-1),t.push(e.clone().update(()=>r))),n.test(r)){let o=e.toString().replace(n,"");t.push(e.clone().update(()=>o));let a=o.split(i);if(a.length>1){for(let u of a)t.push(e.clone().update(()=>u));let l=e.toString().split(i);t.push(e.clone().update(()=>l[l.length-1]))}r=a[a.length-1]}else r.startsWith("@")?(r=r.substring(1),t.push(e.clone().update(()=>r))):r.startsWith(":")&&(r=r.substring(1),t.push(e.clone().update(()=>r)));let s=r.split(/\_|\-/);if(s.length>1)for(let o of s)t.push(e.clone().update(()=>o));return t}function Br(e){e.pipeline.before(H.default.stemmer,Sn)}function Sn(e){return e.update(function(t){return t.replace(/^[^@:\w]+/,"").replace(/[^\?\!\w]+$/,"")})}function zr(e){return e.filter(t=>gn(t.ref)).map(t=>{let n=gn(t.ref),i=t.matchData.metadata;return{...n,metadata:i,excerpts:$r(n,i)}})}function gn(e){return searchData.items.find(t=>t.ref===e)||null}function $r(e,t){let{doc:n}=e,r=Object.keys(t).filter(s=>"doc"in t[s]).map(s=>t[s].doc.position.map(([o,a])=>Vr(n,o,a))).reduce((s,o)=>s.concat(o),[]);return r.length===0?[n.slice(0,Re*2)+(Re*20?"...":"",e.slice(i,t),""+me(e.slice(t,t+n))+"",e.slice(t+n,r),r{let n=t.getAttribute("data-group-id");t.addEventListener("mouseenter",i=>{xn(n,!0)}),t.addEventListener("mouseleave",i=>{xn(n,!1)})})}function xn(e,t){_(`[data-group-id="${e}"]`).forEach(i=>{i.classList.toggle(qr,t)})}var J=".modal",Ur=".modal .modal-close",Wr=".modal .modal-title",Gr=".modal .modal-body",Ln='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',z={prevFocus:null,lastFocus:null,ignoreFocusChanges:!1};function Tn(){Kr()}function Kr(){let e=Handlebars.templates["modal-layout"]();document.body.insertAdjacentHTML("beforeend",e),c(J).addEventListener("keydown",t=>{t.key==="Escape"&&Y()}),c(Ur).addEventListener("click",t=>{Y()}),c(J).addEventListener("click",t=>{t.target.classList.contains("modal")&&Y()})}function wn(e){if(z.ignoreFocusChanges)return;let t=c(J);if(t.contains(e.target))z.lastFocus=e.target;else{z.ignoreFocusChanges=!0;let n=Yr(t);z.lastFocus===n?Jr(t).focus():n.focus(),z.ignoreFocusChanges=!1,z.lastFocus=document.activeElement}}function Yr(e){return e.querySelector(Ln)}function Jr(e){let t=e.querySelectorAll(Ln);return t[t.length-1]}function Ne({title:e,body:t}){z.prevFocus=document.activeElement,document.addEventListener("focus",wn,!0),c(Wr).innerHTML=e,c(Gr).innerHTML=t,c(J).classList.add("shown"),c(J).focus()}function Y(){c(J).classList.remove("shown"),document.addEventListener("focus",wn,!0),z.prevFocus&&z.prevFocus.focus(),z.prevFocus=null}function kn(){return c(J).classList.contains("shown")}var Xr="https://hexdocs.pm/%%",Zr="https://www.erlang.org/doc/apps/%%",es="https://hex.pm/api/packages?search=name:%%*",ts=".display-quick-switch",it="#quick-switch-input",On="#quick-switch-results",ns=".quick-switch-result",is=300,rs=9,In=["erts","asn1","common_test","compiler","crypto","debugger","dialyzer","diameter","edoc","eldap","erl_interface","et","eunit","ftp","inets","jinterface","kernel","megaco","mnesia","observer","odbc","os_mon","parsetools","public_key","reltool","runtime_tools","sasl","snmp","ssh","ssl","stdlib","syntax_tools","tftp","tools","wx","xmerl"],ss=["elixir","eex","ex_unit","hex","iex","logger","mix"].concat(In).map(e=>({name:e})),Cn=2,P={autocompleteResults:[],selectedIdx:null};function An(){os()}function os(){_(ts).forEach(e=>{e.addEventListener("click",t=>{st()})})}function as(e){if(e.key==="Enter"){let t=e.target.value;ls(t),e.preventDefault()}else e.key==="ArrowUp"?(_n(-1),e.preventDefault()):e.key==="ArrowDown"&&(_n(1),e.preventDefault())}function cs(e){let t=e.target.value;if(t.lengthn.json()).then(n=>{Array.isArray(n)&&(P.autocompleteResults=ps(e,n),P.selectedIdx=null,c(it).value.length>=Cn&&fs({results:P.autocompleteResults}))})}function fs({results:e}){let t=c(On),n=Handlebars.templates["quick-switch-results"]({results:e});t.innerHTML=n,_(ns).forEach(i=>{i.addEventListener("click",r=>{let s=i.getAttribute("data-index"),o=P.autocompleteResults[s];rt(o.name)})})}function ps(e,t){return ss.concat(t).filter(n=>n.name.toLowerCase().includes(e.toLowerCase())).filter(n=>n.releases===void 0||n.releases[0].has_docs===!0).slice(0,rs)}function _n(e){P.selectedIdx=hs(e);let t=c(".quick-switch-result.selected"),n=c(`.quick-switch-result[data-index="${P.selectedIdx}"]`);t&&t.classList.remove("selected"),n&&n.classList.add("selected")}function hs(e){let t=P.autocompleteResults.length;if(P.selectedIdx===null){if(e>=0)return 0;if(e<0)return t-1}return(P.selectedIdx+e+t)%t}var ms=".display-settings",gs="#settings-modal-content",ot="#modal-settings-tab",at="#modal-keyboard-shortcuts-tab",Rn="#settings-content",Nn="#keyboard-shortcuts-content",ys=[{title:"Settings",id:"modal-settings-tab"},{title:"Keyboard shortcuts",id:"modal-keyboard-shortcuts-tab"}];function Qn(){vs()}function vs(){_(ms).forEach(e=>{e.addEventListener("click",t=>{ct()})})}function Pn(){c(at).classList.remove("active"),c(ot).classList.add("active"),c(Rn).classList.remove("hidden"),c(Nn).classList.add("hidden")}function bs(){c(at).classList.add("active"),c(ot).classList.remove("active"),c(Nn).classList.remove("hidden"),c(Rn).classList.add("hidden")}function ct(){Ne({title:ys.map(({id:s,title:o})=>``).join(""),body:Handlebars.templates["settings-modal-body"]({shortcuts:lt})});let e=c(gs),t=e.querySelector('[name="theme"]'),n=e.querySelector('[name="tooltips"]'),i=e.querySelector('[name="direct_livebook_url"]'),r=e.querySelector('[name="livebook_url"]');O.getAndSubscribe(s=>{t.value=s.theme||"system",n.checked=s.tooltips,s.livebookUrl===null?(i.checked=!1,r.classList.add("hidden"),r.tabIndex=-1):(i.checked=!0,r.classList.remove("hidden"),r.tabIndex=0,r.value=s.livebookUrl)}),t.addEventListener("change",s=>{O.update({theme:s.target.value})}),n.addEventListener("change",s=>{O.update({tooltips:s.target.checked})}),i.addEventListener("change",s=>{let o=s.target.checked?r.value:null;O.update({livebookUrl:o})}),r.addEventListener("input",s=>{O.update({livebookUrl:s.target.value})}),c(ot).addEventListener("click",s=>{Pn()}),c(at).addEventListener("click",s=>{bs()}),Pn()}var Ss="#settings-modal-content",lt=[{key:"c",description:"Toggle sidebar",action:Me},{key:"n",description:"Cycle themes",action:Jt},{key:"s",description:"Focus search bar",displayAs:"/ or s",action:ut},{key:"/",action:ut},{key:"k",hasModifier:!0,action:ut},{key:"v",description:"Open/focus version select",action:Ts},{key:"g",description:"Go to package docs",displayAs:"g",action:st},{key:"?",displayAs:"?",description:"Bring up this modal",action:ws}],dt={shortcutBeingPressed:null};function Hn(){xs()}function xs(){document.addEventListener("keydown",Es),document.addEventListener("keyup",Ls)}function Es(e){if(dt.shortcutBeingPressed||e.target.matches("input, select, textarea"))return;let t=lt.find(n=>n.hasModifier?ie()&&e.metaKey||e.ctrlKey?n.key===e.key:!1:e.ctrlKey||e.metaKey||e.altKey?!1:n.key===e.key);t&&(dt.shortcutBeingPressed=t,e.preventDefault(),t.action(e))}function Ls(e){dt.shortcutBeingPressed=null}function ut(e){Y(),et()}function Ts(){Y(),Ft()?tt():ze().then(tt)}function ws(){ks()?Y():ct()}function ks(){return kn()&&c(Ss)}var X={plain:"plain",function:"function",module:"module"},_s=[{href:"typespecs.html#basic-types",hint:{kind:X.plain,description:"Basic type"}},{href:"typespecs.html#literals",hint:{kind:X.plain,description:"Literal"}},{href:"typespecs.html#built-in-types",hint:{kind:X.plain,description:"Built-in type"}}],Qe={cancelHintFetching:null};function Fn(e){if(Mn(e))return!0;let t=/#.*\//;return e.includes("#")&&!t.test(e)?!1:e.includes(".html")}function Dn(e){let t=Mn(e);return t?Promise.resolve(t):Os(e)}function Mn(e){let t=_s.find(n=>e.includes(n.href));return t?t.hint:null}function Os(e){let t=e.replace(".html",".html?hint=true");return new Promise((n,i)=>{let r=document.createElement("iframe");r.setAttribute("src",t),r.style.display="none";function s(a){let{href:l,hint:u}=a.data;t===l&&(o(),n(u))}Qe.cancelHintFetching=()=>{o(),i(new Error("cancelled"))};function o(){r.remove(),window.removeEventListener("message",s),Qe.cancelHintFetching=null}window.addEventListener("message",s),document.body.appendChild(r)})}function Bn(){Qe.cancelHintFetching&&Qe.cancelHintFetching()}function zn(e){let n=e.querySelector("h1").textContent,i=e.querySelector(".docstring > p"),r=i?i.innerHTML:"";return{kind:X.function,title:n.trim(),description:r.trim()}}function $n(e){let n=e.querySelector("h1 > span").textContent,i=e.querySelector("#moduledoc p"),r=i?i.innerHTML:"";return{kind:X.module,title:n.trim(),description:r.trim()}}var Is=".content a",ft=".tooltip",Cs=".tooltip .tooltip-body",qn="body .content-inner",As="#content",jn="tooltip-shown",de=10,Ps=de*4,Vn={height:450,width:768},Rs=100,oe={currentLinkElement:null,hoverDelayTimeout:null};function Un(){Ns(),Qs()}function Ns(){let e=Handlebars.templates["tooltip-layout"]();c(qn).insertAdjacentHTML("beforeend",e)}function Qs(){_(Is).forEach(e=>{Hs(e)&&(e.addEventListener("mouseenter",t=>{Ds(e)}),e.addEventListener("mouseleave",t=>{$s(e)}))})}function Hs(e){return!(e.getAttribute("data-no-tooltip")!==null||Fs(e.href)||!Fn(e.href))}function Fs(e){let t=e.replace(As,"");return window.location.href.split("#")[0]===t}function Ds(e){Ms()&&(oe.currentLinkElement=e,oe.hoverDelayTimeout=setTimeout(()=>{Dn(e.href).then(t=>{Bs(t),zs()}).catch(()=>{})},Rs))}function Ms(){let e=window.innerWidthe.firstElementChild&&e.firstElementChild.tagName==="CODE").forEach(e=>e.insertAdjacentHTML("beforeend",Js)),Array.from(_(".copy-button")).forEach(e=>{let t;e.addEventListener("click",()=>{let n=e.querySelector("[aria-live]");t&&clearTimeout(t);let i=Array.from(e.parentElement.querySelector("code").childNodes).filter(r=>!(r.tagName==="SPAN"&&r.classList.contains("unselectable"))).map(r=>r.textContent).join("");navigator.clipboard.writeText(i),e.classList.add("clicked"),n.innerHTML="Copied! ✓",t=setTimeout(()=>{e.classList.remove("clicked"),n.innerHTML=""},3e3)})})}function Jn(){let e=ie()?"apple-os":"non-apple-os";document.documentElement.classList.add(e)}function Zn(){let e=ge(te(),!0);e&&Zs(e)}function Zs(e){no(e),eo(),to(),Xn(),window.addEventListener("resize",t=>{Xn()})}function Xn(){let e=document.body.scrollHeight,t=document.getElementById("content").parentElement.offsetHeight,n={type:"preview",maxHeight:e,contentHeight:t};window.parent.postMessage(n,"*")}function eo(){let e=document.getElementsByTagName("a");for(let t of e)t.getAttribute("target")!=="_blank"&&t.setAttribute("target","_parent")}function to(){window.scrollTo(0,0)}function no(e){document.body.classList.add("preview");let t=document.getElementById("content");t.innerHTML=e.innerHTML}St(()=>{let e=new URLSearchParams(window.location.search),t=e.has("preview");Lt(),Yt(e.get("theme")),kt(t),En(),Un(),Kn(),Yn(),Jn(),t?Zn():(fn(),Nt(),zt(),cn(),Tn(),Hn(),An(),Gt(),yn(),Qn())});})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/doc/dist/html-erlang-4IXSOGMD.css b/doc/dist/html-erlang-4IXSOGMD.css new file mode 100644 index 0000000..6339eb0 --- /dev/null +++ b/doc/dist/html-erlang-4IXSOGMD.css @@ -0,0 +1,6 @@ +:root{--main: hsl(0, 100%, 44%);--mainDark: hsl(0, 100%, 34%);--mainDarkest: hsl(0, 100%, 24%);--mainLight: hsl(0, 100%, 64%);--mainLightest: hsl(0, 100%, 74%);--searchBarFocusColor: hsl(0, 100%, 50%);--searchBarBorderColor: rgb(255, 71, 71, .1);--linksNoUnderline: #0969da;--linksNoUnderlineVisited: #085fc4}body.dark{--linksNoUnderline: #71b7ff;--linksNoUnderlineVisited: #65a4e5}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:300;src:url(./lato-latin-ext-300-normal-VPGGJKJL.woff2) format("woff2"),url(./lato-all-300-normal-GIV56FBX.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:300;src:url(./lato-latin-300-normal-YUMVEFOL.woff2) format("woff2"),url(./lato-all-300-normal-GIV56FBX.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-ext-400-normal-N27NCBWW.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-400-normal-W7754I4D.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-ext-700-normal-Q2L5DVMW.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-700-normal-2XVSBPG4.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-vietnamese-400-normal-IGQPHHJH.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-latin-ext-400-normal-K7HVGTP7.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-latin-400-normal-RGKDDNDD.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-vietnamese-700-normal-LHEGSN35.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-latin-ext-700-normal-4MPBLFZC.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-latin-700-normal-DTS2D7TO.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--content-width: 949px;--content-gutter: 60px;--borderRadius: 4px;--navTabBorderWidth: 4px;--defaultFontFamily: -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--sansFontFamily: "Lato", sans-serif;--monoFontFamily: "Inconsolata", Menlo, Courier, monospace;--baseFontSize: 18px;--baseLineHeight: 1.5em;--gray25: hsl(207, 43%, 98%);--gray50: hsl(207, 43%, 96%);--gray100: hsl(212, 33%, 91%);--gray200: hsl(210, 29%, 88%);--gray300: hsl(210, 26%, 84%);--gray400: hsl(210, 21%, 64%);--gray450: hsl(210, 21%, 49%);--gray500: hsl(210, 21%, 34%);--gray600: hsl(210, 27%, 26%);--gray700: hsl(212, 35%, 17%);--gray750: hsl(214, 46%, 14%);--gray800: hsl(216, 52%, 11%);--gray800-opacity-0: hsla(216, 52%, 11%, 0%);--gray850: hsl(216, 63%, 8%);--gray900: hsl(218, 73%, 4%);--gray900-opacity-50: hsla(218, 73%, 4%, 50%);--gray900-opacity-0: hsla(218, 73%, 4%, 0%);--coldGrayFaint: hsl(240, 5%, 97%);--coldGrayLight: hsl(240, 5%, 88%);--coldGray-lightened-10: hsl(240, 5%, 56%);--coldGray: hsl(240, 5%, 46%);--coldGray-opacity-10: hsla(240, 5%, 46%, 10%);--coldGrayDark: hsl(240, 5%, 28%);--coldGrayDim: hsl(240, 5%, 18%);--yellowLight: hsl(60, 100%, 81%);--yellowDark: hsl(60, 100%, 43%, 62%);--yellow: hsl(60, 100%, 43%);--green-lightened-10: hsl(90, 100%, 45%);--green: hsl(90, 100%, 35%);--white: hsl(0, 0%, 100%);--white-opacity-50: hsla(0, 0%, 100%, 50%);--white-opacity-10: hsla(0, 0%, 100%, 10%);--white-opacity-0: hsla(0, 0%, 100%, 0%);--black: hsl(0, 0%, 0%);--black-opacity-10: hsla(0, 0%, 0%, 10%);--black-opacity-50: hsla(0, 0%, 0%, 50%)}@media screen and (max-width: 768px){:root{--content-width: 100%;--content-gutter: 20px}}:root{--background: var(--white);--contrast: var(--black);--textBody: var(--gray800);--textHeaders: var(--gray900);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--coldGrayFaint);--textFooter: var(--gray700);--links: var(--black);--linksVisited: var(--black);--linksDecoration: var(--gray450);--iconAction: var(--coldGray);--iconActionHover: var(--gray800);--blockquoteBackground: var(--coldGrayFaint);--blockquoteBorder: var(--coldGrayLight);--tableHeadBorder: var(--gray100);--tableBodyBorder: var(--gray50);--warningBackground: hsl( 33, 100%, 97%);--warningHeadingBackground: hsl( 33, 87%, 64%);--warningHeading: var(--black);--errorBackground: hsl( 7, 81%, 96%);--errorHeadingBackground: hsl( 6, 80%, 60%);--errorHeading: var(--white);--infoBackground: hsl(206, 91%, 96%);--infoHeadingBackground: hsl(213, 92%, 62%);--infoHeading: var(--white);--neutralBackground: hsl(212, 29%, 92%);--neutralHeadingBackground: hsl(220, 43%, 11%);--neutralHeading: var(--white);--tipBackground: hsl(142, 31%, 93%);--tipHeadingBackground: hsl(134, 39%, 36%);--tipHeading: var(--white);--fnSpecAttr: var(--coldGray);--fnDeprecated: var(--yellowLight);--blink: var(--yellowLight);--codeBackground: var(--gray25);--codeBorder: var(--gray100);--codeScrollThumb: var(--gray400);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray25);--admCodeBorder: var(--gray100);--admCodeColor: var(--black);--admInlineCodeColor: var(--black);--admInlineCodeBackground: var(--gray25);--admInlineCodeBorder: var(--gray100);--tabBackground: var(--white);--tabBorder: var(--gray300);--tabBorderTop: var(--gray100);--tab: var(--gray600);--tabShadow: var(--gray25);--bottomActionsBtnBorder: var(--black-opacity-10);--bottomActionsBtnSubheader: var(--mainDark);--modalBackground: var(--white);--settingsInput: var(--gray500);--settingsInputBackground: var(--white);--settingsInputBorder: var(--gray300);--settingsSectionBorder: var(--gray300);--quickSwitchInput: var(--gray500);--quickSwitchContour: var(--coldGray);--success: var(--green);--sidebarAccentMain: var(--black);--sidebarBackground: var(--gray50);--sidebarHeader: var(--gray100);--sidebarMuted: var(--gray800);--sidebarHover: var(--black);--sidebarScrollbarThumb: var(--coldGrayLight);--sidebarScrollbarTrack: var(--sidebarBackground);--sidebarSubheadings: var(--black);--sidebarItem: var(--black);--sidebarInactiveItemBorder: var(--gray500);--sidebarInactiveItemMarker: var(--gray200);--sidebarLanguageAccentBar: var(--mainDark);--sidebarActiveItem: var(--mainDarkest);--searchBarBorder: var(--gray200);--searchAccentMain: var(--gray600);--searchLanguageAccentBar: var(--main);--searchSearch: var(--white);--autocompleteBorder: rgba(3, 9, 19, .1);--autocompletePreview: var(--gray25);--autocompleteHover: var(--grey50, #F0F5F9);--autocompleteBackground: var(--white);--suggestionBorder: var(--gray200);--autocompleteResults: var(--gray600);--autocompleteResultsBold: var(--gray800);--autocompleteSrollbarThumb: var(--gray200);--autocompleteSrollbarTrack: var(--gray50);--autocompleteLabelBack: var(--gray100);--autocompleteLabelFont: var(--gray600)}body.dark{--background: var(--gray900);--contrast: var(--white);--textBody: var(--gray200);--textHeaders: var(--gray100);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--gray700);--textFooter: var(--gray300);--links: var(--gray100);--linksVisited: var(--gray100);--linksDecoration: var(--gray450);--iconAction: var(--coldGray-lightened-10);--iconActionHover: var(--white);--blockquoteBackground: var(--coldGray-opacity-10);--blockquoteBorder: var(--coldGrayDim);--tableHeadBorder: var(--gray600);--tableBodyBorder: var(--gray700);--warningBackground: hsla( 33, 30%, 60%, 10%);--warningHeadingBackground: hsla( 33, 66%, 35%, 80%);--warningHeading: var(--white);--errorBackground: hsla( 7, 30%, 60%, 10%);--errorHeadingBackground: hsla( 6, 70%, 40%, 80%);--errorHeading: var(--white);--infoBackground: hsla(206, 30%, 60%, 10%);--infoHeadingBackground: hsla(213, 55%, 35%, 80%);--infoHeading: var(--white);--neutralBackground: hsl(210, 30%, 60%, 10%);--neutralHeadingBackground: var(--gray600);--neutralHeading: var(--white);--tipBackground: hsla(142, 30%, 60%, 10%);--tipHeadingBackground: hsla(134, 45%, 30%, 80%);--tipHeading: var(--white);--fnSpecAttr: var(--gray400);--fnDeprecated: var(--yellowDark);--blink: var(--gray600);--codeBackground: var(--gray750);--codeBorder: var(--gray600);--codeScrollThumb: var(--gray500);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray750);--admCodeBorder: var(--gray600);--admCodeColor: var(--gray100);--admInlineCodeColor: var(--gray100);--admInlineCodeBackground: var(--gray750);--admInlineCodeBorder: var(--gray600);--tabBackground: var(--gray900);--tabBorder: var(--gray700);--tabBorderTop: var(--gray700);--tab: var(--white);--tabShadow: var(--black);--bottomActionsBtnBorder: var(--white-opacity-10);--bottomActionsBtnSubheader: var(--mainLight);--modalBackground: var(--gray800);--settingsInput: var(--white);--settingsInputBackground: var(--gray700);--settingsInputBorder: var(--gray700);--settingsSectionBorder: var(--gray700);--quickSwitchInput: var(--gray300);--quickSwitchContour: var(--gray500);--success: var(--green-lightened-10);--sidebarAccentMain: var(--gray50);--sidebarBackground: var(--gray800);--sidebarHeader: var(--gray700);--sidebarMuted: var(--gray300);--sidebarHover: var(--white);--sidebarScrollbarThumb: var(--coldGray);--sidebarScrollbarTrack: var(--sidebarBackground);--sidebarSubheadings: var(--gray400);--sidebarItem: var(--gray200);--sidebarInactiveItemBorder: var(--gray400);--sidebarInactiveItemMarker: var(--gray600);--sidebarLanguageAccentBar: var(--mainLight);--sidebarActiveItem: var(--mainLightest);--searchBarBorder: var(--gray500);--searchAccentMain: var(--gray300);--searchSearch: var(--gray900);--autocompleteBorder: rgba(28,42,60,.75);--autocompletePreview: var(--gray750);--autocompleteHover: var(--gray700);--autocompleteBackground: var(--gray800);--suggestionBorder: var(--gray600);--autocompleteResults: var(--gray200);--autocompleteResultsBold: var(--gray100);--autocompleteSrollbarThumb: var(--gray600);--autocompleteSrollbarTrack: var(--gray850);--autocompleteLabelBack: var(--gray600);--autocompleteLabelFont: rgba(255, 255, 255, .8)}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}@font-face{font-family:remixicon;src:url(./remixicon-NKANDIL5.woff2) format("woff2");font-display:swap}[class^=ri-],[class*=" ri-"],.remix-icon{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--icon-arrow-up-s: "\ea78";--icon-arrow-down-s: "\ea4e";--icon-arrow-right-s: "\ea6e";--icon-add: "\ea13";--icon-subtract: "\f1af";--icon-error-warning: "\eca1";--icon-information: "\ee59";--icon-alert: "\ea21";--icon-double-quotes-l: "\ec51";--icon-link-m: "\eeaf";--icon-close-line: "\eb99";--icon-code-s-slash-line: "\ebad";--icon-menu-line: "\ef3e";--icon-search-2-line: "\f0cd";--icon-settings-3-line: "\f0e6";--icon-printer-line: "\f029"}.ri-lg{font-size:1.3333em;line-height:.75em;vertical-align:-.0667em}.ri-settings-3-line:before{content:var(--icon-settings-3-line)}.ri-add-line:before{content:var(--icon-add)}.ri-subtract-line:before{content:var(--icon-subtract)}.ri-arrow-up-s-line:before{content:var(--icon-arrow-up-s)}.ri-arrow-down-s-line:before{content:var(--icon-arrow-down-s)}.ri-arrow-right-s-line:before{content:var(--icon-arrow-right-s)}.ri-search-2-line:before{content:var(--icon-search-2-line)}.ri-menu-line:before{content:var(--icon-menu-line)}.ri-close-line:before{content:var(--icon-close-line)}.ri-link-m:before{content:var(--icon-link-m)}.ri-code-s-slash-line:before{content:var(--icon-code-s-slash-line)}.ri-error-warning-line:before{content:var(--icon-error-warning)}.ri-information-line:before{content:var(--icon-information)}.ri-alert-line:before{content:var(--icon-alert)}.ri-double-quotes-l:before{content:var(--icon-double-quotes-l)}.ri-printer-line:before{content:var(--icon-printer-line)}html,body{box-sizing:border-box;height:100%;width:100%}body{--sidebarWidth: 300px;--sidebarMinWidth: 300px;--sidebarTransitionDuration: .3s;background-color:var(--background);color:var(--textBody);font-size:16px;font-family:var(--sansFontFamily);line-height:1.6875em}*,*:before,*:after{box-sizing:inherit}.body-wrapper{display:flex;height:100%}.sidebar{display:flex;flex-direction:column;width:var(--sidebarWidth);min-width:var(--sidebarMinWidth);height:100%;position:fixed;top:0;left:0;z-index:100;resize:horizontal}.sidebar-button{padding:26px 12px 18px 19px;position:fixed;z-index:200;top:0;left:0;will-change:transform}.sidebar-toggle--animated.sidebar-button{transition:transform var(--sidebarTransitionDuration) ease-in-out}.content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth);height:100%;position:absolute}.content .content-inner{max-width:var(--content-width);min-height:100%;margin:0 auto;padding:0 var(--content-gutter) 10px}.content-inner:focus{outline:none}body:is(.sidebar-opening,.sidebar-opened) .sidebar-button{transform:translate(calc(var(--sidebarWidth) - 100%))}body.sidebar-opening-start .sidebar{left:calc(-1 * var(--sidebarWidth))}body.sidebar-opening-start .content{width:100%;left:0}body.sidebar-opening .sidebar{left:0;transition:left var(--sidebarTransitionDuration) ease-in-out}body.sidebar-opening .content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth);transition:all var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closing .sidebar-button{transform:translate(0)}body.sidebar-closing .sidebar{left:calc(-1 * var(--sidebarWidth));transition:left var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closing .content{width:100%;left:0;transition:all var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closed .sidebar{left:calc(-1 * var(--sidebarWidth));display:none}body.sidebar-closed .content{width:100%;left:0}@media screen and (max-width: 768px){.content,body.sidebar-opening .content{left:0;width:100%}body.sidebar-closed .sidebar-button{position:absolute}}.sidebar{--sidebarFontSize: 16px;--sidebarLineHeight: 20px;font-family:var(--sansFontFamily);font-size:var(--sidebarFontSize);font-weight:300;line-height:var(--sidebarLineHeight);background-color:var(--sidebarBackground);color:var(--sidebarAccentMain);overflow:hidden;scrollbar-color:var(--sidebarScrollbarThumb) var(--sidebarScrollbarTrack)}.non-apple-os .sidebar{font-weight:400}.sidebar ul{list-style:none}.sidebar ul li{margin:0;padding:0 10px}.sidebar a{color:var(--sidebarAccentMain);text-decoration:none;transition:color .3s ease-in-out}.sidebar a:hover{color:var(--sidebarHover)}.sidebar .sidebar-header{background-color:var(--sidebarHeader);width:100%}.sidebar .sidebar-projectInfo{display:flex;justify-content:start;align-items:center;gap:16px;margin:12px 16px 12px 14px;max-width:235px}.sidebar .sidebar-projectImage{align-self:flex-end}.sidebar .sidebar-projectImage img{display:block;max-width:48px;max-height:48px}.sidebar .sidebar-projectName{font-weight:700;font-size:20px;line-height:24px;color:var(--sidebarAccentMain);margin:0;padding:0;max-width:230px;word-wrap:break-word}.sidebar .sidebar-projectVersion{display:block;position:relative;margin:0;padding:0;font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);color:var(--sidebarMuted)}.sidebar .sidebar-projectVersionsDropdown{cursor:pointer;position:relative;margin:0;padding:0 0 0 12px;border:none;-webkit-appearance:none;appearance:none;background-color:transparent;color:var(--sidebarMuted);z-index:2}.sidebar .sidebar-projectVersionsDropdown option{color:initial}.sidebar .sidebar-projectVersionsDropdownCaret{position:absolute;left:0;top:2px;z-index:1;font-size:8px;color:var(--sidebarMuted)}.sidebar .sidebar-projectVersionsDropdown::-ms-expand{display:none}.sidebar .sidebar-listNav{display:flex;margin:0;padding:4px 4px 0}.sidebar .sidebar-listNav :is(li,li button){text-transform:uppercase;letter-spacing:.02em;font-size:14px;color:var(--sidebarMuted)}.sidebar .sidebar-listNav li{display:inline-block;padding:0}.sidebar .sidebar-listNav li button{background:none;border:0;border-radius:0;-webkit-appearance:none;text-align:inherit;color:inherit;font-weight:inherit;cursor:pointer;display:inline-block;line-height:27px;padding:4px 10px 2px;transition:all .15s}.sidebar .sidebar-listNav li:is(.selected) button{background-color:var(--sidebarBackground);border-top:var(--navTabBorderWidth) solid var(--sidebarLanguageAccentBar)}.sidebar .sidebar-listNav li:not(.selected) button{border-top:var(--navTabBorderWidth) solid var(--sidebarHeader)}.sidebar .sidebar-listNav li:is(:hover):not(.selected) button{background-color:var(--sidebarInactiveItemMarker);border-top:var(--navTabBorderWidth) solid var(--sidebarInactiveItemBorder);color:var(--sidebarAccentMain);transition:all .15s}.sidebar .sidebar-tabpanel{flex:1 1 .01%;overflow-y:auto;overscroll-behavior:contain;position:relative;-webkit-overflow-scrolling:touch;margin-top:12px}.sidebar .full-list{margin:0;padding:0 0 20px;position:relative}.sidebar .full-list :is(li,a){overflow:hidden;text-overflow:ellipsis}.sidebar .full-list li{padding:0;margin-right:30px;line-height:27px;white-space:nowrap}.sidebar .full-list li.docs{margin-right:0}.sidebar .full-list li.open>ul{display:block;margin-left:10px}.sidebar .full-list li a.expand+button.icon-expand{appearance:none;background-color:transparent;border:0;padding:0;cursor:pointer;color:inherit;margin-right:10px;font-size:calc(1.2 * var(--sidebarFontSize));line-height:var(--sidebarLineHeight);position:absolute;display:flex;right:0;transform:translateY(calc(-100% - 4px))}.sidebar .full-list li a+button.icon-expand:after{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sidebar .full-list li a.expand+button.icon-expand:after{content:var(--icon-arrow-down-s)}.sidebar .full-list li.open>a.expand+button.icon-expand:after{content:var(--icon-arrow-up-s)}.sidebar .full-list li.docs>a+button.icon-expand{margin-right:12px;font-size:var(--sidebarFontSize);line-height:var(--sidebarFontSize);transform:translateY(calc(-100% - 5px))}.sidebar .full-list li.docs>a+button.icon-expand:after{content:var(--icon-add)}.sidebar .full-list li.docs.open>a+button.icon-expand:after{content:var(--icon-subtract)}.sidebar .full-list li.nesting-context{font-weight:700;font-size:.9em;line-height:1.8em;color:var(--sidebarSubheadings);margin-top:10px;padding-left:15px}.sidebar .full-list li.group{text-transform:uppercase;font-weight:700;font-size:.8em;margin:1.5em 0 0;line-height:1.8em;color:var(--sidebarSubheadings);padding-left:15px}.sidebar .full-list li a{padding:3px 0 3px 15px;color:var(--sidebarItem)}.sidebar .full-list>li>a{display:block;width:100%;height:27px;line-height:var(--sidebarLineHeight)}.sidebar .full-list li .current-section>a{color:var(--sidebarActiveItem)}.sidebar .full-list li .current-section>a+button.icon-expand{color:var(--sidebarActiveItem)}.sidebar .full-list>li>a:hover{border-left:3px solid var(--sidebarLanguageAccentBar);padding-left:12px}.sidebar .full-list>li.current-page>a{color:var(--sidebarActiveItem);border-left:3px solid var(--sidebarLanguageAccentBar);padding-left:12px}.sidebar .full-list>li.current-page>a:after,.sidebar .full-list>li.current-page{color:var(--sidebarActiveItem)}.sidebar .full-list>li:last-child{margin-bottom:30px}.sidebar .full-list>li.group:first-child{margin-top:0}.sidebar .full-list ul{display:none;margin:10px 0 10px 15px;padding:0}.sidebar .full-list ul li{font-weight:300;line-height:var(--sidebarFontSize);padding:0 8px;margin-right:0;color:var(--sidebarAccentMain)}.non-apple-os .sidebar .full-list ul li{font-weight:400}.sidebar .full-list ul li.current-hash{color:var(--sidebarActiveItem)}.sidebar .full-list ul li.current-hash>a{color:var(--sidebarActiveItem)}.sidebar .full-list ul li.current-hash>a:before,.sidebar .full-list>li>ul>li>a:hover:before{content:"\2022";position:absolute;margin-left:-15px;color:var(--sidebarActiveItem)}.sidebar .full-list ul li a{padding-left:15px;display:block;width:100%;height:24px}.sidebar .full-list ul li ul{display:none;margin:9px 0 9px 20px}.sidebar .full-list ul li ul li{margin-right:0;height:20px;color:var(--sidebarAccentMain)}.sidebar .full-list ul li ul li a{border-left:1px solid var(--sidebarInactiveItemMarker);padding:0 10px;height:20px}.sidebar .full-list ul li ul li.current-hash>a:before{content:none}.sidebar .full-list ul li ul li>a:hover{border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul li ul li.current-hash>a{color:var(--sidebarActiveItem);border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul li ul li.current-hash>a{color:var(--sidebarActiveItem);margin-left:0}.sidebar ::-webkit-scrollbar{width:14px}::-webkit-scrollbar-track{background-color:var(--sidebarBackground)}.sidebar ::-webkit-scrollbar-thumb{background-color:var(--sidebarScrollbarThumb);border-radius:10px;border:3px solid var(--sidebarBackground)}.sidebar-button{cursor:pointer;background-color:transparent;border:none;font-size:var(--sidebarFontSize)}.sidebar-button:hover{color:var(--sidebarHover)}.sidebar-button{color:var(--sidebarAccentMain)}.sidebar-closed .sidebar-button{color:var(--contrast)}@media screen and (max-height: 500px){.sidebar{overflow-y:auto}.sidebar .full-list{overflow:visible}}.top-search{background-color:var(--background);top:0;z-index:99;position:relative;width:100%;padding:10px 0}.search-settings{display:flex;column-gap:12px;align-items:center;width:100%;position:relative}.search-bar{border:1px solid var(--searchBarBorder);border-radius:8px;height:48px;position:relative;width:100%}.top-search .search-bar .search-input{background-color:var(--searchSearch);border:1px solid transparent;border-radius:8px;color:var(--searchAccentMain);position:relative;height:46px;padding:8px 35px 8px 43px;width:100%}.top-search .search-bar .search-input::placeholder{color:var(--searchAccentMain);opacity:.5}.top-search .search-bar .search-input:focus{border:1px solid var(--searchBarFocusColor);border-radius:7px;position:relative;box-shadow:0 4px 20px 0 var(--searchBarBorderColor) inset}.top-search .search-bar .search-label{position:relative}.top-search .search-bar .search-button{font-size:14px;color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;left:11px;opacity:.5;padding:5px 1px 5px 5px;position:absolute;top:60%;transform:translateY(-60%);z-index:99}.top-search .search-bar.selected .search-button,.top-search .search-bar .search-button:hover,.top-search .search-bar .search-button:focus{color:var(--top-searchLanguageAccentBar);opacity:1}.top-search .search-bar .search-close-button{font-size:16px;color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;right:11px;margin:0;opacity:.5;padding:5px 1px 5px 0;position:absolute;transform:scaleY(0);top:calc(50% - 13px);transition:.15s transform ease-out;z-index:99}.top-search .search-bar .search-close-button:hover{opacity:.7}.top-search .search-settings button.icon-settings{display:flex;align-items:center;justify-content:flex-end}.top-search .search-settings .icon-settings{font-size:20px;float:right;color:var(--iconAction);text-decoration:none;border:none;transition:color .3s ease-in-out;background-color:transparent;cursor:pointer;padding:0}.top-search .search-settings .icon-settings:hover{color:var(--iconActionHover)}.top-search .search-settings .icon-settings:visited{color:var(--iconAction)}@media screen and (max-width: 768px){.top-search{padding-left:calc(var(--content-gutter) + 36px);padding-right:var(--content-gutter);margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));width:calc(2 * var(--content-gutter) + 100%)}.search-settings{width:100%;box-sizing:border-box}}body.search-focused .search-bar .search-close-button{transform:scaleY(1);transition:transform .15s ease-out .15s}@media screen and (hover: hover){body.search-focused .top-search{position:sticky!important}body.search-focused.sidebar-closed .sidebar-button{position:fixed!important}}@media screen and (hover: none){body.scroll-sticky .top-search{position:sticky!important}body.scroll-sticky.sidebar-closed .sidebar-button{position:fixed!important}}*:focus,button:focus,[type=button]:focus,[type=reset]:focus,[type=submit]:focus{outline:2px solid var(--main);outline-offset:-2px}*:focus:not(:focus-visible),button:focus:not(:focus-visible),[type=button]:focus:not(:focus-visible),[type=reset]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible){outline:0}input[type=text],input[type=number],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=time],input[type=url],input[type=week],textarea{outline:0}.content-inner{font-family:var(--defaultFontFamily);font-size:1em;line-height:1.6875em;position:relative;background-color:var(--background);color:var(--textBody)}.content-inner :is(h1,h2,h3,h4,h5,h6){font-family:var(--sansFontFamily);font-weight:700;line-height:1.5em;word-wrap:break-word;color:var(--textHeaders)}.content-inner h1{font-size:2em;margin:.5em 0}.content-inner h1.signature{margin:0}.content-inner h1.section-heading{margin:1.5em 0 .5em}.content-inner h1 small{font-weight:300}.content-inner h1 .icon-action{font-size:1.2rem;font-weight:400}.content-inner h2{font-size:1.6em;margin:1em 0 .5em;font-weight:700}.content-inner h3{font-size:1.375em;margin:1em 0 .5em;font-weight:700}.content-inner li+li{margin-top:.25em}.content-inner :is(a,.a-main){color:var(--links);text-decoration:underline;text-decoration-color:var(--linksDecoration);text-decoration-skip-ink:auto}.content-inner :is(a:visited,.a-main:visited){color:var(--linksVisited)}.content-inner .icon-action{float:right;color:var(--iconAction);text-decoration:none;border:none;transition:color .3s ease-in-out;background-color:transparent;cursor:pointer}.content-inner button.icon-action{margin-top:12px}.content-inner .icon-action:hover{color:var(--iconActionHover)}.content-inner .icon-action:visited{color:var(--iconAction)}.content-inner .livebook-badge-container{display:flex}.content-inner a.livebook-badge{display:inline-flex}.content-inner .note{color:var(--iconAction);margin-right:5px;font-size:14px;font-weight:400}.content-inner blockquote,.content-inner section.admonition{border-left:3px solid var(--blockquoteBorder);position:relative;margin:1.5625em 0;padding:0 1.2rem;overflow:auto;background-color:var(--blockquoteBackground);border-radius:var(--borderRadius)}.content-inner blockquote p:last-child,.content-inner section.admonition p:last-child{padding-bottom:1em;margin-bottom:0}.content-inner table{margin:2em 0;border-collapse:collapse}.content-inner th{text-align:left;font-family:var(--sansFontFamily);text-transform:uppercase;font-weight:700;padding-bottom:.5em}.content-inner thead tr{border-bottom:1px solid var(--tableHeadBorder)}.content-inner tbody tr{border-bottom:1px solid var(--tableBodyBorder)}.content-inner tbody tr:last-child{border-bottom:none}.content-inner tr{vertical-align:bottom;height:2.5em}.content-inner :is(td,th){padding:.25em .25em .25em 1em;line-height:2em;vertical-align:top}.content-inner .section-heading{--icon-size: 16px;--icon-spacing: 5px;display:grid;grid-template:1fr / 1fr}.content-inner .section-heading>:is(.hover-link,.text){grid-row:1;grid-column:1}.content-inner .section-heading .hover-link{text-decoration:none}.content-inner .section-heading i{font-size:var(--icon-size);margin-top:.1em;margin-left:calc(-1 * (var(--icon-size) + var(--icon-spacing)));padding-right:var(--icon-spacing);opacity:0}@media screen and (max-width: 768px){.content-inner .section-heading i{margin-left:calc(-1 * (var(--icon-size)))}}.content-inner :is(blockquote,section.admonition) .section-heading i{display:none}.content-inner .section-heading .hover-link:is(:hover,:focus) i{opacity:1}.content-inner .section-heading .text{pointer-events:none}.content-inner .section-heading .text a{pointer-events:all}.content-inner .app-vsn{display:none!important;font-size:.6em;line-height:1.5em}@media screen and (max-width: 768px){.content-inner .app-vsn{display:block!important}}.content-inner img{max-width:100%}.content-inner strong>code{font-weight:700}.content-inner code{font-family:var(--monoFontFamily);font-style:normal;line-height:24px;font-weight:400}@media screen and (max-width: 768px){.content-inner :is(ol,ul){padding-left:calc(1.5 * var(--content-gutter))}}.content-inner section.admonition{border-radius:10px;border-left:0}.content-inner section.admonition.warning{background-color:var(--warningBackground)}.content-inner section.admonition.error{background-color:var(--errorBackground)}.content-inner section.admonition.info{background-color:var(--infoBackground)}.content-inner section.admonition.neutral{background-color:var(--neutralBackground)}.content-inner section.admonition.tip{background-color:var(--tipBackground)}.content-inner section.admonition>.admonition-title{color:var(--contrast);margin:0 -1.2rem;padding:.7rem 1.2rem .7rem 3.3rem;font-weight:700;font-style:normal}.content-inner section.admonition>.admonition-title:before{color:var(--contrast);position:absolute;left:1rem;font-size:1.8rem;font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.content-inner section.admonition>.admonition-title.warning{background-color:var(--warningHeadingBackground);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.warning:before{content:var(--icon-error-warning);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.error{background-color:var(--errorHeadingBackground);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.error:before{content:var(--icon-error-warning);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.info{background-color:var(--infoHeadingBackground);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.info:before{content:var(--icon-information);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.neutral{background-color:var(--neutralHeadingBackground);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.neutral:before{content:var(--icon-double-quotes-l);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.tip{background-color:var(--tipHeadingBackground);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title.tip:before{content:var(--icon-information);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title code{margin:0 .5ch}.content-inner section.admonition code{background-color:var(--admInlineCodeBackground);border:1px solid var(--admInlineCodeBorder);color:var(--admInlineCodeColor)}.content-inner section.admonition pre code{background-color:var(--admCodeBackground);border:1px solid var(--admCodeBorder);color:var(--admCodeColor)}.content-inner section.admonition>.admonition-title :is(a,a:visited){color:inherit;text-decoration-color:currentColor}@media screen and (max-width: 768px){.content-inner section.admonition{margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0}.content-inner section.admonition>.admonition-title{margin:0 calc(-1 * var(--content-gutter))}}.content-inner .summary h2{font-weight:700}.content-inner .summary h2 a{text-decoration:none;border:none}.content-inner .summary span.deprecated{color:var(--darkDeprecated);font-weight:400;font-style:italic}.content-inner .summary .summary-row .summary-signature{font-family:var(--monoFontFamily);font-weight:700}.content-inner .summary .summary-row .summary-signature a{text-decoration:none;border:none}.content-inner .summary .summary-row .summary-synopsis{font-family:var(--defaultFontFamily);font-style:italic;padding:0 1.2em;margin:0 0 .5em}.content-inner .summary .summary-row .summary-synopsis p{margin:0;padding:0}.content-inner :is(a.no-underline,pre a){color:var(--linksNoUnderline);text-shadow:none;text-decoration:none;background-image:none}.content-inner :is(a.no-underline,pre a):is(:visited,:active,:focus,:hover){color:var(--linksNoUnderlineVisited)}.content-inner code{background-color:var(--codeBackground);vertical-align:baseline;border-radius:2px;padding:.1em .2em;border:1px solid var(--codeBorder);text-transform:none}.content-inner pre{margin:var(--baseLineHeight) 0}.content-inner pre code{display:block;overflow-x:auto;white-space:inherit;padding:.5em 1em}.content-inner pre code::-webkit-scrollbar{width:.4rem;height:.4rem}.content-inner pre code::-webkit-scrollbar-thumb{border-radius:.25rem;background-color:var(--codeScrollThumb)}.content-inner pre code::-webkit-scrollbar-track{background-color:var(--codeScrollBackground)}.content-inner pre code::-webkit-scrollbar-corner{background-color:var(--codeScrollBackground)}.content-inner pre code.output{margin:0 12px;max-height:400px;overflow:auto}.content-inner pre code.output+.copy-button{margin-right:12px}.content-inner pre code.output:before{content:"Output";display:block;position:absolute;top:-16px;left:12px;padding:2px 4px;font-size:12px;font-family:var(--monoFontFamily);line-height:1;color:var(--textHeaders);background-color:var(--codeBackground);border:1px solid var(--codeBorder);border-bottom:0;border-radius:2px}@media screen and (max-width: 768px){.content-inner>pre,.content-inner section>pre{margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter))}.content-inner>pre code,.content-inner section>pre code{padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0;border-left-width:0;border-right-width:0}}@keyframes blink-background{0%{background-color:var(--textDetailBackground)}to{background-color:var(--blink)}}.content-inner .detail:target .detail-header{animation-duration:.55s;animation-name:blink-background;animation-iteration-count:1;animation-timing-function:ease-in-out}.content-inner .detail-header{margin:2 0 1em;padding:.5em 1em;background-color:var(--textDetailBackground);border-left:3px solid var(--textDetailAccent);font-size:1em;font-family:var(--monoFontFamily);position:relative}.content-inner .detail-header .note{float:right}.content-inner .detail-header .signature{display:inline-block;font-family:var(--monoFontFamily);font-size:1rem;font-weight:700}.content-inner .detail-header:hover a.detail-link,.content-inner .detail-header a.detail-link:focus{opacity:1;text-decoration:none}.content-inner .detail-header a.detail-link{transition:opacity .3s ease-in-out;position:absolute;top:0;left:0;display:block;opacity:0;padding:.6em;line-height:1.5em;margin-left:-2.5em;text-decoration:none;border:none}@media screen and (max-width: 768px){.content-inner .detail-header a.detail-link{margin-left:-30px}}.content-inner .specs pre{font-family:var(--monoFontFamily);font-size:.9em;font-style:normal;line-height:24px;white-space:pre-wrap;margin:0;padding:0}.content-inner .specs .attribute{color:var(--fnSpecAttr)}.content-inner .docstring{margin:1.2em 0 3em 1.2em}@media screen and (max-width: 768px){.content-inner .docstring{margin-left:0}}.content-inner .docstring:is(h2,h3,h4,h5){font-weight:700}.content-inner .docstring h2{font-size:1.1em}.content-inner .docstring h3{font-size:1em}.content-inner .docstring h4{font-size:.95em}.content-inner .docstring h5{font-size:.9em}.content-inner div.deprecated{display:block;padding:9px 15px;background-color:var(--fnDeprecated)}.content-inner .footer{margin:4em auto 1em;text-align:center;font-style:italic;font-size:14px}.content-inner .footer,.content-inner .footer :is(a,.footer-button){color:var(--textFooter)}.content-inner .footer .line{display:inline-block}.content-inner .footer .footer-button{background-color:transparent;border:0;cursor:pointer;font-style:italic;padding:0 4px}.content-inner .footer .footer-hex-package{margin-right:4px}.content-inner .bottom-actions{display:flex;justify-content:space-between;margin-top:4em}.content-inner .bottom-actions .bottom-actions-button{display:flex;text-decoration:none;flex-direction:column;border-radius:var(--borderRadius);border:1px solid var(--bottomActionsBtnBorder);padding:8px 16px;min-width:150px}.content-inner .bottom-actions .bottom-actions-button .subheader{font-size:.8em;color:var(--bottomActionsBtnSubheader);white-space:nowrap}.content-inner .bottom-actions .bottom-actions-button[rel=prev] .subheader{text-align:right}@media screen and (max-width: 768px){.content-inner .bottom-actions{flex-direction:column-reverse}.content-inner .bottom-actions .bottom-actions-item:not(:first-child){margin-bottom:16px}}.page-cheatmd .content-inner{--horizontal-space: 1.5em;--vertical-space: 1em}@media (max-width: 600px){.page-cheatmd .content-inner{--horizontal-space: 1em;--vertical-space: .75em}}.page-cheatmd .content-inner{max-width:1200px}.page-cheatmd .content-inner h1{margin-bottom:var(--vertical-space)}.page-cheatmd .content-inner h2{margin:var(--vertical-space) 0;column-span:all;color:var(--gray700);font-weight:500}.page-cheatmd.dark .content-inner h2{color:var(--gray200)}.page-cheatmd .content-inner h3{color:var(--main);text-decoration-color:var(--main);margin:0 0 1em;font-weight:400}.page-cheatmd .content-inner h3 :is(a,a:visited){color:var(--main);text-decoration-color:var(--main)}.page-cheatmd .content-inner section.h3{min-width:300px;margin:0;padding:0 0 calc(var(--vertical-space) * 2) 0;break-inside:avoid}.page-cheatmd .content-inner h3 .text{overflow:hidden}.page-cheatmd .content-inner h3 .text:after{content:"";margin-left:calc(var(--horizontal-space) / 2);vertical-align:baseline;display:inline-block;width:100%;height:1px;margin-right:-100%;margin-bottom:5px;background-color:var(--codeBorder)}.page-cheatmd .content-inner h4{display:block;margin:0;padding:.25em var(--horizontal-space);font-weight:400;background:var(--gray100);color:#567;border:solid 1px 1px 0 1px var(--gray100)}.page-cheatmd.dark .content-inner h4{background:#192f50;color:var(--textBody);border:1px solid #192f50;border-bottom:0}.page-cheatmd .content-inner .h2 p{margin:0;display:block;background:var(--gray50);padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd.dark .content-inner .h2 p{background:var(--gray700)}.page-cheatmd .content-inner .h2 p>code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner pre code{padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd .content-inner pre code::-webkit-scrollbar{width:.4rem;height:.6rem}.page-cheatmd .content-inner .h2 pre{margin:0}.page-cheatmd .content-inner .h2 pre+pre{margin-top:-1px}.page-cheatmd .content-inner pre.wrap{white-space:break-spaces}@media screen and (max-width: 768px){.page-cheatmd .content-inner pre code{border-left-width:1px!important;border-right-width:1px!important}}.page-cheatmd .content-inner .h2 table{display:table;box-sizing:border-box;width:100%;border-collapse:collapse;margin:0}.page-cheatmd .content-inner .h2 th{padding:var(--vertical-space) var(--horizontal-space);line-height:inherit;margin-bottom:-1px;vertical-align:middle;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td{padding:var(--vertical-space) var(--horizontal-space);border:0;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 tr:first-child{border-top:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner .h2 thead{background-color:var(--gray50)}.page-cheatmd.dark .content-inner .h2 thead{background-color:var(--gray700)}.page-cheatmd .content-inner .h2 tbody{background-color:var(--codeBackground)}.page-cheatmd .content-inner .h2 :is(ul,ol){margin:0;padding:0}.page-cheatmd .content-inner .h2 li{list-style-position:inside;padding:.5em var(--horizontal-space);line-height:2em;vertical-align:middle;background-color:var(--codeBackground);border-bottom:1px solid var(--codeBorder);margin-top:0}.page-cheatmd .content-inner .h2 :is(ul,ol)+pre code{border-top:0}.page-cheatmd .content-inner .h2 li>code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner section.width-50{display:block;width:50%;margin:0}.page-cheatmd .content-inner section.width-50>section>table{width:100%}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:40px}.page-cheatmd .content-inner section.col-2{column-count:2;height:auto}.page-cheatmd .content-inner section.col-2-left{display:grid;grid-template-columns:calc(100% / 3) auto}.page-cheatmd .content-inner section.col-2-left>h2{grid-column-end:span 2}.page-cheatmd .content-inner section.col-3{column-count:3;height:auto}.page-cheatmd .content-inner section.list-4>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-4>ul>li{flex:0 0 25%}.page-cheatmd .content-inner section.list-6>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 calc(100% / 6)}@media screen and (max-width: 1400px){.page-cheatmd .content-inner section.col-3{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:flex;flex-direction:column}}@media screen and (max-width: 1200px){.page-cheatmd .content-inner section:is(.col-2,.col-3){display:flex;flex-direction:column}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 25%}}@media screen and (max-width: 1000px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 calc(100% / 3)}}@media screen and (max-width: 600px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 50%}.page-cheatmd .content-inner section.width-50{width:100%}}#search{min-height:200px;position:relative}#search .loading{height:64px;width:64px;position:absolute;top:50%;left:calc(50% - 32px)}#search .loading div{box-sizing:border-box;display:block;position:absolute;width:51px;height:51px;margin:6px;border:6px solid var(--coldGray);border-radius:50%;animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--coldGray) transparent transparent transparent}#search .loading div:nth-child(1){animation-delay:-.45s}#search .loading div:nth-child(2){animation-delay:-.3s}#search .loading div:nth-child(3){animation-delay:-.15s}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#search .result{margin:2em 0 2.5em}#search .result p{margin:0}#search .result-id{font-size:1.4em;margin:0}#search .result-id a{text-decoration:none;transition:color .1s ease-in-out;color:var(--links)}#search .result-id a:is(:visited,:active,:focus){color:var(--linksVisited)}#search .result-id a:hover{color:var(--main)}#search :is(.result-id,.result-elem) em{font-style:normal;color:var(--main)}#search .result-id small{font-weight:400}@keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}.modal{animation-duration:.15s;animation-name:keyboard-shortcuts-show;animation-iteration-count:1;animation-timing-function:ease-in-out;display:none;background-color:#000000bf;position:fixed;inset:0;z-index:300}.modal.shown{display:block}.modal .modal-contents{margin:75px auto 0;max-width:500px;background-color:var(--modalBackground);border-radius:var(--borderRadius);box-shadow:2px 2px 8px #0003;padding:25px 35px 35px}@media screen and (max-width: 768px){.modal .modal-contents{padding:20px}}.modal .modal-header{display:flex;align-items:start}.modal .modal-title{display:inline-block;flex-grow:1;font-size:1.2rem;font-weight:700;margin-bottom:20px}.modal .modal-title button{border:none;background-color:transparent;color:var(--textHeaders);font-weight:700;margin-right:30px;padding-left:0;text-align:left;transition:color .15s}.modal .modal-title button:hover{color:var(--main);cursor:pointer}.modal .modal-title button.active{color:var(--main)}.modal .modal-close{cursor:pointer;display:block;font-size:1.5rem;margin:-8px -8px 0 0;padding:8px;opacity:.7;background-color:transparent;color:var(--textHeaders);border:none;transition:opacity .15s}.modal .modal-close:hover{opacity:1}#keyboard-shortcuts-content dl.shortcut-row{display:flex;align-items:center;justify-content:space-between;margin:0;padding:6px 0 8px;border-bottom:1px solid var(--settingsSectionBorder)}#keyboard-shortcuts-content dl.shortcut-row:last-of-type{border-bottom-style:none}#keyboard-shortcuts-content dl.shortcut-row:first-child{padding-top:0}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){display:inline-block}#keyboard-shortcuts-content kbd>kbd{background-color:var(--settingsInputBorder);color:var(--contrast);border-radius:var(--borderRadius);font-family:inherit;font-weight:700;display:inline-block;line-height:1;padding:4px 7px 6px;min-width:26px;text-align:center}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){margin:0}#quick-switch-modal-body{width:100%;position:relative}#quick-switch-modal-body .ri-search-2-line{position:absolute;left:0;top:0;padding:4px 10px;color:var(--quickSwitchContour);font-weight:700}#quick-switch-modal-body #quick-switch-input{width:100%;padding:8px 6px 8px 38px;border:none;color:var(--quickSwitchInput);background-color:transparent;border-bottom:1px solid var(--quickSwitchContour);box-sizing:border-box;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-results{margin:0}#quick-switch-modal-body .quick-switch-result{padding:2px 5px;border-bottom:1px dotted var(--quickSwitchContour);transition:all .12s ease-out}#quick-switch-modal-body .quick-switch-result:last-child{border-bottom:none}#quick-switch-modal-body .quick-switch-result:hover{cursor:pointer}#quick-switch-modal-body .quick-switch-result:is(:hover,.selected){border-left:4px solid var(--main);background-color:var(--codeBackground)}.autocomplete{display:none;position:absolute;width:calc(100% - 32px);top:55px}.autocomplete .triangle{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-bottom:12px solid var(--autocompleteBackground);position:absolute;top:8px;left:26px;transform:translate(-50%);z-index:100;background-color:transparent}.autocomplete-preview{width:100%;margin:0;height:100%;line-height:20px;background-color:var(--background);font-family:var(--sansFontFamily);border:4px solid var(--autocompleteBorder);padding:12px 16px}.autocomplete-preview div,.autocomplete-preview span{display:none}.autocomplete-preview.loading div{float:left;display:block;border:5px solid var(--autocompleteBorder);border-radius:50%;border-top:5px solid var(--textDetailAccent);width:20px;height:20px;animation:spinner 4s linear infinite}.autocomplete-preview.loading span{color:var(--autocompleteResults);display:inline;margin-left:6px}.autocomplete-preview.loading span:after{color:var(--autocompleteResults);content:"Loading"}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.autocomplete-preview.loading iframe{height:0}.autocomplete-preview iframe{width:100%;height:100%;border:0}.autocomplete-results{list-style:none;margin:0;padding:15px 20px;display:flex;justify-content:space-between;color:var(--autocompleteResults);font-family:var(--sansFontFamily);font-weight:300;font-size:.9rem}.autocomplete-results .bold{color:var(--autocompleteResultsBold);font-weight:400}.autocomplete.shown{display:block}.autocomplete-container{position:absolute;top:15px;width:100%;z-index:200}.autocomplete-suggestions{background-color:var(--autocompleteBackground);border-radius:8px;box-shadow:0 15px 99px 0 var(--autocompleteBorder);overflow-y:auto;max-height:450px;white-space:normal;overflow-x:hidden;overscroll-behavior-y:contain}.autocomplete-suggestions.previewing:has(.selected){max-height:80vh}.autocomplete-suggestions.previewing:has(.selected) .autocomplete-suggestion:not(.selected){display:none}.autocomplete-suggestions.previewing:not(:has(.selected)) .autocomplete-preview{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview{display:none}.autocomplete-suggestion{color:inherit;display:block;padding:12px 20px;text-decoration:none;transition:background-color .3s ease-in-out;border-top:1px solid var(--suggestionBorder);font-size:.9rem}.autocomplete-suggestion:hover,.autocomplete-suggestion.selected{background-color:var(--autocompleteHover)}.autocomplete-suggestion:not(.selected) .autocomplete-preview-indicator{display:none}.autocomplete-preview-indicator{float:right}.autocomplete-preview-indicator button{color:var(--iconAction);display:flex;align-items:center;text-decoration:none;border:1px solid var(--suggestionBorder);border-radius:8px;transition:color .3s ease-in-out;background-color:var(--autocompletePreview);cursor:pointer;padding:4px 8px;font-size:14px}.autocomplete-preview-indicator button:hover{color:var(--iconActionHover);background-color:var(--autocompleteHover)}.autocomplete-preview-indicator button i{margin-right:4px}.autocomplete-suggestions.previewing .autocomplete-preview-indicator-closed{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview-indicator-open{display:none}.autocomplete-suggestion:hover:not(.selected) .autocomplete-preview-indicator-closed{display:block}.autocomplete-suggestion em{font-style:normal;font-weight:700}.autocomplete-suggestion .description{opacity:.6;padding-top:3px}.autocomplete-suggestion .label{background-color:var(--autocompleteLabelBack);opacity:.6;color:var(--autocompleteLabelFont);padding:4px 8px;border-radius:4px;margin-left:5px;text-transform:uppercase;font-family:var(--sansFontFamily);font-size:.7rem}.autocomplete-suggestion .header{margin-right:5px}.autocomplete-suggestion .title,.autocomplete-suggestion .description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.autocomplete-suggestions a{text-decoration:none!important}.autocomplete-suggestions::-webkit-scrollbar{width:5px;border-radius:7px;flex-shrink:0}.autocomplete-suggestions::-webkit-scrollbar-thumb{background-color:var(--autocompleteSrollbarThumb);border-radius:7px}.autocomplete-suggestions::-webkit-scrollbar-track{background-color:var(--autocompleteSrollbarTrack)}@media screen and (max-width: 1023px){.autocomplete-results .press-return{display:none}}.tooltip{box-shadow:0 0 10px var(--black-opacity-10);max-height:300px;max-width:500px;padding:0;position:absolute;pointer-events:none;margin:0;z-index:99;top:0;left:0;visibility:hidden;transform:translateY(20px);opacity:0;transition:.2s visibility ease-out,.2s transform ease-out,.2s opacity ease-out}.tooltip.tooltip-shown{visibility:visible;transform:translateY(0);opacity:1}.tooltip .tooltip-body{border:1px solid var(--codeBorder)}.tooltip .tooltip-body .signature{min-width:320px;width:100%}.tooltip .tooltip-body .detail-header{border-left:0;margin-bottom:0;margin-top:0}.tooltip .tooltip-body .docstring{background-color:var(--background);padding:1.2em;margin:0;width:498px}.tooltip .tooltip-body .docstring-plain{max-width:498px;width:auto}.tooltip .tooltip-body .version-info{float:right;line-height:1.6rem;font-family:var(--monoFontFamily);font-size:.9rem;font-weight:400;margin-bottom:-6px;opacity:.3;padding-left:.3em}pre{position:relative}pre:hover .copy-button,pre .copy-button:focus{opacity:1}.copy-button{display:flex;opacity:0;position:absolute;top:5px;right:5px;padding:4px;background-color:var(--codeBackground);border:none;cursor:pointer;transition:all .15s;font-family:var(--defaultFontFamily);font-size:14px;line-height:24px;color:currentColor}.copy-button svg{opacity:.5;transition:all .15s}pre .copy-button:hover svg,pre .copy-button:focus-visible svg{opacity:1}.copy-button svg{width:20px}.copy-button.clicked{opacity:1;color:var(--success)}.copy-button.clicked svg{display:none;color:currentColor}#settings-modal-content{margin-top:10px}#settings-modal-content .hidden{display:none}#settings-modal-content .input{box-sizing:border-box;width:80%;padding:8px;font-size:14px;background-color:var(--settingsInputBackground);color:var(--settingsInput);border:1px solid var(--settingsInputBorder);border-radius:8px;transition:border-color .15s}#settings-modal-content .input:focus{border-color:var(--main)}#settings-modal-content .input::placeholder{color:var(--gray400)}#settings-modal-content .switch-button-container{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--settingsSectionBorder);padding:10px 0}#settings-modal-content .switch-button-container:first-of-type{border-top-style:none;padding-top:0}#settings-modal-content .switch-button-container>div>span{font-size:18px}#settings-modal-content .switch-button-container>div>p{font-size:14px;font-weight:300;line-height:1.4;margin:0;padding-bottom:6px;padding-right:10px}#settings-modal-content .switch-button{position:relative;display:inline-block;flex-shrink:0;width:40px;height:20px;user-select:none;transition:all .15s}#settings-modal-content .switch-button__checkbox{appearance:none;position:absolute;display:block;width:20px;height:20px;border-radius:1000px;background-color:#91a4b7;border:3px solid #e5edf5;cursor:pointer;transition:all .3s}#settings-modal-content .switch-button__bg{display:block;width:100%;height:100%;border-radius:1000px;background-color:#e5edf5;cursor:pointer;transition:all .3s}#settings-modal-content .switch-button__checkbox:checked{background-color:#fff;border-color:var(--main);transform:translate(100%)}#settings-modal-content .switch-button__checkbox:checked+.switch-button__bg{background-color:var(--main)}#settings-modal-content .switch-button__checkbox:focus{outline:0}#settings-modal-content .switch-button__checkbox:focus+.switch-button__bg{outline:2px solid var(--main);outline-offset:2px}#settings-modal-content .switch-button__checkbox:focus:not(:focus-visible)+.switch-button__bg{outline:0}#settings-modal-content .settings-select{cursor:pointer;position:relative;border:none;background-color:transparent;color:var(--textBody)}#settings-modal-content .settings-select option{color:initial}#toast{opacity:0;position:fixed;z-index:1;left:50%;bottom:1rem;min-width:3rem;margin:0 -1.2rem;padding:.7rem 1.2rem;text-align:center;font-weight:700;border-radius:10px;border:1px solid var(--codeBorder);background-color:var(--codeBackground);color:var(--textBody);transition:opacity .4s ease-in-out,transform .3s ease-out;cursor:default}#toast.show{opacity:1;transform:translateY(-.75rem)}@media (prefers-reduced-motion: reduce){#toast{transition:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;user-select:none}@media print{.body-wrapper{display:block}.sidebar,.sidebar-button,.top-search{display:none}.content{padding-left:0;overflow:visible;left:0;width:100%}.summary-row{break-inside:avoid}#toast{display:none}.content-inner{padding:0}.content-inner .section-heading a.hover-link,.content-inner button.icon-action,.content-inner a.icon-action,.content-inner .bottom-actions{display:none}.footer p:first-of-type{display:none}.content-inner section.admonition{border:2px solid var(--gray400)}.content-inner section.admonition>.admonition-title{color:var(--textHeaders);border-bottom:2px solid var(--gray400)}.content-inner pre code.makeup{border-color:var(--gray400);white-space:break-spaces;break-inside:avoid}.content-inner blockquote code.inline,.content-inner code.inline{border-color:var(--gray400)}}@media print{.page-cheatmd .content-inner *{background-color:transparent!important;border-color:var(--gray400)!important}.page-cheatmd .content-inner{max-width:100%;width:100%;padding:0;font-size:.7em}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:30px}.page-cheatmd .content-inner section.col-2{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:grid}.page-cheatmd .content-inner section.col-3{column-count:3}.page-cheatmd .content-inner h1{margin-top:0;margin-bottom:.5em}.page-cheatmd .content-inner h2.section-heading{font-weight:700;margin-top:1em;column-span:all}.page-cheatmd .content-inner section.h2{break-inside:avoid}.page-cheatmd .content-inner h3{font-weight:700;color:var(--mainDark)}.page-cheatmd .content-inner h3:after{height:2px;background-color:var(--gray400)}.page-cheatmd .content-inner section.h3{min-width:300px;break-inside:avoid}.page-cheatmd .content-inner h4{padding:.5em 0;border:none;font-weight:700;color:#000}.page-cheatmd .content-inner .h2 p{padding-left:0;padding-right:0;border:none!important}.page-cheatmd .content-inner code{line-height:1.5em}.page-cheatmd .content-inner .h2 table{font-variant-numeric:tabular-nums;break-inside:avoid}.page-cheatmd .content-inner .h2 :is(th,td){vertical-align:top;padding-left:0;padding-right:0}.page-cheatmd .content-inner .h2 thead{border-style:solid none;border-width:1px}.page-cheatmd .content-inner .h2 tr{border-bottom:none}.page-cheatmd .content-inner .h2 th{font-weight:700}.page-cheatmd .content-inner .h2 li{padding-left:0;padding-right:0;vertical-align:middle;border-bottom:none}.page-cheatmd .content-inner pre:hover button.copy-button,.page-cheatmd .content-inner div.tooltip{display:none}.page-cheatmd .content-inner footer p:not(.built-using){display:none}}code.makeup .unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.makeup .hll{background-color:#ffc}.makeup .bp{color:#3465a4}.makeup .c,.makeup .c1,.makeup .ch,.makeup .cm,.makeup .cp,.makeup .cpf,.makeup .cs{color:#4d4d4d}.makeup .dl{color:#408200}.makeup .err{color:#a40000;border:#ef2929}.makeup .fm,.makeup .g{color:#4d4d4c}.makeup .gd{color:#a40000}.makeup .ge{color:#4d4d4c;font-style:italic}.makeup .gh{color:navy;font-weight:700}.makeup .gi{color:#00a000}.makeup .go{color:#4d4d4c;font-style:italic}.makeup .gp{color:#4d4d4d}.makeup .gr{color:#ef2929}.makeup .gs{color:#4d4d4c;font-weight:700}.makeup .gt{color:#a40000;font-weight:700}.makeup .gu{color:purple;font-weight:700}.makeup .il{color:#0000cf;font-weight:700}.makeup .k,.makeup .kc,.makeup .kd,.makeup .kn,.makeup .kp,.makeup .kr,.makeup .kt{color:#204a87}.makeup .l{color:#4d4d4c}.makeup .ld{color:#c00}.makeup .m,.makeup .mb,.makeup .mf,.makeup .mh,.makeup .mi,.makeup .mo{color:#2937ab}.makeup .n{color:#4d4d4c}.makeup .na{color:#8a7000}.makeup .nb{color:#204a87}.makeup .nc{color:#0000cf}.makeup .nd{color:#5c35cc;font-weight:700}.makeup .ne{color:#c00;font-weight:700}.makeup .nf{color:#b65800}.makeup .ni{color:#bc5400}.makeup .nl{color:#b65800}.makeup .nn{color:#4d4d4c}.makeup .no{color:#a06600}.makeup .nt{color:#204a87;font-weight:700}.makeup .nv,.makeup .nx{color:#4d4d4c}.makeup .o{color:#bc5400}.makeup .ow{color:#204a87}.makeup .p,.makeup .py{color:#4d4d4c}.makeup .s,.makeup .s1,.makeup .s2,.makeup .sa,.makeup .sb,.makeup .sc{color:#408200}.makeup .sd{color:#8f5902;font-style:italic}.makeup .se{color:#204a87}.makeup .sh{color:#408200}.makeup .si{color:#204a87}.makeup .sr{color:#c00}.makeup .ss{color:#a06600}.makeup .sx{color:#408200}.makeup .vc,.makeup .vg,.makeup .vi,.makeup .vm,.makeup .x{color:#4d4d4c}.dark .makeup{color:#dce1e6}.dark .makeup .hll{background-color:#49483e}.dark .makeup .bp{color:#dce1e6}.dark .makeup .c,.dark .makeup .c1,.dark .makeup .ch,.dark .makeup .cm,.dark .makeup .cp,.dark .makeup .cpf,.dark .makeup .cs{color:#969386}.dark .makeup .dl{color:#e6db74}.dark .makeup .err{color:#960050;background-color:#1e0010}.dark .makeup .fm{color:#a6e22e}.dark .makeup .gd{color:#ff5385}.dark .makeup .ge{font-style:italic}.dark .makeup .gi{color:#a6e22e}.dark .makeup .gp{color:#969386}.dark .makeup .gs{font-weight:700}.dark .makeup .gu{color:#969386}.dark .makeup .gt{color:#ff5385;font-weight:700}.dark .makeup .il{color:#ae81ff}.dark .makeup .k,.dark .makeup .kc,.dark .makeup .kd{color:#66d9ef}.dark .makeup .kn{color:#ff5385}.dark .makeup .kp,.dark .makeup .kr,.dark .makeup .kt{color:#66d9ef}.dark .makeup .l,.dark .makeup .ld,.dark .makeup .m,.dark .makeup .mb,.dark .makeup .mf,.dark .makeup .mh,.dark .makeup .mi,.dark .makeup .mo{color:#ae81ff}.dark .makeup .n{color:#dce1e6}.dark .makeup .na{color:#a6e22e}.dark .makeup .nb{color:#dce1e6}.dark .makeup .nc,.dark .makeup .nd,.dark .makeup .ne,.dark .makeup .nf{color:#a6e22e}.dark .makeup .ni,.dark .makeup .nl,.dark .makeup .nn{color:#dce1e6}.dark .makeup .no{color:#66d9ef}.dark .makeup .nt{color:#ff5385}.dark .makeup .nv{color:#dce1e6}.dark .makeup .nx{color:#a6e22e}.dark .makeup .o,.dark .makeup .ow{color:#ff5385}.dark .makeup .p,.dark .makeup .py{color:#dce1e6}.dark .makeup .s,.dark .makeup .s1,.dark .makeup .s2,.dark .makeup .sa,.dark .makeup .sb,.dark .makeup .sc,.dark .makeup .sd{color:#e6db74}.dark .makeup .se{color:#ae81ff}.dark .makeup .sh,.dark .makeup .si,.dark .makeup .sr,.dark .makeup .ss,.dark .makeup .sx{color:#e6db74}.dark .makeup .vc,.dark .makeup .vg,.dark .makeup .vi,.dark .makeup .vm{color:#dce1e6}.tabset{--borderWidth: 1px;--tabsetPadding: var(--baseLineHeight);margin:var(--baseLineHeight) 0}.tabset-tablist{display:flex;overflow-x:auto}.tabset-tab{padding:.6rem var(--tabsetPadding);min-height:46px;font-family:var(--sansFontFamily);background-color:var(--tabBackground);color:var(--tab);border:var(--borderWidth) solid var(--tabBorder);margin-right:calc(-1 * var(--borderWidth));border-top-width:4px;border-top-color:var(--tabBorderTop);border-radius:0;border-top-left-radius:var(--borderRadius);border-top-right-radius:var(--borderRadius);box-shadow:0 -3px 4px var(--tabShadow) inset;cursor:pointer}.tabset-tab[aria-selected=true]{border-bottom-color:var(--tabBackground);border-top-color:var(--mainLight);box-shadow:none}.tabset-tab[aria-selected=true]:focus-visible{background-color:var(--mainLight);border-color:var(--mainLight);color:var(--white)}.tabset-panel{padding:0 var(--tabsetPadding);border:var(--borderWidth) solid var(--tabBorder);margin-top:calc(-1 * var(--borderWidth));border-bottom-left-radius:var(--borderRadius);border-bottom-right-radius:var(--borderRadius)}@media screen and (max-width: 768px){.tabset{--tabsetPadding: calc(var(--baseLineHeight) / 2)}.tabset-panel{padding-top:calc(var(--tabsetPadding) / 2);padding-bottom:calc(var(--tabsetPadding) / 2)}.tabset-panel pre,.tabset-panel blockquote,.tabset-panel section.admonition{margin-left:calc(-1 * var(--tabsetPadding))!important;margin-right:calc(-1 * var(--tabsetPadding))!important}.tabset-panel>pre code{border-left-width:0;border-right-width:0}}body.preview{--sidebarWidth: 0px;overflow:hidden}body.preview .content{height:auto}body.preview .content-inner{padding:0}body.preview .sidebar,body.preview #sidebar-menu,body.preview .hover-link,body.preview .detail-link{display:none}body.preview :is(h1,h2,h3):first-of-type{margin-top:0}body:not(.dark) .content-inner img[src*="#gh-dark-mode-only"],body.dark .content-inner img[src*="#gh-light-mode-only"]{display:none} +/*! Bundled license information: + +normalize.css/normalize.css: + (*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css *) +*/ diff --git a/doc/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 b/doc/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6119e5971bfa1b7c5e50dc64d751d21f10038e8d GIT binary patch literal 16244 zcmV-)Ka0S3Pew8T0RR9106%m95&!@I0Duqx06z)<0RR9100000000000000000000 z0000Qfd(5O9EK3 zW(Ob)g*zKAY$an`2FGp(N!Wg6SB#=;&fbL45f(NMz-}yJ_W$1!IV3l21a_? zXXi?Lnx&0q)EW&rs5fV>wqbF;OnvinQ{O+r?YB`J<1rktzfz6%xd!h~?s65hNi~oB^ICXeQ>~iI<{C|RC ztnJ;SRlIbnHweWn{!l-3)Jhhe4wa!%p%KZP|D~&Z|Enb)I6xWtEVm3mU8_CdLEmU` zz(CLjl8K`YGFO|YE;eSI#1|QGesZ(##TG`efe9>2f+SAz2?HyvF<-4Z(WVnE>Z{6K zFVD*4ir(5^)C>Q_mA>~EgUNV8cAb=2irtq<6u077ZiM@Pb2dXeYumu{DlnD6J z49=<0_7}cHG@xYTr1d{_rF|CyU#gu^;A?)V-PD9$3@pv%%NLLqCpAHdzpI{tzB1&8 zYoD3T-@?56wuFj69RMepg`+({A&aqzE-OG?Rz#ZS)49KUf4gIhVj`<}ugClOm@f;g zbTvg1k|q`K*0C=(A^&Hp+0N_`rzI{C7kTGIIZ7SRp@%aaa?!deX8z1_cV>3U#R58E z0g(bp`3!*4y#)!L04Nc>UolbITFO*n>_ID(m>*Q;@4DK z+w^81Q#!Tg7T|zE9%I=+r1o3h#x>^@jr@P__J`JHp;)-x%{$~_Ve~uyJ&dUif@#y2 z^;~njJVChu6w|F55R4=(t5Zo@I3Wy0h))SgY6%U(gb8uNj5XmaAQ2=i5g{>=EH6Q$ z6Ge&=r5fbjTLSq%5FUXEv=bbFG(9yOtSm|vS@_IwULw9NieQ_0zV1rOieX1# zihSLbEQX)qJ%&GntP3@{95mstX`d1YKKaECA?*InGQ}v1A*3ifvyz1{z#_);h}3je z8UfMP5+gzpaUw!QiI|qG8^Sy%;L_y^myLk7pBN{de!3QKkBRMy&Bx|EjXwQqgL)8O zEny~bqE<5U6x@#JUnlZ9QP)Z6ItgPDjqej=Uf3Q&0iTJzFJUl8?khzHAVp9}IHCff z4^d4x;0>`|n7pSINXZy4)0+%1B7|pn^GE=2apwC`JxnG>$(+(zpVHLOxYwHzLdz9! zW2{@s!w^#fA{cuvC%IQt#85yX#gu@TiA}<-qy(%^84(S#i$v*tz7oxPz$R<;$Tq+< zG1H=>6Y&>LLIP|j`2d8;O0^CG;qXT6MJ2JOK5p- zU=mUJeCUZa_`cT^1`@0obm38MC@1ng-{!kggjHiTB0uU!Ni>d%=rDRDYvqPmH~uxA zp2#Nr?tfK4ZLCejXu~aM<@lBAkrxHGQAE{L_*|HD=wk2hSsk|*0UxftatRH{>;p0Nu5;Uiph z(HZBQcQ#i+<(&{&I=+8Q$seG8nR(TG^*2lr2`V6vACD#Bg1(2<5b;tlC#IXU7oKjOxAK3XhOykW*+3z}RhUX@NF+003-${`xf*4# zXgB}To@=Z0QctKC8cwI6OI9?JCvC=kq=&}*cIXd`nLTTuzpuBayQ{OKy{)ySxv8;% zqN#E6q=x#5b+t9s6UL7lTU9xxqI~qIk!7VN#YKe$`FXiH*`X1^KxT$NJ1r?yxk>%yD8Y?2l4~%3Siko*fN(zJ=Jfnu#%& zGJ3I{bpB$ulDY{iU+l?OCN73Id^%aD4oRX71_TF&T%YaF_jin-;7zUf5u?QkM>CU} zuqOf9H3@y}Hn|u%Q!)36G2Ii3zM#*)jVO{hjSWJsqlCG)W@oz_ge&I2}Zj*aycXDp`TltGNTr7!)i{Yt(is8RaP zy6VQ?XV7Yvi4UE@E=^+=tSX46gExGL97&G0f{FB-3dZ`?_qWEtvtCLPUK;jk<3_!! zOwH!affl36&-lJNjrQfisk?!bWx2TE>for}oZF#2#Sm(hz2EG7o5&d(*{4iJTX%Vc ziqOaA=d0|fL_+0PXIFnr>?JnJmNyV*H)>D2CcDP)kiP}AS>x~Fl1pkl(FxCppog+H zD<2^z&>SJM8zu?NS?e45SxqVv4!K*c=3tccJvZEu0?`m@HBaR|d7Q`Xf?L+G)#?Y# z=5P7lPU(EBEi!b?(sNppE5)50X`$ASAQS;z{sdLkKRT^Mlk2kOWtd3P*K|blXlU+@ zmUC?vZnc{Ein5lyiOE8W!#z~<)n9cjF%CRCfxujH-*ye<%FqM@?(^cGgi5-P%S9Jn zo#=OSijG)Xcy|fVN*NciLozv3(~9z>Hm^8}5hHfK7iw=r>uyr**YyEHo#iOViRwNU zw;0^!U30GpGbWWyzQAuB6L(NYy8k&diIGWpe#d@rzm{ZXtcS=Cj;Xg%V!1uYJ>m{W zkH^!w)Eii^8cPJGMZvE!D5&jQBiPN+DmoU#Tz5E?+^~`fhf%v@0m|^1g5MkL@|QfI z>^TiW^B~`vLiK^J0BKcal_g54_Rczjo5Ra{Z`d{5NRWrb-XiB!e z${6$rN}H}3<2Qez$Ef8cSq=`a+S2uvyi5nXST3^JpKsUZv!#OCWM)5_3>2Vx!1otH zbTUK5N%_k@Ic|4pdA~XnAaked7!UFb63`K}nw1Y>@7!I4yyaX2MxLe4!mNdn0ys^6 zFN`1^SVK5N;2!kEqw3*#<_vHI;4xR(zoW8}*y5xF}yP|HU#7lQC$^_-6U8Zq_k$h&L{0t4!Rw+gsGZ$Ve<7DfyA z2M*K#wf2h(Nc_g23CC zyhEb-IZyM^N~3N^tYy1DtzfQ>gs#)cwA@b`b^D2dZF^C^E6aAlMOkb{%w>D>qL4{T zJ_Y`^zZ>`~gM#ebEehu*Cg0NLNE9iKCe?)3Ojyj)l|un8O)u3!5h~n(UDX3|XVD)#D}}VRQ4l42B44S7ujU33>b*BO(N$q|$iagND=Dn;=!eCQzN%im6IjY?V`S)^mPjpHr<>ulbz1 z33z!AHf7bBs_FxhHyq(={{$lcHRc@h@{q8vuI}Ow&S+9Z+6c;O+{CY}9xA3-;n%jT zB7>9rW4=`iD(SakgUyo8dkKrM}?v-Lq{L#}%Y zKM2#Ys!RF0-w5YhK#L>ZN*jxtxzr-t2=;4*t<)u5V9O0vUUMk6h1*CH8p6gH)9WD| zs*(u_G)f8^+tA=L@;wly`~!f0L^K!3{#CRV^AV&WgE5N+P%LQ+wa7JY-PvXrjuzAA zU}rK=GAWUwe{ns@cGv@t7=cnx?vRlLikRwr1Qz<0{}@T>kiIr@cvQ zKbP#9=nT3m!)?MBj=8=r*ik;1n!~Hb(;d_1SSZ?Nu};M-mtE*94~%8((P1R@)N)Io`TXP>pw;sT`NIa!p2^g7Zb5-&XwXnPDFJ{vFwL9jH5!IENjB+f6 zd7FwUt?#2eXicBe%OPWK@NsO;cpkHi`MN?1XD=bK5okt=h(C9MNm7+^8-`WU2f-n3 z_uOY6V46(0os~l0{ZJLwIG){F<`5Ep=7#GA-ItZx~~Wa1g8tX@J3o26 zh!u_ zr5X}}ZqUJDb` z!FMkO7a7U|R*>cF45-)~K2zNr8>p@}Ymw$L010Y=KX}cY^0ul>sT?LaF?c(-mjGT* zj`8WM(WZ~T%dcbr-Dw_fM*QcVM|q*yYl)`W2na^XxajHcK|U}M2SyCXQ^eN!A@$l0 zyF@;l+ir&s1REVpfTR+PrKY>17D65?ZFzpoZhP3hSTR z)W1Z2W((jWbRM`~#Jb?iUn17Yg0U30+D;R6JXLVS3^zIl1^6Rg6gE(1;9}dCX4s5t z;dGNSp`K1)L54Zu6xF(74dwCgacnhFjAY;whA<^1J;eAq5v2^3L%%zr&tj;iy}g}^ z_p(-SC-m63LtBH{X1XVUG#}gy?&1cxE4XQhzfz|92EL{jZHEJTigQbT=ylHwj3KO= zp>Xs$F_JcIq%1%GABN^3;g52XT3lSevD<9` zX_ws6F!Lo+056r14V}56b|%>+%J5};V^d~}?3UuJkaEekM9-kVE@bjwJs$C?HjM^900dvm;ig7LP#4%)FFJMZ{L&Jo7{^*9}B%E*zo9 zl2gh-( zWh`U}fq5FSHh}H1LWh4Z)x6~chb{iat&}(#Wt?dm%S*e;&-ThOL^(npiL*6|=NJ8x zDkG>xx8Y}1taa$UMD-8^!Q?HyJq2ydH`{4Ar=1%qCP8DCLB!HNSWu=m3ZxYD4SH41 z3a+OF2li2%TYN4|87;pvoE^t=~E%t?E0aHJD z=YjhMmGTJ88!N;mBxH=JBgYf;Gmcf|fi&p{BG-Ke&exf1YdeU=erf)qxTE9^B$I=| zWsw$M*69&l9~ktiR+Nz65L6UAKb$|&s9_=Xc{CfnzL?!>G&p@Y`g$gbkunSbaP@X- z(negV^-8}@b38kw-U*?`Sv_JD65Ig$;SuC%=rRk-7%$!f9TO+k!N>&@8F5R(rY9bM z7$4tnjz55;D}e=fN3}V;QRT37AoGA$!Lzc}Ui=f=Sox;1ODiQvCV?->HO=Jj%DHqk z6bcLLFCUbqdM5ov7cRcQ$!DpXq8;gRFGSrK)?EfBNu1Lu3bXz=6iVb!*$rcOZlw zFHoqeX@=O9&>QfT)@}P^wbq(}zq5vHG2wz=GnM7rY29cnYVZ_=1Ha_0eYZ6zdPZYg zw;4XZ0h`x(d>kMBd-$Q_<9C2fjDkUChNexGgu&KOLRf)SCqA>26lU|j9 z+2A+ysl&|%Er&JIK7k!@mYL?ck5Zf6`IlUZm617~Z;Pm0<0bzWz0 ztCGzP$$5@Goit$oXTj$ydx?8QzE4GtjzmnWy7{20xUKKtzZ2pyD*GHOq%Z20RKKZI z5;I~CeTO*5R&Cc;WrY&xJhzZAnJJ?dtud-rdaPaD1zWSi0=pgCo*|Mf+qI+;xf(>r z=gt6y+1;DnF z2pXM$#-nlH)X^;cmlj(W|Gv}m+s*4%}p0Rmf0y~DJE)}!u2Z;e$?=@`dUbv!bS%tE>7~15>4q;7bZ&`;bGRN1}Y>z zdy>^#Xpq*0&BO{PWv95)@tI-GHb!;ae5Hf*FLbB}K>Ia5&Ln&0NU`OX*_vyV)nx_+ zlSZUiJ(tEA$FWTlyDa8Q(bnkS4Hg)UPC#c)tV&^j`z+;|1|-L)Rc9C$mWIu0PSpB_ ztvH15rtZPTH0fficRzd+0wRnh!}yTF29B0F9*eL~{|4tRLlx%ga7ZsZ$ zC*1!}^lKGIn)tQY2ahnd4^KAf=KT9<#=+ip-=JhZ&YAiuM_kQ$jGV$*OL7`3T1<4) z$Z`Y@{dbrRY)y`iNUuv{aO~HSdcncdS7WI!FduRXBB?eWuV<{x+=vy|C9hJgQR^n! zf1dRo>3n-bRbA_hzI55nebr>*v*!*FJuDhj?$a)+EWc8*qTKKCj`oXF3Ef8fJZ6>M z#BB%#V#J=RQaV!64}>7+FyUo<9?cdXXgan0$~w#sM+Uk-hX0*7lhT|uUa-*XNd%^n z=)YTbUh1*-{J!1t8#A*0Beiv8#b7Rzq~C?B@Ml4j{*;^Q&bo7yqD(cf>T|%E$FyKnxZ}tVRQ(QWp*@>6{)Gn;uH-w3 zd8z=v#qEIgbw|?*rQ$#mm*JW|t_R4ROKc^LXmxz4W-jTJx6+5=Jw^)M7JWG-*uUHf z%V-Z}0t#V*UuLk3vAou1-%{R0sc6w}GmWlA#`jhC(ZxGcwyD#*|D5`#d#!4~5|}$QbBK0# z=x|GLrF^bDZJ=d{ipCp0DN?7Y6F;jEZsf$GENkKGsLYT%nQ#0f1Skot(RK>at|st~ zA8AB@KYN9M@a#UoC3iB@|5mf#t&)F^3zc#oV5jBSUT3<`26_(*C8N{F`$Cj*>25x6 zM^XS#%ZBANO7&0AuBA;b51H@!N}!h6Z}hdI|fpSen7P%+Aqj*m(wrhcBR>Z~FI5 zo%5?HTxJ#WXEaY3#8vOHPoSZ*p;KZvEs&6_G*d@uoauZz{L~LPRKnpEq9PI$Jpr^z z#elsGrsLu@BN+Y6e1nlyu)xoh3LP++HbNg4W}YLkb!9mdTJ3(=B*3jZihN*2Jl%vq z`!v&I`H?sFlpD$gDUytIo?4p5=*f1)56k~Qi1eSA$OL_czFrqH)UWbmt1mEU?bVgn zs5xuM1f$KzQFIRgln-<*clo`i|I1Ua%%rX!$c)ENzp2yN@XA{-V*NRtlI~V}Bm%EY zCh$mBt#K#pal9}bp`Txi(AJ!%zYJ?=$lCK8w+~!=zG+^>sub@^mm=RvZ;-f3n)p{v z$OX7bs{DM2SR~y40f}|P=n7+FPMz^c&jceV|2qhcKC?&aXRdF|3xTEmw=+P-^OcH@ zU8dIuT*}-`p^EhV(<6I)p7E*J^z=q>@btr2>ZyYd@Wqj|fN?f|n(=(uEF&N|XP0j{ zD<_iiHQMPfr&2&d>FT&LyHm2&h#^Hds0xS0;G&~zjYp_zzW1Da1oEzrDLBNHE&@K8 zJe?iOwZlT5rDolDmpf9?mNM>kMem5d;sg>CaoY)z@Zv*oi6s8>REtF-mlW-LMN-2+ zPeOAJP7lHF3pnv0wb+|4t#ZpnjNf9CC``#wW-!I_G~7)||B}Ug6=Ayi{A&*s`F3Y~ z1PV?zfkdGuBPzb`0tE#QAl?)!7}_!I$qv=9kxs2GRGPL;^c8NJU%?VMX+B1t*~}`c zb~1PftM|>5mfO(PJiw_lcS*JB^j7`HD0C|YKvSr&EcH*{T=GJGNMPL#9N0JQ)%QhvRxq|*cgAXo6e?3 z%vehF1|_;_Oc8YajAH-q4A=vO?&{4}sQx=Pm`GJwU-7-h5!# zk|A8i;bx`Ll3Dt}wD4(F&e+;rqn03|FX%Xbhh>_R_cvQ0vV{azDilw*)CpghD8P(2 z90tP7S}I}~c(}8R4f`on)U|p@kV(zb?{sbt$*MDTiAmWibwEkuiWZzb^GQfsC(9k7 zVM}6Uo%iF)!fj|*T3m08y9OUOksY%oB0V9?!eEOJC8)#2UQU{yTmv%7ospteeH9sb` zTn!XNEDaw%z3}aD!!J_d51Digdg9`1*o}*)qIt?wFgflP5t+9CDOcm!#)by8zs>!P zE4R~mUi)dAX7Q}MKdx1jB$dd9BQ4x=QC4ztq%t8_xJn9LZ_uW;i$ra`2-4doQ|-M= zD)z1pjbDYztwm)uw_0+1vPG5UF`MJJB;@ZeudMOi6%^4LLID_7CJ>a-8UmsBZ4v!9 zxRW=uDO)`e^d{#P6uA9rCv4}lKAbP5Kwq^*FSNuaP8KE|N=Kx+fJ7ch7SsJ&pUan- zx%!V0{u?W$7Wf;bF5tfUxzHI~+K=7O6s4}@@uuB65LMi<3{ z4n`+)xJmpQ2(ZWZYLIL;r-sMxk45naVh2rt_*GVIah_UFkBYbCdSufJCnl{L9k2_X z$i=}bXKc;+MnHqXw|DZ%+2~(-2~_UgU#V#di?Sr3)yRR-H==n0{;QEBqHJi-Vl~Et z0a)}eXl3T3)+3xElzo&C@#uQgi)Bm5X{6zJw``d_UBP46nt~^HH#4L>r&pY8^awe2 zG38F5YC`|Pj}dBWg+E)iNNC=`042PHoB7oT-+_$5(nJ;fqV8)Vlz)uPUg-hB$h)o7 zC-Dj&?ZSpCXKcrpH{U9V7IHK2WttFNog;ylJbkUhVEi);C#Kg{8S4JyCRidVdh&>KL#%C7D@s> zCDG}mQk_Jn(kBUkzrXR%0#DcK#M3FAjOSh}ZzBRBAIRkN7i(%_6B}!@JOVjy-alOC zk)dbSGYws@_$>eLUwT71vGm`Q_VZh2;RVf1+7-WD%9`6S7fTr0O$4fO_{vRm-5V*B z@hn&5Mp#eQO6lx3B?tMZ!iL{^g}!+A+@|%+;lGTX40BJDE_VL$Z9fnJM-COq2|?H+ zi&je$ez>dH6FuhlBm(UrLCFvs?+d}OPxoD;LoR-qQ>{So_SaR;*d4!&7>LEfe>&kc z`{N1h%(o%|dLoZbdXk6$mmPC4xVy_1(ty!a%7Hfq@kCi|{9L zeo7!3BEe^WGt07us+_Sq&(^;}>GlI2aU$MoK`2BX0$TB8%DXKa?8G59Z(%f#4{zY6 zI*T$I{B^D{rdj+K@kdAZP|@qS^dGk)aGD-- zY_@nD(sf<(OY`we$b8oFvx2YXBDr@)UCv~}4~@SXw#r7DE&M>0Ble4PS+7tUcR@=2 zoUaA&5ThQIFzCbLpWVI4`K%-}a^VA2vvh3!WG%0ON`pGAvNn6tiO@}tl$R)o0D=Sv ze1G*&-*2ZMODCZo2A(Fs;Z*8cKKcCK2GmO}s0N`q1Z~jsb`}^99dxp>ou>%T_7VIO zq_!)p5r@GYVQutVmzT*aUL5%6Gf)pSFcOase#@ZFgfBwu=O7n?v_%d1=Q*0+dEcpD zrL)9#&NoAqK%9xEIdpa^m-62U%k!=ru(%*izu0qQ{mdNkC1LVNg{`%5!#9*F$55cg z$mG)%q>Rapo7+}2ZTap**t#(tH;_pfSm#-@OWWBue!^BHAs#qfN8Z1IJUGf+PTEx? zuOsa`L*7+O+IE$+wWzd+yrbM-4jk%vP)pufXKNGh)^9zDX%!nb?=@`2%&W>0v~}CJ z6cpGtG0h+`))oITkmRqQeTB)6m(6Qf>n1)hs z8BLKM;fgGmSsUnNJ&8FpQxNVkiu^%=In|J*c&ZC`@kL`Vp7qM55h3}qMwwO*7MAk# zTKSk|@`#XBo`3Y>SP?(mrTbBtWk^j42tA@0%HzTF3!8;@ps9tRpTSay)dzaRMp(QsPRs(AnQdV$cr*Puz|> z(VgAHt9b$BFFWb@Um_AvkBTP~X;a$%=7M_*T5HJ<{14Nc1Tr4H!iN1GtcrbTUb_Qa zv1DvZG z2=~Ul2~I3MqE5`bDtq_9Rhu;}H|~MZy(e=t%_;X`@KQ#Trs?TR7=C%9Qd4QU2f_C< z3nBJ}8Y->&0-JfEgNDdoNSNn}6wPB>Rlf$y4bQ*aeOK+2h~Q27IkK=)kdUhFHcXxnB*R_92R0f1 zxu-~yCoEl-NX1?XrT~;B(w8?^8&->!8I}o~R_pz{Q@<=>lv8-zo7o#RBQkA|M^~|m zM4sM5#@wqqKA1AtpW5G_(tn&R7va_zYUfnkkW~ zj+3ZGx!}sr&8$z}k$XXK8zIsYT@YOqnNIoaYe2y1%+^0M3j{HA!Jt&YIWjw& zI9>4ZfQ0uygH~qua;wbFG?s{N?b-0!MaKOBhUdlGR26BYA{M`0ydIsDXUP4LEq9BA zPB9CPd~r&`&EU`iStOeH5S0VHx|rWqx90NjEDt7!4^zdO!-<(Or&(f&EblPY`@=nQK%z_X9+l(U|ojH2P-X)k*AvFH@%=+z7eT=A9u}v&+ zi&>Lf06591S*1xr!F%3McA~M*4v}C+&u%LIe0j}@fQ>7z)Z_~7E?#k>j$dqZDEI1$QF|LA4)ln!ezFJq!^dp>Bl}gGL-4hj(noV3!Z(1+gB>BZO9-lP+7wPA!(G4@79&|(@ z{BQkyp84BcN^~Ls@M0)rftCU!0{BdY|EkDQgvD|g4?)Jy z>&7g`5H=o*OC;j3hi!!s_OTrts^XB6ev0<`(8}`N-v7fh0`ayKqA-s20|-pI^4*dD z>n@_=PGC-<$-4j`iVmXthN zQyCQHcUK66&0j`eqYEjxLsy7+2eL^E+#{3k1LS+Bs&&9c0Ju~Zu>Tta@?udgQGmYy z;APyWKby0vLd!7!i=^;tR)x)t&Z{gPm(nty(!2owneb+>fS?t#A$Y|s7;4)H^GKw5 z1VS6U7us-biTY3aIP|wvM%`S+UYOcIzz={7RJN@2nghXcx=9_2q8E*#^o_nT%>{1Q zM;0Yc2I6bUqFfDAv2>?d=vtYN{buR775V(G#J(?qSImZ>6)PZk_G}nzo;{DyN+P!s z2y@A#xtIt+7y?j-6JCaa5yY?&xX&Z-uUbiUnhc0&JUX68jvx%R62S;uTpa&_D0UDY zgAv3xBXIx4@jdi^D|5(Jw(QC5WOg#Ul}(ncOjafeTlJyek)IAoC%KaB(!%p ze}TC8ojBrdgLp>J>;#TDyA}~hU<9{<{|j%4!aqka?gH=6zCtcHug(Z@i-6&_mP{|X zB)KG3VnKUKt<_}7)ydV#)nsy-{wzg1!Uj6AIK>l!mh^MKy%opaN)THWTTRvsc<5z} z`)G-mN*vL$e(trmyq)yxfejfXLu8mNCQHatvWzSzE67T+imWDU$S!?+V05v||Mv{t zxC5X7&C=BWHjn~7aY}d~J_!;bzUUa}Iv|2wo7rW}uLaOSYFc9uCO$Y<%`4qXSL0TC4cEHbez;O&&jgGk7{D~*yCJa6GmV)B| z#3S0Df^h&~&G0ve4pKk7yA)^x0A|4&d};|e4!}H3SYNE3IG9~9wx`{yy4ay}_TyY` zo}=qn;OzpjJ>#pu!hC@C(hCyD$dktw0o$xB>VuD?w`M)k{!C_ZC*+N=W1 zvfjIXxKF^?p7B-ie8r0OIAE}Lb$zqjsSMU9SvJs=uiaw@&Gp@Or_o)1Y&zk(Qm5TC zfz!4vO%m4BZ64iblfX=?NnoafIoyOR@HCcFG}B`GY^KvB zV1ViIswa)`C%=2QUaw74(*ROW!Q3V^w}%(MbzkKmg6^*O=ZMMs{(*S+vp zo?FrRi_d3|G|_~p4F{)ffYZNHtICRa=v97Au|b@?38&?cQKxUXFmAM#&FZRd0l?pP zU+iuy>ryGXsVkcR4Lt&)nxl8yDC0$Se!ui*D`xwB9c>V+_ zH9Y{uD|$rSiXUT{zM;Z+)LJ%YB%#qvA9z=#^EuvJ5__bFUDjAfO<97)RU~9r?qNj~ z1&m};)>s8VDz-x^)usdY5|WjdrMaQ$D08tz5Bp!K9ba#Xy!Q} zK-G>k*8gLs1fsj}mfT<6qCAo$@Sc|tWC=DD6i*J$q@HbSPOkUpZxA#Byc?IR#f#M~M0 zbCb4FDBGl^t=NfiM|3ixlaspQ0T2UuHRs#K&>XV}Sk$yDgiC3+A#`Zy94G&GNQh82{C?)BblUkITLX%UzYSPJZ@YW`y5e!o$T;16L(kOzB(=l(I z8b{*C8^#8u@rhNJd=$Ha?-?)O7#Tc%^e931?!`$0&u4+BRVG|JIGC~yG93;?lF0}ocoOPaTvnGDJ*+!-7O3gSo@8Y zh5)+4eFwSgT3fj9#qWR=h{nO~AmGkayJxf8nQ;^z)73+>6{;jLOu)A7gp1fSY}BVN zFi};FKBk!tsAhE2&)Ro~KHXDtH=YrWY6;tB48nOM>~Ju!Uz`pPsVzW7yPxV%`XKMG zzc58{;zF(PJuLJzU8odp-c&Bqu`v!cVq@&)oh25A2%S>1WLu}RE*TQhyu!|zbs?;) zr$I_s_c^O}Sl63jdsg?(^s@|1=B;>v%{Q&)B3Lnzxa**u{mz<@c^;UGfeZHlR?`-M z2dE4PtHyuI_Qsn&G67n()v7y!PKYzF0x(yS)B|f#6p8kMs#Ay}-nLN@!)B1eMBJ&R zhg13LUTV6WPwA~B^wZ87%WuWcT{R_9B+iE$KV=P7B~C$z`k~=4pl7EogEnCRhfS{* zVW{3ex}{oGBBIhFrL@`e5FWm=Q`=o@!+o<8)}SdqN|#4dLGP5EwO|32D=-jBC0|eJ zpUnRv282w+`fF*&J_x!8f<=G)4XS&I;d-7_j%^PGonQH8SegI7sD-zjWJ-GtOQ#8HfT>FqBB6^pdeEdcZxvy1pye^XaZ1I|~Pb(6nN z91>UPoIfYx4XgDP*Mb1G^PAQZJ^d>*aYTt9InWdUiSmVU3`XJQNwMg&8YVHpMs4UH zVmkl~zD|@nBY$HD^V@!L1^_a=1ILT|_q&7P@F=hKvq$W)ip#OlEW5vSTa75KZzjog zXn1(Iaot?~#U`;Y%J!CZ6FuFT;3HeZJ^#d>MK=ze3Ah=X(FqQ7Zv zHaGU;%HK_#5we=Px-3=H=S^epL;#sA+R9Y>%%vzrB4}1?Qp|z?P~ip@{dBM{0!fE0 zpih#sa%||Gfy&y$evPK)on#+bTL6Q4uVK%v@1GL~aB;g(Vhu!rFV~ESp(|cF)6?TP zbTKK-JVnZp2Z zF<)ARJ$wB6z5h{|>|?k(uFFK&Jr4~Fj^z2JTRi{x=-|>4^HL9BO0uysH`kky%QnYp z^hgOA>G5kTyL_26}95CYIAW7C9O#BrLY12R_DW=m@ z#{(5ycV@wlSz$SNV=*<`^?G6S;q-w`h({Z8BIl#$vJ38)BojpA=&%LpD}p`}<|Xx0iP5B5u|h>^Y12?GGHH|91*R)~D&(nr;hL~a zjz#87VNi80OZqy`DYU5*S%k9Ml-DNmMkmQ+p)2K*uToq)TPK$#ljVvo4=!nR%77)z z9E?@KgE4_*tUX_-&YrDiN3jRu#}0;4#0t15{WcbE7X@*hv}Ixjd#H<1t=hpZegHcv zLdr=F;_ooblD70I%LJk*3w!$p1PYggK1DJKb-vP(2wfhzG)@ok&S=~?X9l% zC$mx^{ul+winKwwB9%E>?vIki4Mxf;m}OGGRN6C3q_SB2A_@A15{wi`wlnj^7|9c8 zn7N`6KSzXqwgCK)0L(0*KSC&xpg_+I@G+9f&t_)u`lg>J)6q}kj+s8L@8#kK9&R?% z&55{}ET)r;QPls9xbSB!PJD^YOl7hnwZ0Y*rI-Opm~`;7 z7LBrOJYLc^=B+IGn9! zYdA)QXCLT0k8?jLxjYtshz&k*3 zP6r?ig*zK~Yz5<(iQ55d)9bUWBN4*J0nLVOA&R<1IW3(1e>&iXM54cdw!IZZF)}qX zA(o@fqG*a0B^i`hE0ox1<+3Le%lr(T?e2;$cT$OPmnq(28QsF`p?q?GK5OgwWy`Ct zGH!`(5bb`lE_LQ+r+qnFXsB0*7Mh0(4K)AN9pZ0BNHW{{&$FvP_l2o7Tj@h~^9i+( zYJj#GMp1RtaYwa;f`ycTNU0!Y%&1wh&9#e)Uu6EWzH{0CgXiOh@4a7F77Sz~n?UCS zl#%UxRR8PLKD7yC2*Isl0~Vx`JS*4gm?`g;vD9(4`*>}%Z<(@&C&nK4?tW;CWsJef zK&-Pmunb!>6;n1v`%UJ|r1mHEX;`Er?E#}@b=F6@z2na(efJx{Wf|oF+Y3N}zqjf8 z=Um_g)UIe(K(=hz)&rJb!X-nO*WD1gtAlMyPoES`Cew#2;Q#N{z22P#rXV{{l}a$O zUK}O|s6gZbxj1&qu&RK|)M@K5e!tgNsb0c9Fv?JR6>8>UqUk}?fY+s7gEaUqHgJfQ zMPJ6=(6qGH`^oHGA-T1!W8qrMd`%_`4?)P%j-9b30)_bh;G7Drr*8`k=?If<{J{UO z%g^>bX%x%jma6Os6NPQ>IK`G8Ju`K7Re2*=}BbVcTO+G845jP8RrO57n{mRGB}gfSm(j z4xVgp(~o4sS{$-oGpARRqIwD>^X9tc!ZHy%d%G4K!SG%Wmj}& z5CTNn``KrY{nCC1kMvHqX_{?qnxG;gpdg^&k?elHvlavf8|<7ZuR%L;FsZZ*tIn{2 zr{PUxgpn8#Ohyw0MoUFTdu2v1wZ?Gu#wbn3Si_v3vq307fJkZwoyY;OL!0A()h*zF zEUwwDT{oa*5qz}UFp3UwQ!f6}#=Hhkn}9)KHl> z2h?Ng8TF!iefhiJ)5lN2H=HeZY&FifX590l?Sqq4bTpODLWxR$gJ21<@keuo$JfT) zRLeD$gI<&Ws?yoNzY;+mE>&0^%vH4-jDm85XdlP0=w!oPu6j z>Sy~Tk;el0Z-i^~R>#mHGz(3<5%ER?{p_V*E`07dSe#_ZSNvoAbDoeV=9%&&k;!$b zyLWW3dnPYJ+KhqW!SY+DI7=0fCcW&~@E(w-kTc<$2;Yto(vFcMJa_CyFv&LG16P1# z)>aTjSXsw@bNam5)TejAcyOJb;bEuoljSZE!EVgTv*_<1FA3xmg}(qx>EKSVNI6+nQ9iq_=4gc_?m**UPM; z)Xpd5nl{=%2;aj!rZ>~4dZxYA-e{KqK>N|wYEQMD+HmbztB?zus8&SPiYa^3|A;>5cm6G4UrtY8C2 zWE50PEFd-rhlGrrf|80(hD>@{&bsZ96wf1}4hyRS4sIS^K4ropqGBr4Yt*D!i&kB_ z_2@OsX~lRT$yb;C^w%%{lpu#hIA ztj0rx1WP!;g~e(H01e%EpREF1JR*F*38s}!O~XKHD5D&?O!DM2vnk?K$R(&)iBfju zs#U5|YlzF%kD;G6D96LdKsded=N#)s{66hCY_^# zGPGcow;E2_6S1Gy)hu!p$yJgQU=k~jBj&sB6%Bo-xn#fH6`3daff2)p_4oDmba!=jw70dk3~g>|Y^blRt*IVTRasFUi$=ns zvS6UJ*zfat+(oWJr^7CW9QyJoZC9~33RCrLb+o%>zJ$@!k9Q|#_lVTVQ84BSb}Vi* zk*Z^z3zi)$n6CEz$ScxPk6*Nd&@m094XUp;n(}B|3st&?Xf$hfVik4W#+x50P}-%@ z>$|BNwa&=(dVUgNc9+CYZ-DzjtmvKK@Un&8C@ik}O%v2|+hvTrOd9&Zq~s*kR8gcy01jVOk)m|`qp2{DWLv0U4ReWkMM z3gQvmJ>SU;M!C4hN8I{0urZZUOUCccueju21W*vZ#aM&l!f1|uK@zbG)#@oC^%T1$ z-yBl}lD)usjX%T{SM>68JpIS|)61`^I-NjlS2}Q3;>4m}1y+~CiBbpCrxb;H4Gw$OI2({2?TGP8CAlNk#d?`geQf7CXK*@!&< z1|xIY?YtZ0tOYGd@~|m(RB=!Txmp%sZzme#rIX@l8SF)ZKV+Q567gtL%GEXZYvsKY z4Jp#$Jk*_z+s=sY{-6k^Z?RY!s&$gXIg1Oy=dYBIZ;&P>-{m(}5%*Bf;YTJvo;;Hf zZbvV8xGu@ux&UUnQJsw-4J|I`#3f%J^QV5e zSG?C1x*N4nI_XrKgvj{GLr%|E1uJe4?wnYzd64fSnH~a41;8u{r4BKvyOj+DZXnEH zhx?{0p3@3Rbj4t=NSmHK0dOTA?A>c)RMyRVBi5^x*oMR%>!c=dYlm zG!?<(B2~?fO6pQS2gwGY05O0d+yh=p4>Y4?uM-R|`n`QL&&8rfiL@=H& zB!aDdHA+*%?F_WMfRhWNcp(A;89qgP3eKw zc*^eq+vn+@Mx;6B&`EU0TT=LY!8=W~7_zh&uQY;7Y0R_RXC^S!Cc>20pI`kdmNx>!XQ(B|u-@zC%G}CX^2AJyE1QMHk0;>yFDw zy8Jx>7+UV9K@lQ|z^vkyU#beoZp%)@UP$EK?oZboAlHfsOK&Em7KIOO3J(li!2k|` z7CxXj3kts>CQ0={uH4xGe;5pKVHp%#4sL01#~9 zmFJn1%rOBufkb!j#E0mDIg0$_5jtNS@XfkW0I$>Jba72E$@|QVp9C58CCy}~WjEqN zLnSDmS6B@y&~-7Rqa{r}KOUbNI1(DRfec4PC zDzBx9x38P*x_hBo6Yugl(R~nxfSxqptpy24-gH96&=kzvjM+!z9FcW(b%sCh%o9Z0 z3{(v?@mEd{Wxt`4zjmoIg@itong9@&d0q=zB&$$2QsIRhSPnvz4hxb~%U8@~EGtY~n+6M|k%zU8{43+y-}iuKuY zS=cGEfr=oEvY-)hAY%?#gFH#H8YgmH#_0rv`yC*-PY$({4*xl`jVKU=pd)4`l1y4p zt<4nL4aSOQCgvZl+_n!`JQIA%pI=>`b0(chZl7h)wFGz0_pGxg|87Pm?9j)9$N5aE zmW`!@)~=YxsbulY+A$30(IwD!am1J`JR{4;uc>Esa(-11lDF+T|lH(=2P##4w$>#G_)Y$=)J6qVtQP%gHm{TVU_I+ycuxaBQn z$CP%t18N*gXb}lq9Q7F-HP6RmSurhFr4<}oP3<#9U%7?PXyy zV;?7gT#EYvvK}q?<)Ony_?B3qm}A6Chh>IMe3jS}DA@JM1(=+rSYXi>lQYdzYf^Rrl3U*x8++=Z8Y1_ryfnfUEy)0}yC*i{TVH z^7kf2aq#<+pl^m&;3L49=cxswEfZzKIbF}WlRTQzJA|0QJTHUej1%L!HPYCwhesQW z@uTpGqP7FTdNEUPco2k$5VS6COSyNF`MuU2>1kvU#cd5d2CB$dC+X&0oiFy24NReQ zubU;Nk3muGNMcV>HU%h=>tt}6autlcty7|+T`#l4{8$HalJFpx5;cLM^7rOrf0o5; zXx5orBjo-!W2|QZ2csH9*H809<=XV;QHO}ewHi)0Cvp@)`g-W|!7hZv5(xY@e(-3+ z1xtg`?#M#9ZSMgzjZU;-NAHdl;tJ&LHbh=tQV zq)m*fTsj)Bem;B&7Z^Y!Z{f>T?nQAW4Ua|5Dz3OByUT_-i=Qh9g4u}w*~$V${%eI2 z$fWt8)-Jk7;~cb0E^KyKTc{R1EMx)d8#7|#VKY$#JEM+2inNxr$zavKAP_;Db5@+I#TlQy^dzHllc!9~y zo+u{@l3JjlHu09YQ%2q~3{6gzhc996wzg1N)kAeF;;R+!X~Ll#3CG9oH6rkg8tDrr zixFP5CY)9sm3hDG`vb?)O9hkT%~lBiTMe2x~UlrPhNREX#nwudNQjL|*!Ir_44 zZCX##v&1Q-=){QkATu3ddVx9FJ<0}Rm~LLnqVd|&Oa)$?AE@z<&+P}0C=_!@L06#H zYlw8m^!6Gz&7;_r`1XIR0E3`+O}^sFdyxm@F&IZ(bjrhYxLdKOcO z_+cXvWx9>V8%;I}IX(e1?(u_DHaWNsOHuteL3kt9{+#dr!fsmnI$zjI34+NmwNU6Y zNnu=o-lmfbQwY>&4Q)z5n!q7J^V?U2OuIE5Fi4Bo#-In15A_;q_BhagxJBB_;$eot z4z7`%dg$CMD!Sgu>UHszW5)BLUw2>2vexgWROSAnW6q4=k&*Z8MRp}BZ8ImnM&5%JI>beQPMp3`zL0fH z{L5Vh2BQx_mRa+VNY4hC7ke=v`3Yr>-gEv4F(HbBB{~Ud12~8;$6lrES}3J{@8}?d zkao;Qvcq1q3wnmr#dx0pcxS+suXJt*2Z3H|7zPFzDFfL!_*X;)HM2WQz-KmvzBkv+ zIV7uW_Qon+gF8N~b&we+<=8Wn<#tpBwv>#jOT{2!*>QlUc|zmM&$2&FxaYo`PaO;v zF(-eVutPrGKx^{;E2poDx1&0atRJtTVRCepbqK4u;7zh=5-n!t zg!Q|eVoN(J>MHL~O+_u^UNsr>X?#fxw*!Sii7!~NnN%i0@&QtqkqO6&j+jrA+vlqY z{@V$=Lmp0Q+jE|PvT5#{OEy7NP9Y2dqO!8kEJ_CwnZs5)LLm0k)?soq_KDR*lsGQI3mp;`Xcnn#i1E!n&(qA&fch z_JwMDpII%Qhw$XqKn7N^+_{)HgbKRLS_*eW^4K=kQJQP_E!2#o0`hT2wpUGxEx1Um zEEJ4+U8bchP*XNG{n)K8{T~sOcFH3fnb)g|!yv+IE=ogNk7{x-graRc`ZfKf%5w7z znaa48wUmW|RT_6v>;893``ni}|DEd7qt|xc?asX0-OWUyFep3gk_5w*$5 zHX7mh;7FDiq$0HuzRe>TURnsYXdL1dA(a~QSVD2(%z>rA}6sg#> zS>QLGEK!BZ%t1*z*6LlPf}$dp9apT5v%{ShU$fLD4Dn6wOinez)SOlC&>K~F14|qg zzgwkr5IlAJ{~()?UZoxCws@PRZediATa+%SEO5XzPF=QYSw*yhqwQE+E?)DZ;>9sR zIUR+r7~K^;fX-i1sHDhRjE{MVh976b|A9@-gNH{Bi^INB2n zFX7l&^q8N;rUyBn>%)#-pz8Ry?}-dKL$2?M<;TkNkzhb?W^ySf=#&2F=x9$%D^L*b z+)V7^m`TaHyNN$FjZ0)0c-+!I+2wPwa7XQMa5%fRvu1zwANttu`xyN8{=3VPmetc; zS#$HZ2M#s>s1KH&h9cdZ#(LfC2DiuUh`&uFuA-RG!fNmqvg&O@VZa21-awY% zCHyE0>1Pf*KkDw%N`L*cQG1d_CV|{b8&)z@Jj>@WU{F_a|My+7enM=*iDj|>@K;#z zRirktCo+MGTSP*ZnH~5#k|Mq1i^6iXyjUxsnP4|Fqamrb5{|GkSMMTFmcLOp1p11E!)9o=P1M z7(JX3h>|uyo5F2Uj9@PrNh(f=t2q8UuqBZc$hDB7!X-5Djj(p>57gEo*{BY ziJr@{X5>x63>zI^lu#W@|0tr{H^VXT8PeFw&&Vv-Po#Dn8@!kfH1GePj1K;BVCjD! z+GIgysZ!&JNU}v%!u$bqQCVM#cROc0NO@O%5seP~e*SCrpKskSISNH-wax>a#&4;* zP_-9NdWUXoA81|F*<;tB$s{k#%2v263)<)VGa84eO}+7J?d!Npot=XRM;vUs&`ByU zZm*F{_62i&0eDimzugfU8yO3N>+;s5_cmRxzuvw`wbeMh{i~L*Sl3=39o{=Gp(~+d z+lW^Tl+XcPqExMLGA@54+zTR+m51mTP@aG@TYxnys%iPDv^{&{J#+V*L5f?*9|`!4 z@e>Tde%-Iw!;n!Bu+QF$R%NZaJONyIMgU9DJc;Rt|PId|8}R^tPd zfgRe;zpYf#mXT|J?2Cv0okS#T`H)3L(SK}x!7cmD>OWV%*tz7Xh$ypxNJc2f#ICHc zu|?Dn#lQc(RQUbU0vfo1Qh*R{YvR*56qL4%XUgY=GPJyi$xh@12`O_~)foj|fhJ1UY{!$=oMC8MKP$1zAPA=8J;{ELsa;HKe zcY0-Nja!!818#|?n98$Ksb(IP%rB-;to)5LHym;R^O2q}m*r)y?y~c{>&MhnDw@I~ z#p_F%(-`aCy{_p&OCD94lpi}l^>b#XmsR>eK0~{ z->KrBUT_&p_-<FNolBy-PCk}{!W)EsVkl( zu?i(YJG~1Kefmozd4HraD0I|Y*;tpG)#fa4JL>X{`8%@P3Y;Xq5MzY%nq^a{Sk{*u zcH&Z{QZQ}Fq`vrQv-+eWUa{=>Kh=K6uu;t@mcK4=n+Y}?VpKT8@}Y$)DQiFZ`JW7> zS~|4XNN$&Yf( z*x$;&=O|Z?g2nt&<@9@QCx4BTIHjBJ&C~AyR4#5lGm>dwMtnsa6(#vp-7IDM@SD%c zghfBfWZ%t)$kfjB@1&9khiW%W{`+m_T%`m}>wHzf31&x*O|L+K(9(bZ!!W z32>K>u?v&U9vSeYOmLp9QZ*9g`#oN)IUhKHk%+UzsYJ19x zcoWwCFBO*ffnu7QA%F5+10p<iRFV}b7?(cWwjZ0M2n0ROrTy5>ZQmTTtYjk<$v>Z=Lsu>xpVw0Iek_suG zF;-!mwWbd_ADFB)|E&IdSnZthIoxX+iA*#^~J~`vjrKFhMlya%}>Vd|}r9 zI@W!%kKUZisljyTFblo88I|L@rq*N+XP_`5D?;_CVua&^{7=HYU>dSw1O0ZK;U9(g zc#vyJdWuwLN=}E9#XHk**nN5o`MP2bNA~D86=*9E{b;8OWOjzcmVc*;yCQ$+f))JM zvR3)qcx9nn7RWNl0xp$8vH zaBU0)IsilIl1Q1wek01E?yf^pD1`~PXL?i0>O46OCasq#%M8i1e!Yll6Pt3Zg|6)v z+WBv_@+p-2D19UUm7yfm3;2#h@gRJp6@*+&YSw+7~BAu|^Cy|@^znIMWO0G&D zkf0cCDd@9~=Y?5Pzi3457T z|LzZT*26W`bW-$>Gd2RX$P;^#I`iOnFR@Z9gUs-#t(n#3x;!ueX{{(!O^mkZE^jKf zNdl}-dA3kr%JR##FP_ObAn7vEq&gegK@phf&lyEpqq;g|FvLYk&pJ}PrJzIZfYP8;Rd2TthI7BDEc(im$>gC)uWJc5BblSJ!2cvOhC6PvZ z#wL+|nnq>(j8uha#;g)YFEI01s+a=a`j1eoi3?I1cJe6jxEmnjujL?#u|ob0a>y^s z6`;6)p<_7}O32;hf~1y^MLw>gN4K)p??BKOcN{!%@8F4mTVYo4!uk2Uh*_mjm{q*U z%MQo?>ANQ2IV`eAh+Z1vzu3Ze0N=e*x@eTn%)CKruM*|V`(-E%e{MOMaOu$Yw$%Dy zq}Ih(3a+Yopn1ro^j5;XKw6p^Lw@pDY^R2Xh5AxvT-~q;2ZMCl0Nt8@yP<6mg*`t& zq_jQxX~06}7+iWe+&Wc2D`Rm;j}##GRqsvO!>@AwF<1=Y)k^|B(1*uL2dHdqC`+Aj zY+)aU{0oLi`SeV}Oe!CN!QT2Se|@6w5P)SpK@7vvToWt>K0W@pu)f459^%v}S$l$W z8tPLn{Fy#333G7~6<#*#B9<3@BNKu9#Smfs6AEDo&Vj--rH_Okd_|_Nd!?5&$s6mo z+mhu=(%a=-xrBF*&7K?;L&zSQHtlDE)Rvu{Ytl<7`-Y|!{`8Uxt4&OaiE`pkEFp{6 z_jk=pbSOBN71t~m^$kYt(M3#zbXpf6t%@LsE5k|d7=Bt^qNkC# zE*3{xS3+D}g&?jfPWAc;Q$mUE2zkw-`=x}b0rMhhqg=bRUW=}k>lW3g>lUMDv{Xta z44OAYqvp@Xjx856D^lH7ou5%{(6eeYgI=oyJ)s4RNW9j}AgfkyU{ve;Zfh#DqFg+7 ztogHO)VyJE5Zw~6H?T9k2s?`kk{<$`Figk2P~w8wDsMz&ER4j2c2Qg@Ocu`?NRtTS zUEIiT0%HiM4y1>S!n+Y}yh|WS8<-^~!*Qh|yD%0h%nyrH-t4#_`~srEVGi|UvLHT+ zu-EW5u<5;#H(9ZpmYY%Z?nqXYmWXAco3NGq%GCTG4MS<@mmha_UGz{iwdPbey!RO% za|ZsB050V~TnU?Apml8(Un(OXoKk~7OYL`{ulY0%%oD>5o3`ks2&#aBk{Zq)*yk(! zyACl5G_F@-I0FEk@!P;&E9vG)asWiPT@?0L<);0d^{XiTBgV|`(7u*hx2kDm|KKb% zPgxrg#-{K&j%WYE3rW~b=^O_QOUoC+UBB9F?P~2Gn|elSweI9e-pTc6U~cM#rA@i< z4u7l4qH3**ccxODLn;qf#C*4NOVfK7o3b0{9VJti>~A;L6olQdC)5p-WR{Z%3rNO0R(dvR2)d5zlAh|-s>UA53DXUIh2Lbrx$h@WLk!4pZSq)^eo1n&O; z9*g|Tl7r2wRGBI;79%+Vrx4?lGs#iaMWyFcp(Ike;a|Ds6VLwEC1p~_$flP+fTQ0e zV~MCsoXCpFx+V@e0z6fC;Uc!mg65S~-?1t1k#K%ksSu+LYG0{bBPn42lvQ-ERX~0v zW+BD!sPIs`lRzo>e6A*HDkl?Q3(xy?BTQKN^GPzRPxjr<^USmTGt4vGJ@ZWSJTpu) za4l`Dqa~wyAGAE^+vdp_ztTq~Pgv#y&^H_QZVqo=SG8_kc->yI2ncTpr*_Zk9n~|; zYV8}|H_~qF9??DAX&yeRyRy{0l-d!shgSfI4vj#i#RCAMbO3nT$)Nzm8{3f%3$F{W zy%ky)!j`t=?9E!$xa*HR;vL?ePkB54XzWJi?jqh?ymxbm7YhA~OI{G$5(7hT=^cqr z9Th>H~AKA!d{kfS>NNT&=<(nt}^M;cZQj7gVM4k0A?93J<*ip zkFU%~>R>=qQ=75WOFwg1Z2?Tpl~iQ0YmCHOfo2eHIx9P0j{-;oDf37PDe+_$ucAFL zr2TywRD%`@&@~XJ^rJxdpaiyIlq<=^Rd^iQxPwgDVf;n|mlSsjQKj(Fgre_@xdm4e z*SO|w8d|xEOkSxJT-X%p^4mUtl(Uh2M7VP!c)q%IBU#@`;s1063Q)Qs;v&C%prk}H zyucF@q$^yk99GQua~S%qhbi3867dJ5K58dnC%}aVuF#_<6T8x50|kt(4H6sRXOP~J zc0KD8{@UF`vVmsMdmqhH8v;W$+ZBGizDFnL~mV&as6g=?mHeO|9RP*@_ zfwUw*=hH84s5zrAL<58mU;R`+`~L8UWAMaP{25U8-+}uhvD85te$HhqW}Jq1%{C~w zxo0L%t}JR*R_^?{c5=>S{3CG zkeKt`an27V%SRbgQ47)^i@un~{y0YR4aX*eESawuS=OxWPBJAW#Wkf&h)Ofyw-Tve z9weikPqR&s#w=E}YQiFO0l!?AA&glHA|j0@EV32|V;M49(XB@=dZF0DPGUMFV$dNl zLjr-BEnqn%5|&+P25HhcswSwxm{=wucGIZ!&Dy59vmwBP!&K5)3?I`wk5!)kvB>nj z$@wvqn{61EJ5HbL*a6$vO!HRRr_lk6Kxh)Nd-{Ul6A2xmdnn98i67tbJ(2kR5InB) z8j*NyEFOzAQcqW>UR=y;1JSxn7jSXONh7O1Q-!UWT zOwQ3QT!!+X3Ovnvad5IdWybbP-{6Vg$!Jve(d`r_o%HL$dAJc5kSW`LT!UhifZ%Z+ zwe%P^adz9}RX9v$5rsXM$r}`du3OkCFMV^T3+GPvbu<8-D^6vF~sT3@i+pRxtho9V=(%e>=2#Nw~|@MWY#kw1C3FS{m&a*!eaM9tj#Re=G2dc<7asd zB^%M7%AYIQ=rv%=5tW1Ls*#gt!Q*D)-+p4t17~i&A`HK;{3qS zrL*=MmBF=D*t0VauB(&f&ho1oC{{jE_EbQ>PU>l{{W*5 z3M3b8F{ZykEQ%BbWeArvKumd#706IZk6j-Qp#ud%A^5nJF58;6x`7+p6j}oLsIO=PF;my4##m~S;VrAk>%}J4o}LJ9FZhHT8tH38DSMxV+{`C5Dw!A zj^Y?pm~k8@aE*^SSKj_mo-WwEUqFQOH@q5eTC_p#t&#|sAg#zKp(W4;z^n7FE`N1J z-L5%bItwYq7JHSJoSkUxF0u|z&0b*nVOxQ%F}#kDq(x6a089VmA8()mN*e#8rf88` zfL8IMf`L}mUz$Y=K`&c4Xo?m|0Nb5YC5|*jizI*r=l5-bAuZ3i2?8xZtJn$S!{9I1 zkK+%TqD58*K!Bh`Akx0a-ACHF`BYrj^Qb&zRlVmQmCpASaL~?mskr)X5OgRrXiv3s z^QaM(9u%-nS&C~qPbGt1EAR)$j@Ie?DoR&gp47V^Sy7i7ooH*k=LI5g(Ic1cdgmFl zOe5{mqX*YILl+FLaK3>SXOY4!c#YGh&U1qf^M`0!X9IL=lsh{|pPqK- zM6$FS9DM|^sq3A7_%pYoGU%v?uc{|v73o}xzPR%A=rmx0APPyn5z52}L;D2W0^rRc09^SXPO3ahzg|6OURZ*J&#Q#I+gXS__$f8?5~GsBwMm zON3mu2GDc|1e-CMvVC(-BH!#uY2Kk6zw2PARZMd791^0`I)XNw`Y95HiHo==qXLZC zR*L!|B`4(3F$lP5g_Na#@fGa1c^x%o~k!5yuyL(V}p1% znK+&YTAr_?2oU6977a&k3GcKGor9`}%Az8xE7{rwms{NOBHb#az6k{F`=H_d9r{Ey zM~-7NgqoS(S?rfes%g9 zngVfZ*6jL`pq4TQ3W+yDA>{fwX@e5aDFm_iFm)gZRVd`*2y%*`VAt0omSa0qxn?zPN^VCU>Zw)dwdKwmyb49kA7ueS@KVR-8RUSmrPvzQaiynlsmVF z_MhHk<0?09G+Qlrupb3RF8zh`^Ffw1$nIgFStFfoN-2MQT+Oc(E|;$4C3si1U_7^MJ_z~F=~vG#*6s6E?93R2Uspwd{a&}sGm4$)-Hg{;(ymTjvu|xd@HE2|VUi3M)u?d=HH?Fo zWVZ2am!5Gm+v{1;OiGW!k17T92D1dSi@h{Wi@YGV`uUK7M11uvbPSc;ONrcr#VzC4 z@h`u`4u)(PVE)RLYGw=u&IAdlGZ4($6*FKt`#cS8tf?vA4< z!gh~4x17!Tu@l*TI$DZ8Z?&x9Sga~xyzpWO0!=;RDIs~@dQDIs;t|Q^Fy*hWYk02U zx}6X%H6gBx5Husk&r~mAJ2f1x84N+8I_n9ag^&&RcYRUn8ed4}978h<7a~TxC%KKB zVj?Z-*(TD;- zeddpv0+aWQ1|pa~Q8iCR*k^@{giR1YEJ-*_07e52zyU-G+^8GAZzh^a+pqyDxzNO2 zLP!w%j(eaqX8|5q^Q2^j^CX!^WQ;5ml?+VUG4$D*&poV`ukKMr{& zAEN~cv}VTnO%S7udl5JpC29}sbRzv=OB3-b0@R_m&Fgjf=JLe~nRAayq9hk$-ywMV z%Jx-#frp#6;KvXsKI)p~fauraQx=2;TwH|$L6)<(disy-C2itC&~X}u zwcbZv5OIDh?&Y5Ac8ESW`8d6pz0Y^Tn^uw+&S?TRIS#uAb{1;+GR6(_W^?p$5Kc0` zpHKw3H14n;opwHE5)US2(^hc~ZwbbnQ+_2*9u!@E0B>D1#U7*k(+>HVkIxz1s3j!` zupynjId!kwmDG4FCH0ZCT=aQ@NGStgU^`~&rayVcs(fc1Rxp+VlV!H2DJ89yRmZ1G zpiXvHzL^8Mo0a+L>BYs>bupcmMNvMwZ6=L8ZhDk;;@3w01&J)q-Agfk$=P864;-6t zpI)afcEl~frB->jQv%k|I9oY4Op!=4#mgP2A#t>jqr;@X#sBZYcUu54^c}YA%;%Fy zU-Pa;8@E$RZ)P)w7y;6;Cpj1Tq&}uDiAIF0&{Af!76FJwIKBkBij8YUu59XxcAb7C zE8Zo9yLFhQ0r9E>d$a;_Yt&*q$hIS)+qKHJT8FUQsI}IZsu-SiTH|WQwQal26eWwT z=ycLoE*WwbAr}Pz?wr|4JT`8N++*N;6i9o*ec*6Rg7n#Qh`*t!*!IZ~pzwYfFHRV& zQN&_`?8JsF2ShSUX*x-eW&2s?&N0+$3`=pSe~sxHU>%x-gx1L3=*{f39iM>=_u+he zbDP@kbjs<>JUC6CDr`Dd*;Ia(T*&ggRybSOUPM`7Avn`YrI5nz zuZAr%ey|`$!X~Y!MgSqcS*988LsvaHFvFGgbyLgaG^oy;lrA+bI-P3<*WCAYms2{A zF`4;0<9r!fNJ$A{3X#Dkq`({GtVXovQYl6$cdnLoePe!J%dz9&+WG-utWv)QZDKzy zwRFL34;n??yruYkrO`LS+c^XcJ2J;l3?MS-0XEB}3qddL^%OI1o7R~M+g{oU$Rb=F ze6YgqJ=)=Ushkfjb6Q#fC<&qtmzT%Uvrno_q3avL)om7YX$p~20Cc3W_QJZ{Ctk2_ zlfZecMZGcz@6FJ~45WQyS$1BJW(at$*d zq8q;{rr!YozUhdEj*TBb{@|0-C-E=1Awd91fr9_F^a202pqIx})4D6e5`P85ZTfWp zv(T_d+-u8S)XaO`N5hP(v|-k72IYtoat@f#=`|(BFbD~Yey2v*+sZ^>9Qa5C2w|b` zHxPK}$cG*D{jx|2Di}miAR()l8qm^cU*iCAC_sP%smbwVqQ#61C5?=shb{(aX>YR@ z_zTS>lQXYPXKwcMYtYG zV6daI9N6z;DI5dj-J%L6W>$348RTrLwQAH{xZ9_OGLkk%Yq?9kl2#~Qbbdy~@iP*f zTF`DCEv4*>|Cqv5M2UjOJg+M#9#b?9S7qwEqs_&yU=B}Xy43llRC;vMvviu`rAlVf z>XWvlv2@eN&Ml)}A@Vw?O6HZaQml|kx%Ze}L4B0r!tq>nAkeIs&$fyaDJQ<|bB%;Moy@iQSS?ov+qN(uhXE`7g$^QHibJ9mrm;AH@%Pk>DT literal 0 HcmV?d00001 diff --git a/doc/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 b/doc/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..50cb547f74653d30dafe5455fb8323b72ae6af4e GIT binary patch literal 14772 zcmV;lIZMWOPew8T0RR9106DY(5&!@I0E4su069$n0RR9100000000000000000000 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 z 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 O=l0uVfJ`3CtKbGC-+{#d literal 0 HcmV?d00001 diff --git a/doc/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 b/doc/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8a20d54f18d011a61c005912388b1f72fcd237ba GIT binary patch literal 14908 zcmV-CI>W_xPew8T0RR9106IJX5&!@I0E3VK06EeC0RR9100000000000000000000 z0000Qf>IkG9DxJ|U_Vn-K~z8hhhzwWa0#Cj5eN!_xg>#~OACeu00A}vBm;~H1Rw>3 zP6r?ig*zL2auws4l_2f_+>v65WhBC8O;S&m{eQxNk}>uh-W~zStdvp}iA8Y7Se=r& zF)-$G9B7YFW}mLZzUGtL`E%`ew!eW$@(Y!`nxT@@xZ*$f{)nf?S~`YNVY`+_X%1)J zByRbJ5zdJZjX#k=!u5~tlx9dFfaa>Ki>%b&3f2foW)EnacMlj5?~8zipl@Vjp;$p# zi*#8mn?<=wSw*=_ad_J1yUl_J2Ym;3a8w$AVp9?ZA`0q(iiN0CQCHzI-2Nik<&X8R zDAxu5&##&1{-2%6l!z4)D3k!8P_3%10#?gVrsPp23s&_i1PKBXoFqX=g83Kvjj(@n zsVjHaB*SGKKnHZANC6;k0D%LfqDoWh0@OFxARZz95eGN110O_^L<0&UQSR@q ztq58SA_m)FnhefaiB0VA=oJ7Pb=+rrLO$C+JL~|+TC6S5bTqT@Q!PuDyLePw8I?ce0U zBv&_*Q&T_+2-4=@?cI9=Iw40_+u9M3W&PoQb^d!LU0bpwL+p_4Fh8KYPsr6de{P1k z(@Z#Zm~mM<_5VyY+nJpmY6y$(h|7`Z6ncni_^v5kI+weDW;r`MJK%B&m{>s6fyw|c z03>AtBo!#qHZDWXy2|e=S22^g%+rOGN{0}dHdW3=(Vks~RFsup@6LX?`ey%3@7bH| zCtT5ROAs#d$t|3MPG(zV!g+Bm`ktn7=dxX|MzRFduDh@>HN}V zr6$BKcnKS^P|SO#1oro;RbrW@ZZKrp!AM|1U%&45-+pO*U^VA9y(Zhb8c`7u5jl)t zwEf?yfDo8)`6nI+BcKuJf*4{7V!;Ap#TsIZf^c|3ya^z_f+3+oA<^O?i4q|xQXpw^ zAbG@)3RRFAO^_BHkO2lj1{n?+X%b|L>5!S`Ll#;BS#Awvz0HtqwnKJ04AD3VIqe+e zf*X)qZbR<64|(Vz!m=MgbTB-AqRNt?DE@JVcfKuc||y znX++9jTAgS69EE!9&)zM#H1-16nOn)XHq~jL$dq3A-TeNNQtoOW5uM^(2URu!bD+6 z255@m0Z50=xEMMn0ANKBF<60}kb$^-nZ^IfON14H>pLTCaRB2zr~ZIv zUZw%~R0RMO1_+`D0e}?(01jf$n#K+Uz&$HF8W912iJ63(l|!u>Rlxb~P|O)LgB3Wz zHO=%_zO$ubu;7=GN4XlI8B%G1R;pY3b(Yt>)A96YJo9;7Neg}9oA8r#CS6G`=}ijB zU^1LcCG*KLvWZlXL&%1=G>Cw>>z6w7`Cz2vLq!%e5gUB#4j?5rS$qG_R4kEjnp6ZEwJ!CaC-hS|Y zhs5O-*H+rW!;C^}Je>X|HXg?T$&>VoegC~pT& zRh|kYQmMqM&_n)vB_r!T1$rEW_$nZ+Km$JQ8;u}@oEAoX_eMI%M zl9sXQfHFf+WB{`CU`Un*XJJt0CdM{4(#Y&h$kphajE^!ko|$=>Wnr|%1z40nkU7Xc{)kp9KJJXm&AK0(PJr|$@E&5H*)ln_(PMw zg#94oJFyU&VnAEQ(4GlM(*=3@(2*$&%f|3*P0G!v^6_jSrj?B6MG(a$s2*BE=OZFim14h%4#xL~s*HQe`AbG;cvV zSSXId@kyF6p-Q>yaQ-ST*D#)Oo!r+dno+z)r}hyiSwBZ`PcY;NdMtK0k@}&r)*H6aaAp0z zB`&or^u16O12O#Omp7d9aNG#hx(sg7GRw%Sp{r!?s{qPff==glPe_-HaQ8gGJsg&0 z0t~CUn81>7EGJ_%K84bslWhHA$43hdRJUDeF%ayzf$|fGahXjvJrV9)7_AFS-sjfQiXSGn?N%aa zO9H=)BwctZDv<=CuUYU

    DD?!_feV3n2bp7iu_eL|n68f6Ld z>Z@MzKLSvM9|_iwLKT^m|6G)K7NzDX{$S?dqVeJ!dJ47!Ky)^MEkQ#X1p1;XP=O*>V0R9wV(yNA}W)#CRQ z?GHV*U#rM!i3&|td)}5}Vp|7CTC&Y!xRL;4yv9vKe{W`uXmXL4Je8#HYC(%=XyJ{{ zEVNyI*lv{(6)n4g$%_J-?}=QjFVi!JM&Nl4X67DW&Ub^tz$( z{b=Sm`9v%&y}QIP95NPJBNKh1v}}33re`t~UG4fyQF|p?bv5X`pAg{6D?Ex7wYrPN zb%UGUm3NA$8l*hs>-@nR;x6hc?@_GE=$Qh4+POPCXe5~%>*1=-tWGvZySWsy4{p2m zz@JXWaj_sdlp0jS6ns>HK_ihhckC5u9UTjNZa7khH7>dZ|9Pr+CH8|-J?bsSgV%c6V^z~&waRWrb8o2l7) z(zT#R7_|+Vpz(3@OBDrSAvkz)UsoA^N~e!tp(+kUi$iKETdJr-W{#rCU<86bME(Yd zS}c^DmA}nVxaHEqF?k~)cgNLCG4+N77!?ec>i{9ozgHx*{%QpVUck|2(yozWIAu{k zj36Cb!?=+^kpzW^MYkO|JziN53}uiXq|jqQ zkDTyc?*T(MhKQDD!aqea1?Z{Stmfv+tnJwVBvVd zY#e|n->g{o`#-NpM@R?q0vS{hdY3z?xl(Rvv?gM)2jZ9`KhH>S&Y?@_YPe)Dd%-&) zTKEzz#v6^M=VC3}V;O;IdL)cFE!7G?Ycw1L2KTuWm7QF4!i#3WIFZ&J)#CXA)C#%!TD5T|W}Q$?PT#BN2oc>>51wOH;;WH`|$U z7pDlHm{Y4yD3y`Jx}DiTivfc!uO<%t z5KSBbK(VsCRG87+X9BNWyQPNJi06BppwB#e7B;o3DDduuYLp|+w=VEl3PR&=cLkpO z^grC}?Mk(I-tql7>kq&}UJwQ3K{l$;WqNhbI6ae3prz!$^^UQ)D*LX?k4*@I>7Bph zR=L3^%c^%@1)nd>=}m;2mm*#cX~GK*RGux) z{tz2=Dt`uVCH4j|Qt+zE)0gh$&y>6zQSNrrV<*R@NK8~$-)O>q36MRMCKHblp zF*G3gjMHTLrf}7-G5@4dCyo4Z^>%;TQx*{GOrXecmET%D)MZ%Ycb2MSaQ;G$ECcup z0~fp+z69czRPIndp#&j12rH7dszHmkoR@Pb`2o~okz1QEVMVTbi=V((R*#Nd`xS7v z80S9u8&_jWhLaXVFWkK+wqECTmMvETW4|v#7M?{rG=$z*vzrlt*c^m3IRw2d22DRQ zx~K>|bJsF)l@*WQ9jF0h_Cg}7=9A{14LM61LBC*}$9pJ+q(XTzOZq{ypg=(_V1DI- zAPI0ydaYtdwhr7U~WnqjbZu@}Q4Qfdq#8Q+4Z{m0nhom&gDE$^17Uli7LrZIb~gN z{c@m45GZzdT?mX_$B(z~gwtGdh0IXXg(I3!|!uES5X+X2 zmz8wYY1-OOab)ZO)I0yb-c{BKIRt97Mzsctar=(-{~ACkDRn#pCVh4EJ?Fm8(hMi| zyvRc@iqLEJ0~kP|^}Tt(2%>rkHPxZspzMAEM^1{h1#y{t35`M0Y|t@o!<{L&ebDuQ zT%cDtCkPneoU4X2N`+j~a#icZuXWJzzk<;dg2LpEUP?L~gRI-3twA6b_AVaB?atq* zV1+*_>!Tgr_Ca+X=fs<^dRC#Dl9Xc;`kac$4uu~qu+p>f^H`Tc(9^W2-uT~|m;&}~ zh*nDT0U#I@l;_{(MgmCdk4@&G{Ew3bi7Jy^QsnrbQ&D|nT!R7U)csVy(9mp&&}kC0sl@-|(`_a)x{HM7<6iE$@AZ@O}1=Mzvm9FC17jl+s8%*!o;Utf1v_01)8JLPf>h$+t41%�#c@2U3#`>rMwF?6%z&ALOS3$_4zPHjx!@ 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 literal 0 HcmV?d00001 diff --git a/doc/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 b/doc/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab70f18a843f16dfb1d3b54a2ea0442adadb29b9 GIT binary patch literal 6836 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%0AweD$$Gt)CQ;s3M4>7q3!HjNDP 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 literal 0 HcmV?d00001 diff --git a/doc/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 b/doc/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a8140081e44d7ef2b1cd92a2dda930874c57fa73 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-300-normal-YUMVEFOL.woff2 b/doc/dist/lato-latin-300-normal-YUMVEFOL.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aad98a339043040c3bcb72f319e55a8f028562f1 GIT binary patch literal 23236 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 literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-400-normal-W7754I4D.woff2 b/doc/dist/lato-latin-400-normal-W7754I4D.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ff60934dd0ea9cdd93f961d2dfd1e158357f2a77 GIT binary patch literal 23580 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 QOFh<%JiLFgmWQ+r07g396aWAK literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-700-normal-2XVSBPG4.woff2 b/doc/dist/lato-latin-700-normal-2XVSBPG4.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..11de83feaf0fb872c91fce89534fd4e2d8bbda28 GIT binary patch literal 23040 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 literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 b/doc/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..486d3ecf0a97553e0ad751a183466d10bcb98167 GIT binary patch literal 5624 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 S&~TTeYt5jdfCpaS$|L}V4$a&E literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 b/doc/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..edb9fa6f492362a9ab1f1d674b8f6e6f4e2085d0 GIT binary patch literal 5472 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 WhF)K4IGNT+hd8;|K8&%*Sz!P*WW1>W literal 0 HcmV?d00001 diff --git a/doc/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 b/doc/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2c8aaa866eee8bee09ee05a9809c2fda7cd87bd1 GIT binary patch literal 5368 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 q3kxY4?d;kys!X?dVp*I literal 0 HcmV?d00001 diff --git a/doc/dist/search_data-3FEDF90C.js b/doc/dist/search_data-3FEDF90C.js new file mode 100644 index 0000000..bed5040 --- /dev/null +++ b/doc/dist/search_data-3FEDF90C.js @@ -0,0 +1 @@ +searchData={"items":[{"type":"module","title":"ringbuffer","doc":"Ringbuffer implements a length limited queue. In systems this is often implemented as a ring, or cylic, buffer. Where the writer can push the reader ahead if the buffer is full. This kind of buffers is useful in situations where you can have surges of writers, with a limited amount of readers. And where it is allowed to drop entries from the queue if the readers can't keep up with the writers. An example is a logging system for a http server, which can handle large bursts of requests. The logger is often limited in its throughput, and it is perfectly ok to drop log entries if that means that the server can handle the peak load. This ring buffer is technically not a ring. It is a size limited buffer, implemented in ets. Its main characteristics are: Optimized for writes: non locking and non blocking queue writes; Size limited, define the maximum number of entries upon queue creation; Readers are synchronized to prevent race conditions; Readers return the number of entries that were lost due to too fast writers; As many queues as needed.","ref":"ringbuffer.html"},{"type":"function","title":"ringbuffer.delete/1","doc":"Delete a named ringbuffer, all queued data is destroyed. The ets table and the synchronizing process are deleted.","ref":"ringbuffer.html#delete/1"},{"type":"function","title":"ringbuffer.new/2","doc":"Create a new named buffer of Size entries. The name must be unique for all ets tables. The name must be an atom, and is used for the name of the ets table. A process owning the ets table and synchronizing the readers is added to <tt>ringbuffer_sup</tt>.","ref":"ringbuffer.html#new/2"},{"type":"function","title":"ringbuffer.read/1","doc":"Read the next entry from the named ringbuffer. Return the number of skipped entries and the payload of the entry read. An entry is skipped if the readers are falling behind the writers by more that the size of the buffer. <tt>{error, empty}</tt> is returned if the buffer is empty.","ref":"ringbuffer.html#read/1"},{"type":"function","title":"ringbuffer.start/0","doc":null,"ref":"ringbuffer.html#start/0"},{"type":"function","title":"ringbuffer.whereis/1","doc":"Find the ringbuffer with a certain name, return the pid if found, otherwise undefined.","ref":"ringbuffer.html#whereis/1"},{"type":"function","title":"ringbuffer.write/2","doc":"Add an entry to the named ringbuffer. Never fails, if the ringbuffer is full then older entries are overwritten.","ref":"ringbuffer.html#write/2"},{"type":"type","title":"ringbuffer.ringbuffer/0","doc":null,"ref":"ringbuffer.html#t:ringbuffer/0"},{"type":"module","title":"ringbuffer_app","doc":"RingBuffer application","ref":"ringbuffer_app.html"},{"type":"function","title":"ringbuffer_app.start/2","doc":"Application callback, start the ringbuffer supervisor.","ref":"ringbuffer_app.html#start/2"},{"type":"function","title":"ringbuffer_app.stop/1","doc":"Application callback, called when stopping the application.","ref":"ringbuffer_app.html#stop/1"},{"type":"module","title":"ringbuffer_process","doc":"Process to own the created ets table for the ring buffer.","ref":"ringbuffer_process.html"},{"type":"function","title":"ringbuffer_process.code_change/3","doc":null,"ref":"ringbuffer_process.html#code_change/3"},{"type":"function","title":"ringbuffer_process.handle_call/3","doc":null,"ref":"ringbuffer_process.html#handle_call/3"},{"type":"function","title":"ringbuffer_process.handle_cast/2","doc":null,"ref":"ringbuffer_process.html#handle_cast/2"},{"type":"function","title":"ringbuffer_process.handle_info/2","doc":null,"ref":"ringbuffer_process.html#handle_info/2"},{"type":"function","title":"ringbuffer_process.init/1","doc":null,"ref":"ringbuffer_process.html#init/1"},{"type":"function","title":"ringbuffer_process.process_pid/1","doc":"Find the process pid for the process owning the ets table. If the buffer does not exist then an error is returned.","ref":"ringbuffer_process.html#process_pid/1"},{"type":"function","title":"ringbuffer_process.read/1","doc":"Read a payload from the buffer. Skip entries that are deleted by the writers. There are a coupe of race conditions we need to take care of: 1. Writer incremented -> Reader tries entry --> Writer writes entry In this case the w-value read by the reader is Size smaller than that of the writer. In this case we wait till the writer finishes writing. 2. Two or more readers arrive at the same time, incrementing the reader value. One of the readers will have the correct value and can fetch the next entry. In this case the reader can move past the writer if there are not enough entries in the buffer for all readers. For the case where multiple readers are racing past the writer can not be solved without synchronization, we let the ringbuffer process handle the reader increment.","ref":"ringbuffer_process.html#read/1"},{"type":"function","title":"ringbuffer_process.start_link/2","doc":"Create a new process managing a ringbuffer.","ref":"ringbuffer_process.html#start_link/2"},{"type":"function","title":"ringbuffer_process.terminate/2","doc":null,"ref":"ringbuffer_process.html#terminate/2"},{"type":"function","title":"ringbuffer_process.write/2","doc":"Write a payload the buffer. If the readers can't keep up then older entries are deleted.","ref":"ringbuffer_process.html#write/2"},{"type":"module","title":"ringbuffer_sup","doc":"Supervisor for the ring buffers processes.","ref":"ringbuffer_sup.html"},{"type":"function","title":"ringbuffer_sup.find_child/1","doc":"Find the Pid of the ringbuffer with a certain name.","ref":"ringbuffer_sup.html#find_child/1"},{"type":"function","title":"ringbuffer_sup.init/1","doc":"Supervisor callback, initialize the children.","ref":"ringbuffer_sup.html#init/1"},{"type":"function","title":"ringbuffer_sup.start_child/2","doc":"Start a ringbuffer.","ref":"ringbuffer_sup.html#start_child/2"},{"type":"function","title":"ringbuffer_sup.start_link/0","doc":"Start the simple_one_for_one supervisor for the ring buffer processes.","ref":"ringbuffer_sup.html#start_link/0"},{"type":"function","title":"ringbuffer_sup.stop_child/1","doc":"Stop a ringbuffer. The managing process is removed from the supervisor and the ets table is released.","ref":"ringbuffer_sup.html#stop_child/1"},{"type":"extras","title":"Overview","doc":"[![Test](https://github.com/zotonic/ringbuffer/workflows/Test/badge.svg)](https://github.com/zotonic/ringbuffer/actions?query=workflow%3ATest)\n[![Hex version](https://img.shields.io/hexpm/v/ringbuffer.svg \"Hex version\")](https://hex.pm/packages/ringbuffer)\n\nRingbuffer\n==========\n\nA ring buffer implementation using Erlang and ets tables.\n\nMain feature is lock free writing without message passing, making\nthis implementation ideal for log systems with many fast writers or\nbig bursts.\n\nRingbuffer implements a length limited queue. In systems this is\noften implemented as a ring, or cylic, buffer. Where the writer can\npush the reader ahead if the buffer is full.\n\nThis kind of buffers is useful in situations where you can have\nsurges of writers, with a limited amount of readers. And where it\nis allowed to drop entries from the queue if the readers can't keep\nup with the writers.\n\nAn example is a logging system for a http server, which can handle large\nbursts of requests. The logger is often limited in its throughput, and it\nis perfectly ok to drop log entries if that means that the server can\nhandle the peak load.\n\nThis ring buffer is technically not a ring. It is a size limited buffer,\nimplemented in ets. Its main characteristics are:\n\n * Optimized for writes: non locking and non blocking queue writes;\n * Size limited, define the maximum number of entries upon queue creation;\n * Readers are synchronized to prevent race conditions;\n * Readers return the number of entries that were lost due to too fast writers;\n * As many queues as needed.\n\nThe size of the ring is set upon creation. If the ring is full\nthen older entries are overwritten. Overwritten entries are skipped\nwhen reading the next entry. The number of skipped entries is\nreturned.\n\nThe ring's ets table is owned by a process managed by the ringbuffer_sup.","ref":"readme.html"},{"type":"extras","title":"Installation - Overview","doc":"RingBuffer is at Hex, in your `rebar.config` file use:\n\n```erlang\n{deps, [\n ringbuffer\n]}.\n```\n\nYou can also use the direct Git url and use the development version:\n\n```erlang\n{deps, [\n {ringbuffer, {git, \"https://github.com/zotonic/ringbuffer.git\", {branch, \"main\"}}}\n]}.\n```","ref":"readme.html#installation"},{"type":"extras","title":"Usage - Overview","doc":"First create a ringbuffer. The buffer is named with an atom\nand needs a size of the maximum amount of items to buffer.\n\n```erlang\n {ok, Pid} = ringbuffer:new(name, 1000)\n```\n\nThen an entry can be written:\n\n```erlang\n ok = ringbuffer:write(name, Payload).\n```\n\nThe `Payload` can be any Erlang term.\n\n\nIt can be read afterwards:\n\n```erlang\n {ok, {NSkipped, Payload}} = ringbuffer:read(name).\n```\n\nThe `NSkipped` is the number of entries skipped during reads. If the consumer\ncan keep up with the producers then it will be `0`. If entries are overwritten\nthen it will return the number of overwritten entries.\n\nIf the buffer is empty then an error is returned:\n\n```erlang\n {error, empty} = ringbuffer:read(name).\n```","ref":"readme.html#usage"},{"type":"extras","title":"Use in your own supervisor - Overview","doc":"You can use ringbuffer in your own supervisor with the following child spec:\n\n```erlang\n % Size and name of the ringbuffer\n BufferSize = 1000,\n NameOfMyBuffer = foobar,\n % The child spec for your supervisor\n #{\n start => {ringbuffer_process, start_link, [NameOfMyBuffer, BufferSize]},\n restart => permanent,\n type => worker\n }\n```","ref":"readme.html#use-in-your-own-supervisor"},{"type":"extras","title":"Test - Overview","doc":"Run the tests:\n\n```\nmake test\n```\n\nAll tests should pass.\n\nFor additional checks, also run:\n\n```\nmake xref\nmake dialyzer\n```","ref":"readme.html#test"},{"type":"extras","title":"License - Overview","doc":"Ringbuffer is licensed under the Apache 2.0 license.","ref":"readme.html#license"},{"type":"extras","title":"License","doc":"Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"license.html"}],"proglang":"erlang","content_type":"text/markdown","producer":{"name":"ex_doc","version":"0.35.1"}} \ No newline at end of file diff --git a/doc/dist/sidebar_items-C002F7F1.js b/doc/dist/sidebar_items-C002F7F1.js new file mode 100644 index 0000000..c416d37 --- /dev/null +++ b/doc/dist/sidebar_items-C002F7F1.js @@ -0,0 +1 @@ +sidebarNodes={"modules":[{"id":"ringbuffer","deprecated":false,"group":"","title":"ringbuffer","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"ringbuffer/0","deprecated":false,"title":"ringbuffer/0","anchor":"t:ringbuffer/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/1","deprecated":false,"title":"delete(Name)","anchor":"delete/1"},{"id":"new/2","deprecated":false,"title":"new(Name, Size)","anchor":"new/2"},{"id":"read/1","deprecated":false,"title":"read(Name)","anchor":"read/1"},{"id":"start/0","deprecated":false,"title":"start()","anchor":"start/0"},{"id":"whereis/1","deprecated":false,"title":"whereis(Name)","anchor":"whereis/1"},{"id":"write/2","deprecated":false,"title":"write(Name, Payload)","anchor":"write/2"}],"key":"functions"}]},{"id":"ringbuffer_app","deprecated":false,"group":"","title":"ringbuffer_app","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"start/2","deprecated":false,"title":"start(StartType, StartArgs)","anchor":"start/2"},{"id":"stop/1","deprecated":false,"title":"stop(State)","anchor":"stop/1"}],"key":"functions"}]},{"id":"ringbuffer_process","deprecated":false,"group":"","title":"ringbuffer_process","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"code_change/3","deprecated":false,"title":"code_change(OldVsn, State, Extra)","anchor":"code_change/3"},{"id":"handle_call/3","deprecated":false,"title":"handle_call(_, From, State)","anchor":"handle_call/3"},{"id":"handle_cast/2","deprecated":false,"title":"handle_cast(Msg, State)","anchor":"handle_cast/2"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(Info, State)","anchor":"handle_info/2"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"process_pid/1","deprecated":false,"title":"process_pid(Name)","anchor":"process_pid/1"},{"id":"read/1","deprecated":false,"title":"read(Name)","anchor":"read/1"},{"id":"start_link/2","deprecated":false,"title":"start_link(Name, Size)","anchor":"start_link/2"},{"id":"terminate/2","deprecated":false,"title":"terminate(Reason, State)","anchor":"terminate/2"},{"id":"write/2","deprecated":false,"title":"write(Name, Payload)","anchor":"write/2"}],"key":"functions"}]},{"id":"ringbuffer_sup","deprecated":false,"group":"","title":"ringbuffer_sup","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"find_child/1","deprecated":false,"title":"find_child(Name)","anchor":"find_child/1"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"start_child/2","deprecated":false,"title":"start_child(Name, Size)","anchor":"start_child/2"},{"id":"start_link/0","deprecated":false,"title":"start_link()","anchor":"start_link/0"},{"id":"stop_child/1","deprecated":false,"title":"stop_child(Name)","anchor":"stop_child/1"}],"key":"functions"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"}]},{"id":"readme","group":"","title":"Overview","headers":[{"id":"Installation","anchor":"installation"},{"id":"Usage","anchor":"usage"},{"id":"Use in your own supervisor","anchor":"use-in-your-own-supervisor"},{"id":"Test","anchor":"test"},{"id":"License","anchor":"license"}]},{"id":"license","group":"","title":"License","headers":[]}],"tasks":[]} \ No newline at end of file diff --git a/doc/img/logo.png b/doc/img/logo.png deleted file mode 100644 index 94ea9de05137b897f08fbc6d773ccaeeb0ae042b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9843 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 TY{%yjg-H9T-tXy0tgrnqF_4I{ diff --git a/doc/index.html b/doc/index.html index d7ad9ba..1c8f793 100644 --- a/doc/index.html +++ b/doc/index.html @@ -1,17 +1,10 @@ - + - -The ringbuffer application - - - - - - -<h2>This page uses frames</h2> -<p>Your browser does not accept frames. -<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead. -</p> - - - \ No newline at end of file + + + ringbuffer v1.2.0+build.18.refca920a0 — Documentation + + + + + diff --git a/doc/license.html b/doc/license.html new file mode 100644 index 0000000..1abef3a --- /dev/null +++ b/doc/license.html @@ -0,0 +1,385 @@ + + + + + + + + + + + License — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +

    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + + License +

    + +
    +
    +                              Apache License
    +                        Version 2.0, January 2004
    +                     http://www.apache.org/licenses/
    +
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +1. Definitions.
    +
    +   "License" shall mean the terms and conditions for use, reproduction,
    +   and distribution as defined by Sections 1 through 9 of this document.
    +
    +   "Licensor" shall mean the copyright owner or entity authorized by
    +   the copyright owner that is granting the License.
    +
    +   "Legal Entity" shall mean the union of the acting entity and all
    +   other entities that control, are controlled by, or are under common
    +   control with that entity. For the purposes of this definition,
    +   "control" means (i) the power, direct or indirect, to cause the
    +   direction or management of such entity, whether by contract or
    +   otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +   outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +   "You" (or "Your") shall mean an individual or Legal Entity
    +   exercising permissions granted by this License.
    +
    +   "Source" form shall mean the preferred form for making modifications,
    +   including but not limited to software source code, documentation
    +   source, and configuration files.
    +
    +   "Object" form shall mean any form resulting from mechanical
    +   transformation or translation of a Source form, including but
    +   not limited to compiled object code, generated documentation,
    +   and conversions to other media types.
    +
    +   "Work" shall mean the work of authorship, whether in Source or
    +   Object form, made available under the License, as indicated by a
    +   copyright notice that is included in or attached to the work
    +   (an example is provided in the Appendix below).
    +
    +   "Derivative Works" shall mean any work, whether in Source or Object
    +   form, that is based on (or derived from) the Work and for which the
    +   editorial revisions, annotations, elaborations, or other modifications
    +   represent, as a whole, an original work of authorship. For the purposes
    +   of this License, Derivative Works shall not include works that remain
    +   separable from, or merely link (or bind by name) to the interfaces of,
    +   the Work and Derivative Works thereof.
    +
    +   "Contribution" shall mean any work of authorship, including
    +   the original version of the Work and any modifications or additions
    +   to that Work or Derivative Works thereof, that is intentionally
    +   submitted to Licensor for inclusion in the Work by the copyright owner
    +   or by an individual or Legal Entity authorized to submit on behalf of
    +   the copyright owner. For the purposes of this definition, "submitted"
    +   means any form of electronic, verbal, or written communication sent
    +   to the Licensor or its representatives, including but not limited to
    +   communication on electronic mailing lists, source code control systems,
    +   and issue tracking systems that are managed by, or on behalf of, the
    +   Licensor for the purpose of discussing and improving the Work, but
    +   excluding communication that is conspicuously marked or otherwise
    +   designated in writing by the copyright owner as "Not a Contribution."
    +
    +   "Contributor" shall mean Licensor and any individual or Legal Entity
    +   on behalf of whom a Contribution has been received by Licensor and
    +   subsequently incorporated within the Work.
    +
    +2. Grant of Copyright License. Subject to the terms and conditions of
    +   this License, each Contributor hereby grants to You a perpetual,
    +   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +   copyright license to reproduce, prepare Derivative Works of,
    +   publicly display, publicly perform, sublicense, and distribute the
    +   Work and such Derivative Works in Source or Object form.
    +
    +3. Grant of Patent License. Subject to the terms and conditions of
    +   this License, each Contributor hereby grants to You a perpetual,
    +   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +   (except as stated in this section) patent license to make, have made,
    +   use, offer to sell, sell, import, and otherwise transfer the Work,
    +   where such license applies only to those patent claims licensable
    +   by such Contributor that are necessarily infringed by their
    +   Contribution(s) alone or by combination of their Contribution(s)
    +   with the Work to which such Contribution(s) was submitted. If You
    +   institute patent litigation against any entity (including a
    +   cross-claim or counterclaim in a lawsuit) alleging that the Work
    +   or a Contribution incorporated within the Work constitutes direct
    +   or contributory patent infringement, then any patent licenses
    +   granted to You under this License for that Work shall terminate
    +   as of the date such litigation is filed.
    +
    +4. Redistribution. You may reproduce and distribute copies of the
    +   Work or Derivative Works thereof in any medium, with or without
    +   modifications, and in Source or Object form, provided that You
    +   meet the following conditions:
    +
    +   (a) You must give any other recipients of the Work or
    +       Derivative Works a copy of this License; and
    +
    +   (b) You must cause any modified files to carry prominent notices
    +       stating that You changed the files; and
    +
    +   (c) You must retain, in the Source form of any Derivative Works
    +       that You distribute, all copyright, patent, trademark, and
    +       attribution notices from the Source form of the Work,
    +       excluding those notices that do not pertain to any part of
    +       the Derivative Works; and
    +
    +   (d) If the Work includes a "NOTICE" text file as part of its
    +       distribution, then any Derivative Works that You distribute must
    +       include a readable copy of the attribution notices contained
    +       within such NOTICE file, excluding those notices that do not
    +       pertain to any part of the Derivative Works, in at least one
    +       of the following places: within a NOTICE text file distributed
    +       as part of the Derivative Works; within the Source form or
    +       documentation, if provided along with the Derivative Works; or,
    +       within a display generated by the Derivative Works, if and
    +       wherever such third-party notices normally appear. The contents
    +       of the NOTICE file are for informational purposes only and
    +       do not modify the License. You may add Your own attribution
    +       notices within Derivative Works that You distribute, alongside
    +       or as an addendum to the NOTICE text from the Work, provided
    +       that such additional attribution notices cannot be construed
    +       as modifying the License.
    +
    +   You may add Your own copyright statement to Your modifications and
    +   may provide additional or different license terms and conditions
    +   for use, reproduction, or distribution of Your modifications, or
    +   for any such Derivative Works as a whole, provided Your use,
    +   reproduction, and distribution of the Work otherwise complies with
    +   the conditions stated in this License.
    +
    +5. Submission of Contributions. Unless You explicitly state otherwise,
    +   any Contribution intentionally submitted for inclusion in the Work
    +   by You to the Licensor shall be under the terms and conditions of
    +   this License, without any additional terms or conditions.
    +   Notwithstanding the above, nothing herein shall supersede or modify
    +   the terms of any separate license agreement you may have executed
    +   with Licensor regarding such Contributions.
    +
    +6. Trademarks. This License does not grant permission to use the trade
    +   names, trademarks, service marks, or product names of the Licensor,
    +   except as required for reasonable and customary use in describing the
    +   origin of the Work and reproducing the content of the NOTICE file.
    +
    +7. Disclaimer of Warranty. Unless required by applicable law or
    +   agreed to in writing, Licensor provides the Work (and each
    +   Contributor provides its Contributions) on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +   implied, including, without limitation, any warranties or conditions
    +   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +   PARTICULAR PURPOSE. You are solely responsible for determining the
    +   appropriateness of using or redistributing the Work and assume any
    +   risks associated with Your exercise of permissions under this License.
    +
    +8. Limitation of Liability. In no event and under no legal theory,
    +   whether in tort (including negligence), contract, or otherwise,
    +   unless required by applicable law (such as deliberate and grossly
    +   negligent acts) or agreed to in writing, shall any Contributor be
    +   liable to You for damages, including any direct, indirect, special,
    +   incidental, or consequential damages of any character arising as a
    +   result of this License or out of the use or inability to use the
    +   Work (including but not limited to damages for loss of goodwill,
    +   work stoppage, computer failure or malfunction, or any and all
    +   other commercial damages or losses), even if such Contributor
    +   has been advised of the possibility of such damages.
    +
    +9. Accepting Warranty or Additional Liability. While redistributing
    +   the Work or Derivative Works thereof, You may choose to offer,
    +   and charge a fee for, acceptance of support, warranty, indemnity,
    +   or other liability obligations and/or rights consistent with this
    +   License. However, in accepting such obligations, You may act only
    +   on Your own behalf and on Your sole responsibility, not on behalf
    +   of any other Contributor, and only if You agree to indemnify,
    +   defend, and hold each Contributor harmless for any liability
    +   incurred by, or claims asserted against, such Contributor by reason
    +   of your accepting any such warranty or additional liability.
    +
    +END OF TERMS AND CONDITIONS
    +
    +APPENDIX: How to apply the Apache License to your work.
    +
    +   To apply the Apache License to your work, attach the following
    +   boilerplate notice, with the fields enclosed by brackets "[]"
    +   replaced with your own identifying information. (Don't include
    +   the brackets!)  The text should be enclosed in the appropriate
    +   comment syntax for the file format. We also recommend that a
    +   file or class name and description of purpose be included on the
    +   same "printed page" as the copyright notice for easier
    +   identification within third-party archives.
    +
    +Copyright [yyyy] [name of copyright owner]
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    +
    + + + +
    +
    +
    + + + diff --git a/doc/modules-frame.html b/doc/modules-frame.html index c9e586f..af516e5 100644 --- a/doc/modules-frame.html +++ b/doc/modules-frame.html @@ -2,7 +2,7 @@ The ringbuffer application - +

    Modules

    diff --git a/doc/overview-summary.html b/doc/overview-summary.html index 71be72f..f924942 100644 --- a/doc/overview-summary.html +++ b/doc/overview-summary.html @@ -3,7 +3,7 @@ The ringbuffer application - + diff --git a/doc/readme.html b/doc/readme.html new file mode 100644 index 0000000..f540ac2 --- /dev/null +++ b/doc/readme.html @@ -0,0 +1,252 @@ + + + + + + + + + + + Overview — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + + Overview +

    + +

    Test +Hex version

    Ringbuffer

    A ring buffer implementation using Erlang and ets tables.

    Main feature is lock free writing without message passing, making +this implementation ideal for log systems with many fast writers or +big bursts.

    Ringbuffer implements a length limited queue. In systems this is +often implemented as a ring, or cylic, buffer. Where the writer can +push the reader ahead if the buffer is full.

    This kind of buffers is useful in situations where you can have +surges of writers, with a limited amount of readers. And where it +is allowed to drop entries from the queue if the readers can't keep +up with the writers.

    An example is a logging system for a http server, which can handle large +bursts of requests. The logger is often limited in its throughput, and it +is perfectly ok to drop log entries if that means that the server can +handle the peak load.

    This ring buffer is technically not a ring. It is a size limited buffer, +implemented in ets. Its main characteristics are:

    • Optimized for writes: non locking and non blocking queue writes;
    • Size limited, define the maximum number of entries upon queue creation;
    • Readers are synchronized to prevent race conditions;
    • Readers return the number of entries that were lost due to too fast writers;
    • As many queues as needed.

    The size of the ring is set upon creation. If the ring is full +then older entries are overwritten. Overwritten entries are skipped +when reading the next entry. The number of skipped entries is +returned.

    The ring's ets table is owned by a process managed by the ringbuffer_sup.

    + + + + Installation +

    +

    RingBuffer is at Hex, in your rebar.config file use:

    {deps, [
    +    ringbuffer
    +]}.

    You can also use the direct Git url and use the development version:

    {deps, [
    +    {ringbuffer, {git, "https://github.com/zotonic/ringbuffer.git", {branch, "main"}}}
    +]}.

    + + + + Usage +

    +

    First create a ringbuffer. The buffer is named with an atom +and needs a size of the maximum amount of items to buffer.

        {ok, Pid} = ringbuffer:new(name, 1000)

    Then an entry can be written:

        ok = ringbuffer:write(name, Payload).

    The Payload can be any Erlang term.

    It can be read afterwards:

        {ok, {NSkipped, Payload}} = ringbuffer:read(name).

    The NSkipped is the number of entries skipped during reads. If the consumer +can keep up with the producers then it will be 0. If entries are overwritten +then it will return the number of overwritten entries.

    If the buffer is empty then an error is returned:

        {error, empty} = ringbuffer:read(name).

    + + + + Use in your own supervisor +

    +

    You can use ringbuffer in your own supervisor with the following child spec:

        % Size and name of the ringbuffer
    +    BufferSize = 1000,
    +    NameOfMyBuffer = foobar,
    +    % The child spec for your supervisor
    +    #{
    +        start => {ringbuffer_process, start_link, [NameOfMyBuffer, BufferSize]},
    +        restart => permanent,
    +        type => worker
    +    }

    + + + + Test +

    +

    Run the tests:

    make test

    All tests should pass.

    For additional checks, also run:

    make xref
    +make dialyzer

    + + + + License +

    +

    Ringbuffer is licensed under the Apache 2.0 license.

    +
    + + + +
    +
    +
    + + + diff --git a/doc/ringbuffer.epub b/doc/ringbuffer.epub new file mode 100644 index 0000000000000000000000000000000000000000..d27edb895182367ce769c59948967521d848b5c4 GIT binary patch literal 23046 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 - - - -Module ringbuffer - - - - -
    - -

    Module ringbuffer

    -Ringbuffer implements a length limited queue. -

    Copyright © 2021 Marc Worrell

    - -

    Authors: Marc Worrell (marc@worrell.nl).

    - -

    Description

    Ringbuffer implements a length limited queue. In systems this is -often implemented as a ring, or cylic, buffer. Where the writer can -push the reader ahead if the buffer is full.

    - -

    This kind of buffers is useful in situations where you can have -surges of writers, with a limited amount of readers. And where it -is allowed to drop entries from the queue if the readers can't keep -up with the writers.

    - -

    An example is a logging system for a http server, which can handle large -bursts of requests. The logger is often limited in its throughput, and it -is perfectly ok to drop log entries if that means that the server can -handle the peak load.

    - -

    This ring buffer is technically not a ring. It is a size limited buffer, -implemented in ets. Its main characteristics are:

    - -
      -
    • Optimized for writes: non locking and non blocking queue writes;
    • -
    • Size limited, define the maximum number of entries upon queue creation;
    • -
    • Readers are synchronized to prevent race conditions;
    • -
    • Readers return the number of entries that were lost due to too - fast writers;
    • -
    • As many queues as needed.
    • -
    - -

    Data Types

    - -

    ringbuffer()

    -

    ringbuffer() = term()

    - - -

    Function Index

    - - - - - -
    delete/1Delete a named ringbuffer, all queued data is destroyed.
    new/2Create a new named buffer of Size entries.
    read/1Read the next entry from the named ringbuffer.
    start/0
    write/2Add an entry to the named ringbuffer.
    - -

    Function Details

    - -

    delete/1

    -
    -

    delete(Name::atom()) -> ok | {error, not_found}

    -

    -

    Delete a named ringbuffer, all queued data is destroyed. The ets table and the - synchronizing process are deleted.

    - -

    new/2

    -
    -

    new(Name::atom(), Size::pos_integer()) -> {ok, pid()} | {error, term()}

    -

    -

    Create a new named buffer of Size entries. The name must be unique for all ets tables. - The name must be an atom, and is used for the name of the ets table. A process owning the - ets table and synchronizing the readers is added to ringbuffer_sup.

    - -

    read/1

    -
    -

    read(Name::atom()) -> {ok, {non_neg_integer(), term()}} | {error, empty}

    -

    -

    Read the next entry from the named ringbuffer. Return the number of skipped entries and - the payload of the entry read. An entry is skipped if the readers are falling behind the - writers by more that the size of the buffer. {error, empty} is returned if the - buffer is empty.

    - -

    start/0

    -
    -

    start() -> any()

    -

    + + + + + + + + + + + ringbuffer — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + ringbuffer + (ringbuffer v1.2.0+build.18.refca920a0) + +

    + + +
    +

    Ringbuffer implements a length limited queue. In systems this is often implemented as a ring, or cylic, buffer. Where the writer can push the reader ahead if the buffer is full.

    This kind of buffers is useful in situations where you can have surges of writers, with a limited amount of readers. And where it is allowed to drop entries from the queue if the readers can't keep up with the writers.

    An example is a logging system for a http server, which can handle large bursts of requests. The logger is often limited in its throughput, and it is perfectly ok to drop log entries if that means that the server can handle the peak load.

    This ring buffer is technically not a ring. It is a size limited buffer, implemented in ets. Its main characteristics are:

    • Optimized for writes: non locking and non blocking queue writes;
    • Size limited, define the maximum number of entries upon queue creation;
    • Readers are synchronized to prevent race conditions;
    • Readers return the number of entries that were lost due to too fast writers;
    • As many queues as needed.
    +
    + +
    + +
    +

    + + + + Summary +

    +
    +

    + Types +

    + +
    +
    + ringbuffer/0 + +
    + +
    + +
    +
    +

    + Functions +

    + +
    +
    + delete(Name) + +
    + +

    Delete a named ringbuffer, all queued data is destroyed. The ets table and the synchronizing process are deleted.

    + +
    + +
    + + +

    Create a new named buffer of Size entries. The name must be unique for all ets tables. The name must be an atom, and is used for the name of the ets table. A process owning the ets table and synchronizing the readers is added to <tt>ringbuffer_sup</tt>.

    + +
    + +
    +
    + read(Name) + +
    + +

    Read the next entry from the named ringbuffer. Return the number of skipped entries and the payload of the entry read. An entry is skipped if the readers are falling behind the writers by more that the size of the buffer. <tt>{error, empty}</tt> is returned if the buffer is empty.

    + +
    + +
    +
    + start() + +
    + +
    + +
    + + +

    Find the ringbuffer with a certain name, return the pid if found, otherwise undefined.

    + +
    + +
    + + +

    Add an entry to the named ringbuffer. Never fails, if the ringbuffer is full then older entries are overwritten.

    + +
    + +
    + +
    + + +
    +

    + + + + Types +

    +
    +
    + +
    + + + +

    ringbuffer/0

    + + + + + + +
    + +
    + +
    + +
    -type ringbuffer() :: term().
    + +
    + + +
    +
    + +
    +
    + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + +

    delete(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec delete(Name) -> ok | {error, not_found} when Name :: atom().
    + +
    + +

    Delete a named ringbuffer, all queued data is destroyed. The ets table and the synchronizing process are deleted.

    +
    +
    +
    + +
    + + + +

    new(Name, Size)

    + + + + + + +
    + +
    + +
    + +
    -spec new(Name, Size) -> {ok, pid()} | {error, Reason}
    +             when Name :: atom(), Size :: pos_integer(), Reason :: {already_started, pid()} | term().
    + +
    + +

    Create a new named buffer of Size entries. The name must be unique for all ets tables. The name must be an atom, and is used for the name of the ets table. A process owning the ets table and synchronizing the readers is added to <tt>ringbuffer_sup</tt>.

    +
    +
    +
    + +
    + + + +

    read(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec read(Name) -> {ok, {SkipCount, Payload}} | {error, empty}
    +              when Name :: atom(), SkipCount :: non_neg_integer(), Payload :: term().
    + +
    + +

    Read the next entry from the named ringbuffer. Return the number of skipped entries and the payload of the entry read. An entry is skipped if the readers are falling behind the writers by more that the size of the buffer. <tt>{error, empty}</tt> is returned if the buffer is empty.

    +
    +
    +
    + +
    + + + +

    start()

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    whereis(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec whereis(Name) -> pid() | undefined when Name :: atom().
    + +
    + +

    Find the ringbuffer with a certain name, return the pid if found, otherwise undefined.

    +
    +
    +
    + +
    + + + +

    write(Name, Payload)

    + + + + + + +
    + +
    + +
    + +
    -spec write(Name, Payload) -> ok when Name :: atom(), Payload :: term().
    + +
    + +

    Add an entry to the named ringbuffer. Never fails, if the ringbuffer is full then older entries are overwritten.

    +
    +
    + +
    +
    + + +
    +
    -

    write/2

    -
    -

    write(Name::atom(), Payload::term()) -> ok

    -

    -

    Add an entry to the named ringbuffer. Never fails, if the ringbuffer - is full then older entries are overwritten.

    -
    - - -

    Generated by EDoc

    - + diff --git a/doc/ringbuffer_app.html b/doc/ringbuffer_app.html index f0ca049..b24ee4c 100644 --- a/doc/ringbuffer_app.html +++ b/doc/ringbuffer_app.html @@ -1,43 +1,257 @@ - - - - -Module ringbuffer_app - - - - -
    - -

    Module ringbuffer_app

    -RingBuffer application. -

    Copyright © 2021 Marc Worrell

    - -

    Behaviours: application.

    -

    Authors: Marc Worrell (marc@worrell.nl).

    - -

    Description

    RingBuffer application -

    Function Index

    - - -
    start/2Application callback, start the ringbuffer supervisor.
    stop/1Application callback, called when stopping the application.
    - -

    Function Details

    - -

    start/2

    -
    -

    start(StartType, StartArgs) -> any()

    -

    -

    Application callback, start the ringbuffer supervisor.

    - -

    stop/1

    -
    -

    stop(State) -> any()

    -

    -

    Application callback, called when stopping the application.

    -
    - - -

    Generated by EDoc

    - + + + + + + + + + + + ringbuffer_app — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + ringbuffer_app + (ringbuffer v1.2.0+build.18.refca920a0) + +

    + + +
    +

    RingBuffer application

    +
    + +
    + +
    +

    + + + + Summary +

    +
    +

    + Functions +

    + +
    + + +

    Application callback, start the ringbuffer supervisor.

    + +
    + +
    +
    + stop(State) + +
    + +

    Application callback, called when stopping the application.

    + +
    + +
    + +
    + + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + +

    start(StartType, StartArgs)

    + + + + + + +
    + +
    + +

    Application callback, start the ringbuffer supervisor.

    +
    +
    +
    + +
    + + + +

    stop(State)

    + + + + + + +
    + +
    + +

    Application callback, called when stopping the application.

    +
    +
    + +
    +
    + + +
    +
    +
    + + diff --git a/doc/ringbuffer_process.html b/doc/ringbuffer_process.html index 04654a5..8de6679 100644 --- a/doc/ringbuffer_process.html +++ b/doc/ringbuffer_process.html @@ -1,117 +1,509 @@ - - - - -Module ringbuffer_process - - - - -
    - -

    Module ringbuffer_process

    -Process to own the created ets table for the ring buffer. -

    Copyright © 2021 Marc Worrell

    - -

    Behaviours: gen_server.

    -

    Authors: Marc Worrell (marc@worrell.nl).

    - -

    Description

    Process to own the created ets table for the ring buffer. -

    Function Index

    - - - - - - - - - - -
    code_change/3
    handle_call/3
    handle_cast/2
    handle_info/2
    init/1
    process_pid/1Find the process pid for the process owning the ets table.
    read/1Read a payload from the buffer.
    start_link/2Create a new process managing a ringbuffer.
    terminate/2
    write/2Write a payload the buffer.
    - -

    Function Details

    - -

    code_change/3

    -
    -

    code_change(OldVsn, State, Extra) -> any()

    -

    -
    + + + + + + + + -

    handle_call/3

    -
    -

    handle_call(X1, From, State) -> any()

    -

    -
    -

    handle_cast/2

    -
    -

    handle_cast(Msg, State) -> any()

    -

    -
    + ringbuffer_process — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + ringbuffer_process + (ringbuffer v1.2.0+build.18.refca920a0) + +

    + + +
    +

    Process to own the created ets table for the ring buffer.

    +
    -

    handle_info/2

    -
    -

    handle_info(Info, State) -> any()

    -

    -

    init/1

    -
    -

    init(X1) -> any()

    -

    +
    +

    + + + + Summary +

    +
    +

    + Functions +

    + + + + + + + + + +
    +
    + init(_) + +
    + +
    + +
    + + +

    Find the process pid for the process owning the ets table. If the buffer does not exist then an error is returned.

    + +
    + +
    +
    + read(Name) + +
    + +

    Read a payload from the buffer. Skip entries that are deleted by the writers.

    + +
    + +
    + + +

    Create a new process managing a ringbuffer.

    + +
    + + + +
    + + +

    Write a payload the buffer. If the readers can't keep up then older entries are deleted.

    + +
    +
    -

    process_pid/1

    -
    -

    process_pid(Name::atom()) -> {ok, pid()} | {error, badarg}

    -

    -

    Find the process pid for the process owning the ets table. If the buffer - does not exist then an error is returned.

    - -

    read/1

    -
    -

    read(Name::atom()) -> {ok, {Skipped::pos_integer(), Payload::term()}} | {error, empty}

    -

    -

    Read a payload from the buffer. Skip entries that are deleted -by the writers.

    - -

    There are a coupe of race conditions we need to take care of:

    - -

    1. Writer incremented -> Reader tries entry --> Writer writes entry -In this case the w-value read by the reader is Size smaller than that -of the writer. In this case we wait till the writer finishes writing.

    - -

    2. Two or more readers arrive at the same time, incrementing the reader value. -One of the readers will have the correct value and can fetch the next entry. -In this case the reader can move past the writer if there are not enough -entries in the buffer for all readers.

    - - For the case where multiple readers are racing past the writer can not be solved - without synchronization, we let the ringbuffer process handle the reader increment. -

    - -

    start_link/2

    -
    -

    start_link(Name::atom(), Size::pos_integer()) -> {ok, pid()} | {error, term()}

    -

    -

    Create a new process managing a ringbuffer.

    - -

    terminate/2

    -
    -

    terminate(Reason, State) -> any()

    -

    +
    + + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + +

    code_change(OldVsn, State, Extra)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    handle_call(_, From, State)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    handle_cast(Msg, State)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    handle_info(Info, State)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    init(_)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    process_pid(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec process_pid(Name :: atom()) -> {ok, pid()} | {error, badarg}.
    + +
    + +

    Find the process pid for the process owning the ets table. If the buffer does not exist then an error is returned.

    +
    +
    +
    + +
    + + + +

    read(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec read(Name :: atom()) -> {ok, {Skipped :: non_neg_integer(), Payload :: term()}} | {error, empty}.
    + +
    + +

    Read a payload from the buffer. Skip entries that are deleted by the writers.

    There are a coupe of race conditions we need to take care of:

    1. Writer incremented -> Reader tries entry --> Writer writes entry In this case the w-value read by the reader is Size smaller than that of the writer. In this case we wait till the writer finishes writing.

    2. Two or more readers arrive at the same time, incrementing the reader value. One of the readers will have the correct value and can fetch the next entry. In this case the reader can move past the writer if there are not enough entries in the buffer for all readers.

    For the case where multiple readers are racing past the writer can not be solved without synchronization, we let the ringbuffer process handle the reader increment.

    +
    +
    +
    + +
    + + + +

    start_link(Name, Size)

    + + + + + + +
    + +
    + +
    + +
    -spec start_link(atom(), pos_integer()) -> {ok, pid()} | {error, term()}.
    + +
    + +

    Create a new process managing a ringbuffer.

    +
    +
    +
    + +
    + + + +

    terminate(Reason, State)

    + + + + + + +
    + +
    + + +
    +
    +
    + +
    + + + +

    write(Name, Payload)

    + + + + + + +
    + +
    + +
    + +
    -spec write(Name :: atom(), Payload :: term()) -> ok.
    + +
    + +

    Write a payload the buffer. If the readers can't keep up then older entries are deleted.

    +
    +
    + +
    +
    + + +
    +
    -

    write/2

    -
    -

    write(Name::atom(), Payload::term()) -> ok

    -

    -

    Write a payload the buffer. If the readers can't keep up then - older entries are deleted.

    -
    - - -

    Generated by EDoc

    - + diff --git a/doc/ringbuffer_sup.html b/doc/ringbuffer_sup.html index 14fa162..2ff7981 100644 --- a/doc/ringbuffer_sup.html +++ b/doc/ringbuffer_sup.html @@ -1,58 +1,365 @@ - - - - -Module ringbuffer_sup - - - - -
    - -

    Module ringbuffer_sup

    -Supervisor for the ring buffers processes. -

    Copyright © 2021 Marc Worrell

    - -

    Behaviours: supervisor.

    -

    Authors: Marc Worrell (marc@worrell.nl).

    - -

    Description

    Supervisor for the ring buffers processes. -

    Function Index

    - - - - -
    init/1Supervisor callback, initialize the children.
    start_child/2Start a ringbuffer.
    start_link/0Start the simple_one_for_one supervisor for the ring buffer processes.
    stop_child/1Stop a ringbuffer.
    - -

    Function Details

    - -

    init/1

    -
    -

    init(X1) -> any()

    -

    -

    Supervisor callback, initialize the children.

    - -

    start_child/2

    -
    -

    start_child(Name::atom(), Size::pos_integer()) -> {ok, pid()} | {error, term()}

    -

    -

    Start a ringbuffer.

    - -

    start_link/0

    -
    -

    start_link() -> any()

    -

    -

    Start the simple_one_for_one supervisor for the ring buffer processes.

    - -

    stop_child/1

    -
    -

    stop_child(Name::atom()) -> ok | {error, not_found}

    -

    -

    Stop a ringbuffer. The managing process is removed from the supervisor and the - ets table is released.

    -
    - - -

    Generated by EDoc

    - + + + + + + + + + + + ringbuffer_sup — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + +
    +

    + + + + View Source + + + ringbuffer_sup + (ringbuffer v1.2.0+build.18.refca920a0) + +

    + + +
    +

    Supervisor for the ring buffers processes.

    +
    + +
    + +
    +

    + + + + Summary +

    +
    +

    + Functions +

    + +
    + + +

    Find the Pid of the ringbuffer with a certain name.

    + +
    + +
    +
    + init(_) + +
    + +

    Supervisor callback, initialize the children.

    + +
    + +
    + + +

    Start a ringbuffer.

    + +
    + +
    +
    + start_link() + +
    + +

    Start the simple_one_for_one supervisor for the ring buffer processes.

    + +
    + +
    + + +

    Stop a ringbuffer. The managing process is removed from the supervisor and the ets table is released.

    + +
    + +
    + +
    + + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + +

    find_child(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec find_child(Name :: atom()) -> {ok, pid()} | {error, not_found}.
    + +
    + +

    Find the Pid of the ringbuffer with a certain name.

    +
    +
    +
    + +
    + + + +

    init(_)

    + + + + + + +
    + +
    + +

    Supervisor callback, initialize the children.

    +
    +
    +
    + +
    + + + +

    start_child(Name, Size)

    + + + + + + +
    + +
    + +
    + +
    -spec start_child(Name :: atom(), Size :: pos_integer()) -> {ok, pid()} | {error, term()}.
    + +
    + +

    Start a ringbuffer.

    +
    +
    +
    + +
    + + + +

    start_link()

    + + + + + + +
    + +
    + +

    Start the simple_one_for_one supervisor for the ring buffer processes.

    +
    +
    +
    + +
    + + + +

    stop_child(Name)

    + + + + + + +
    + +
    + +
    + +
    -spec stop_child(Name :: atom()) -> ok | {error, not_found}.
    + +
    + +

    Stop a ringbuffer. The managing process is removed from the supervisor and the ets table is released.

    +
    +
    + +
    +
    + + +
    +
    +
    + + diff --git a/doc/search.html b/doc/search.html new file mode 100644 index 0000000..23314fe --- /dev/null +++ b/doc/search.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + Search — ringbuffer v1.2.0+build.18.refca920a0 + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + + + + + +
    +
    +
    + + + diff --git a/doc/style.css b/doc/style.css deleted file mode 100644 index 182fb40..0000000 --- a/doc/style.css +++ /dev/null @@ -1,75 +0,0 @@ -/* standard EDoc style sheet */ -body { - font-family: Verdana, Arial, Helvetica, sans-serif; - margin-left: .25in; - margin-right: .2in; - margin-top: 0.2in; - margin-bottom: 0.2in; - color: #000000; - background-color: #ffffff; -} -h1,h2 { - margin-left: -0.2in; -} -div.navbar { - background-color: #add8e6; - padding: 0.2em; -} -h2.indextitle { - padding: 0.4em; - background-color: #add8e6; -} -h3.function,h3.typedecl { - background-color: #add8e6; - padding-left: 1em; -} -div.spec { - margin-left: 2em; - - background-color: #eeeeee; -} -a.module { - text-decoration:none -} -a.module:hover { - background-color: #eeeeee; -} -ul.definitions { - list-style-type: none; -} -ul.index { - list-style-type: none; - background-color: #eeeeee; -} - -/* - * Minor style tweaks - */ -ul { - list-style-type: square; -} -table { - border-collapse: collapse; -} -td { - padding: 3px; - vertical-align: middle; -} - -/* -Tune styles -*/ - -table[summary="navigation bar"] { - background-image: url('http://zotonic.com/lib/images/logo.png'); - background-repeat: no-repeat; - background-position: center; -} - -code, p>tt, a>tt { - font-size: 1.2em; -} - -p { - line-height: 1.5; -} diff --git a/doc/stylesheet.css b/doc/stylesheet.css deleted file mode 100644 index ab170c0..0000000 --- a/doc/stylesheet.css +++ /dev/null @@ -1,55 +0,0 @@ -/* standard EDoc style sheet */ -body { - font-family: Verdana, Arial, Helvetica, sans-serif; - margin-left: .25in; - margin-right: .2in; - margin-top: 0.2in; - margin-bottom: 0.2in; - color: #000000; - background-color: #ffffff; -} -h1,h2 { - margin-left: -0.2in; -} -div.navbar { - background-color: #add8e6; - padding: 0.2em; -} -h2.indextitle { - padding: 0.4em; - background-color: #add8e6; -} -h3.function,h3.typedecl { - background-color: #add8e6; - padding-left: 1em; -} -div.spec { - margin-left: 2em; - background-color: #eeeeee; -} -a.module { - text-decoration:none -} -a.module:hover { - background-color: #eeeeee; -} -ul.definitions { - list-style-type: none; -} -ul.index { - list-style-type: none; - background-color: #eeeeee; -} - -/* - * Minor style tweaks - */ -ul { - list-style-type: square; -} -table { - border-collapse: collapse; -} -td { - padding: 3 -} diff --git a/rebar.config b/rebar.config index f88739e..ae0df50 100644 --- a/rebar.config +++ b/rebar.config @@ -17,7 +17,8 @@ deprecated_function_calls]}. {edoc_opts, [ - {preprocess, true}, {stylesheet, "style.css"} + {preprocess, true}, + {stylesheet, "style.css"} ]}. {hex, [ @@ -31,6 +32,6 @@ ]}, {main, "README.md"}, {source_url, "https://github.com/zotonic/ringbuffer"}, - {assets, "assets"}, + {assets, #{ "assets" => "assets"}}, {api_reference, true} ]}. \ No newline at end of file