Files
SWCompression/Classes/TarContainer.html

639 lines
32 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<title>TarContainer Class Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset="utf-8">
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
<script src="../js/lunr.min.js" defer></script>
<script src="../js/typeahead.jquery.js" defer></script>
<script src="../js/jazzy.search.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Class/TarContainer" class="dashAnchor"></a>
<a title="TarContainer Class Reference"></a>
<header class="header">
<p class="header-col header-col--primary">
<a class="header-link" href="../index.html">
SWCompression 4.9.1 Docs
</a>
(100% documented)
</p>
<div class="header-col--secondary">
<form role="search" action="../search.json">
<input type="text" placeholder="Search documentation" data-typeahead>
</form>
</div>
<p class="header-col header-col--secondary">
<a class="header-link" href="https://github.com/tsolomko/SWCompression">
<img class="header-icon" src="../img/gh.png" alt="GitHub"/>
View on GitHub
</a>
</p>
</header>
<p class="breadcrumbs">
<a class="breadcrumb" href="../index.html">SWCompression</a>
<img class="carat" src="../img/carat.png" alt=""/>
<a class="breadcrumb" href="../TAR.html">TAR</a>
<img class="carat" src="../img/carat.png" alt=""/>
TarContainer Class Reference
</p>
<div class="content-wrapper">
<nav class="navigation">
<ul class="nav-groups">
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Compression.html">Compression</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/BZip2.html">BZip2</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/BZip2/BlockSize.html"> BlockSize</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/Deflate.html">Deflate</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/LZMA.html">LZMA</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/LZMAProperties.html">LZMAProperties</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/LZMA2.html">LZMA2</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZ4.html">LZ4</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Archives.html">Archives</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/GzipArchive.html">GzipArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/GzipArchive/Member.html"> Member</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/GzipHeader.html">GzipHeader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/GzipHeader/ExtraField.html"> ExtraField</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/XZArchive.html">XZArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/ZlibArchive.html">ZlibArchive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZlibHeader.html">ZlibHeader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZlibHeader/CompressionLevel.html"> CompressionLevel</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../7-Zip.html">7-Zip</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/SevenZipContainer.html">SevenZipContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/SevenZipEntry.html">SevenZipEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/SevenZipEntryInfo.html">SevenZipEntryInfo</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../TAR.html">TAR</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/TarContainer.html">TarContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/TarContainer/Format.html"> Format</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarReader.html">TarReader</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarWriter.html">TarWriter</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarEntry.html">TarEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/TarEntryInfo.html">TarEntryInfo</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../ZIP.html">ZIP</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Classes/ZipContainer.html">ZipContainer</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZipEntry.html">ZipEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/ZipEntryInfo.html">ZipEntryInfo</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ZipExtraField.html">ZipExtraField</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZipExtraFieldLocation.html">ZipExtraFieldLocation</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Errors.html">Errors</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/BZip2Error.html">BZip2Error</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/DataError.html">DataError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/DeflateError.html">DeflateError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/GzipError.html">GzipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZMAError.html">LZMAError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/LZMA2Error.html">LZMA2Error</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/SevenZipError.html">SevenZipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/TarCreateError.html">TarCreateError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/TarError.html">TarError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/XZError.html">XZError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZipError.html">ZipError</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ZlibError.html">ZlibError</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/Archive.html">Archive</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/Container.html">Container</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ContainerEntry.html">ContainerEntry</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/ContainerEntryInfo.html">ContainerEntryInfo</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/CompressionAlgorithm.html">CompressionAlgorithm</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Protocols/DecompressionAlgorithm.html">DecompressionAlgorithm</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="../Common%20Auxiliary%20Types.html">Common Auxiliary Types</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/ContainerEntryType.html">ContainerEntryType</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/DosAttributes.html">DosAttributes</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Structs/Permissions.html">Permissions</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/CompressionMethod.html">CompressionMethod</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="../Enums/FileSystemType.html">FileSystemType</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section class="section">
<div class="section-content top-matter">
<h1>TarContainer</h1>
<div class="declaration">
<div class="language">
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">TarContainer</span> <span class="p">:</span> <span class="kt"><a href="../Protocols/Container.html">Container</a></span></code></pre>
</div>
</div>
<p>Provides functions for work with TAR containers.</p>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L9-L263">Show on GitHub</a>
</div>
</div>
</section>
<section class="section">
<div class="section-content">
<div class="task-group">
<ul class="item-container">
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC6FormatO"></a>
<a name="//apple_ref/swift/Enum/Format" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC6FormatO">Format</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Represents the &ldquo;format&rdquo; of a TAR container: a minimal set of extensions to basic TAR format required to
successfully read a particular container.</p>
<a href="../Classes/TarContainer/Format.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">Format</span></code></pre>
</div>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L15-L24">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC8formatOf9containerAC6FormatO10Foundation4DataV_tKFZ"></a>
<a name="//apple_ref/swift/Method/formatOf(container:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC8formatOf9containerAC6FormatO10Foundation4DataV_tKFZ">formatOf(container:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Processes TAR container and returns its &ldquo;format&rdquo;: a minimal set of extensions to basic TAR format required to
successfully read this container.</p>
<div class="aside aside-throws">
<p class="aside-title">Throws</p>
<p><code><a href="../Enums/TarError.html">TarError</a></code>, which may indicate that either container is damaged or it might not be TAR container at all.</p>
</div><div class="aside aside-see-also">
<p class="aside-title">See also</p>
<p><code><a href="../Classes/TarContainer/Format.html">TarContainer.Format</a></code></p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="nf">formatOf</span><span class="p">(</span><span class="n">container</span> <span class="nv">data</span><span class="p">:</span> <span class="kt">Data</span><span class="p">)</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/TarContainer/Format.html">Format</a></span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>container</em>
</code>
</td>
<td>
<div>
<p>TAR container&rsquo;s data.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L36-L71">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC6create4from10Foundation4DataVSayAA0B5EntryVG_tFZ"></a>
<a name="//apple_ref/swift/Method/create(from:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC6create4from10Foundation4DataVSayAA0B5EntryVG_tFZ">create(from:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Creates a new TAR container with <code>entries</code> as its content and generates its <code>Data</code>.</p>
<div class="aside aside-see-also">
<p class="aside-title">See also</p>
<p><code><a href="../Structs/TarEntryInfo.html">TarEntryInfo</a></code> properties documenation to see how their values are connected with the specific TAR
format used during container creation.</p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="nf">create</span><span class="p">(</span><span class="n">from</span> <span class="nv">entries</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Structs/TarEntry.html">TarEntry</a></span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kt">Data</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>entries</em>
</code>
</td>
<td>
<div>
<p>TAR entries to store in the container.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L81-L83">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC6create4from5force10Foundation4DataVSayAA0B5EntryVG_AC6FormatOtFZ"></a>
<a name="//apple_ref/swift/Method/create(from:force:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC6create4from5force10Foundation4DataVSayAA0B5EntryVG_AC6FormatOtFZ">create(from:<wbr>force:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Creates a new TAR container with <code>entries</code> as its content and generates its <code>Data</code> using the specified <code>format</code>.</p>
<p>This function forces the usage of the <code>format</code>, meaning that certain properties of the <code>entries</code> may be missing
from the resulting container data if the chosen format does not support corresponding features. For example,
relatively long names (and linknames) will be truncated if the <code>.ustar</code> or <code>.prePosix</code> format is specified.</p>
<p>It is highly recommended to use the <code><a href="../Classes/TarContainer.html#/s:13SWCompression12TarContainerC6create4from10Foundation4DataVSayAA0B5EntryVG_tFZ">TarContainer.create(from:)</a></code> function (or use the <code>.pax</code> format) to ensure the
best representation of the <code>entries</code> in the output. Other (non-PAX) formats should only be used if you have a
specific need for them and you understand limitations of those formats.</p>
<div class="aside aside-see-also">
<p class="aside-title">See also</p>
<p><code><a href="../Structs/TarEntryInfo.html">TarEntryInfo</a></code> properties documenation to see how their values are connected with the specific TAR
format used during container creation.</p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="nf">create</span><span class="p">(</span><span class="n">from</span> <span class="nv">entries</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Structs/TarEntry.html">TarEntry</a></span><span class="p">],</span> <span class="n">force</span> <span class="nv">format</span><span class="p">:</span> <span class="kt">TarContainer</span><span class="o">.</span><span class="kt"><a href="../Classes/TarContainer/Format.html">Format</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Data</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>entries</em>
</code>
</td>
<td>
<div>
<p>TAR entries to store in the container.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>force</em>
</code>
</td>
<td>
<div>
<p>Force the usage of the specified format.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L102-L172">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ"></a>
<a name="//apple_ref/swift/Method/open(container:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ">open(container:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Processes TAR container and returns an array of <code><a href="../Structs/TarEntry.html">TarEntry</a></code> with information and data for all entries.</p>
<div class="aside aside-important">
<p class="aside-title">Important</p>
<p>The order of entries is defined by TAR container and, particularly, by the creator of a given TAR
container. It is likely that directories will be encountered earlier than files stored in those directories, but no
particular order is guaranteed.</p>
</div><div class="aside aside-throws">
<p class="aside-title">Throws</p>
<p><code><a href="../Enums/TarError.html">TarError</a></code>, which may indicate that either container is damaged or it might not be TAR container at all.</p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="nf">open</span><span class="p">(</span><span class="n">container</span> <span class="nv">data</span><span class="p">:</span> <span class="kt">Data</span><span class="p">)</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="kt"><a href="../Structs/TarEntry.html">TarEntry</a></span><span class="p">]</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>container</em>
</code>
</td>
<td>
<div>
<p>TAR container&rsquo;s data.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<h4>Return Value</h4>
<p>Array of <code><a href="../Structs/TarEntry.html">TarEntry</a></code>.</p>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L187-L224">Show on GitHub</a>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:13SWCompression12TarContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ"></a>
<a name="//apple_ref/swift/Method/info(container:)" class="dashAnchor"></a>
<a class="token" href="#/s:13SWCompression12TarContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ">info(container:<wbr>)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Processes TAR container and returns an array of <code><a href="../Structs/TarEntryInfo.html">TarEntryInfo</a></code> with information about entries in this container.</p>
<div class="aside aside-important">
<p class="aside-title">Important</p>
<p>The order of entries is defined by TAR container and, particularly, by the creator of a given TAR
container. It is likely that directories will be encountered earlier than files stored in those directories, but no
particular order is guaranteed.</p>
</div><div class="aside aside-throws">
<p class="aside-title">Throws</p>
<p><code><a href="../Enums/TarError.html">TarError</a></code>, which may indicate that either container is damaged or it might not be TAR container at all.</p>
</div>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="nf">info</span><span class="p">(</span><span class="n">container</span> <span class="nv">data</span><span class="p">:</span> <span class="kt">Data</span><span class="p">)</span> <span class="k">throws</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="kt"><a href="../Structs/TarEntryInfo.html">TarEntryInfo</a></span><span class="p">]</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>container</em>
</code>
</td>
<td>
<div>
<p>TAR container&rsquo;s data.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<h4>Return Value</h4>
<p>Array of <code><a href="../Structs/TarEntryInfo.html">TarEntryInfo</a></code>.</p>
</div>
<div class="slightly-smaller">
<a href="https://github.com/tsolomko/SWCompression/tree/4.9.1/Sources/TAR/TarContainer.swift#L239-L261">Show on GitHub</a>
</div>
</section>
</div>
</li>
</ul>
</div>
</div>
</section>
</article>
</div>
<section class="footer">
<p>© 2026 Timofey Solomko</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external noopener">jazzy ♪♫ v0.15.4</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external noopener">Realm</a> project.</p>
</section>
</body>
</html>