Unciv/site/wiki/Mods/index.html

971 lines
29 KiB
HTML
Raw Normal View History

2022-02-24 01:20:48 +07:00
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.2.3, mkdocs-material-8.2.1">
<title>Mods - My Docs</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.e8d9bf0c.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.e6a45f82.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#whats-this-about" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="My Docs" class="md-header__button md-logo" aria-label="My Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
My Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Mods
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="My Docs" class="md-nav__button md-logo" aria-label="My Docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
My Docs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Welcome to MkDocs
</a>
</li>
<li class="md-nav__item">
<a href="../../Credits/" class="md-nav__link">
Icon Credits
</a>
</li>
<li class="md-nav__item">
<a href="../../Game%20Making%20Tips/" class="md-nav__link">
Tips and tricks for making a LibGDX game
</a>
</li>
<li class="md-nav__item">
<a href="../../unique%20parameters/" class="md-nav__link">
Unique parameters
</a>
</li>
<li class="md-nav__item">
<a href="../../uniques/" class="md-nav__link">
Uniques
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6">
Wiki
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Wiki" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Wiki
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../Audiovisual-Mods/" class="md-nav__link">
Audiovisual Mods
</a>
</li>
<li class="md-nav__item">
<a href="../Building-locally-without-Android-Studio/" class="md-nav__link">
Building locally without Android Studio
</a>
</li>
<li class="md-nav__item">
<a href="../Civilization-related-JSON-files/" class="md-nav__link">
Civilization related JSON files
</a>
</li>
<li class="md-nav__item">
<a href="../Coding-standards/" class="md-nav__link">
Coding standards
</a>
</li>
<li class="md-nav__item">
<a href="../Creating-a-custom-tileset/" class="md-nav__link">
How to make Unciv use your custom tileset
</a>
</li>
<li class="md-nav__item">
<a href="../Force-rating-calculation/" class="md-nav__link">
Force rating
</a>
</li>
<li class="md-nav__item">
<a href="../From-code-to-deployment/" class="md-nav__link">
From code to deployment
</a>
</li>
<li class="md-nav__item">
<a href="../Getting-Started/" class="md-nav__link">
Getting Started
</a>
</li>
<li class="md-nav__item">
<a href="../Home/" class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item">
<a href="../Installing-on-macOS/" class="md-nav__link">
Installing on macOS
</a>
</li>
<li class="md-nav__item">
<a href="../JSON-files-for-mods/" class="md-nav__link">
JSON files for mods
</a>
</li>
<li class="md-nav__item">
<a href="../Making-a-new-Civilization/" class="md-nav__link">
Making a new Civilization
</a>
</li>
<li class="md-nav__item">
<a href="../Map-related-JSON-files/" class="md-nav__link">
Map related JSON files
</a>
</li>
<li class="md-nav__item">
<a href="../Miscellaneous-JSON-files/" class="md-nav__link">
Miscellaneous JSON files
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Mods
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Mods
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-this-about" class="md-nav__link">
What's this about?
</a>
</li>
<li class="md-nav__item">
<a href="#audiovisual-mods" class="md-nav__link">
Audiovisual Mods
</a>
</li>
<li class="md-nav__item">
<a href="#mod-names" class="md-nav__link">
Mod names
</a>
</li>
<li class="md-nav__item">
<a href="#mod-components" class="md-nav__link">
Mod components
</a>
<nav class="md-nav" aria-label="Mod components">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#more-on-images-and-the-texture-atlas" class="md-nav__link">
More on Images and the texture atlas
</a>
</li>
<li class="md-nav__item">
<a href="#adding-maps-to-mods" class="md-nav__link">
Adding maps to mods
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#getting-your-mod-out-there" class="md-nav__link">
Getting your mod out there
</a>
</li>
<li class="md-nav__item">
<a href="#i-have-the-mod-now-what" class="md-nav__link">
I have the mod, now what?
</a>
</li>
<li class="md-nav__item">
<a href="#mod-location-for-manual-loading-of-mods" class="md-nav__link">
Mod location for manual loading of mods
</a>
</li>
<li class="md-nav__item">
<a href="#other" class="md-nav__link">
Other
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../Project-structure-and-major-classes/" class="md-nav__link">
Project structure
</a>
</li>
<li class="md-nav__item">
<a href="../Regions/" class="md-nav__link">
Regions
</a>
</li>
<li class="md-nav__item">
<a href="../Translating/" class="md-nav__link">
Translating
</a>
</li>
<li class="md-nav__item">
<a href="../Translations%2C-mods%2C-and-modding-freedom-in-Open-Source/" class="md-nav__link">
Translations, mods, and modding freedom in Open Source
</a>
</li>
<li class="md-nav__item">
<a href="../Uniques/" class="md-nav__link">
Uniques
</a>
</li>
<li class="md-nav__item">
<a href="../Unit-related-JSON-files/" class="md-nav__link">
Unit related JSON files
</a>
</li>
<li class="md-nav__item">
<a href="../_Footer/" class="md-nav__link">
Footer
</a>
</li>
<li class="md-nav__item">
<a href="../_Sidebar/" class="md-nav__link">
[Home](.)
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#whats-this-about" class="md-nav__link">
What's this about?
</a>
</li>
<li class="md-nav__item">
<a href="#audiovisual-mods" class="md-nav__link">
Audiovisual Mods
</a>
</li>
<li class="md-nav__item">
<a href="#mod-names" class="md-nav__link">
Mod names
</a>
</li>
<li class="md-nav__item">
<a href="#mod-components" class="md-nav__link">
Mod components
</a>
<nav class="md-nav" aria-label="Mod components">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#more-on-images-and-the-texture-atlas" class="md-nav__link">
More on Images and the texture atlas
</a>
</li>
<li class="md-nav__item">
<a href="#adding-maps-to-mods" class="md-nav__link">
Adding maps to mods
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#getting-your-mod-out-there" class="md-nav__link">
Getting your mod out there
</a>
</li>
<li class="md-nav__item">
<a href="#i-have-the-mod-now-what" class="md-nav__link">
I have the mod, now what?
</a>
</li>
<li class="md-nav__item">
<a href="#mod-location-for-manual-loading-of-mods" class="md-nav__link">
Mod location for manual loading of mods
</a>
</li>
<li class="md-nav__item">
<a href="#other" class="md-nav__link">
Other
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Mods</h1>
<h2 id="whats-this-about">What's this about?</h2>
<p>Everyone has that thing they wish could be in the game.
Unfortunately, the game only understands code, so mods are our way to give a degree of freedom to those of us who don't code.</p>
<p>Mods can <em>add, replace and remove</em> basic game definitions, such as units, nations, buildings, improvements, resources and terrains.
Games loaded with these mods will function according to the mod definition.</p>
<p>The game only knows how to recognize existing definitions, so you can't add <em>new</em> unique abilities to nations/units/buildings/etc, only play around with existing ones</p>
<p>There are two kinds of mods:</p>
<ul>
<li>
<p>Extension mods - these add new nations/units/buildings/resources to a base ruleset - can be either to the default ruleset, or to a base ruleset mod. Easy to do and probably the better place to get started.</p>
</li>
<li>
<p>Base Ruleset mods - these replace the entire existing ruleset - tech tree, units, policies, nations etc - to give an entirely different experience than the base game. These generally require quite a bit of work, but give a whole new experience, and so are the most popular.</p>
</li>
</ul>
<p>Creating and editing mods from your phone is NOT RECOMMENDED - it's <em>much easier</em> using a desktop device!</p>
<h2 id="audiovisual-mods">Audiovisual Mods</h2>
<p>I addition to changing the rules - or even without doing so, mods can override existing graphics or sounds, or add music tracks. The game also has the ability to display graphics that are not included in the base game at all, such as leader portrait or wonder splash images, that must be provided by mods. For details, see <a href="../Audiovisual-Mods/">Audiovisual Mods</a>.</p>
<p>Custom tilesets are closely related, see <a href="../Creating-a-custom-tileset/">Creating a custom tileset</a>.</p>
<p>Such mods are candidates for the "Permanent audiovisual mod" switch available on the Mod Management Screen. Note that this feature includes graphics or sounds from the selected mod in <em>all</em> games, even those started before installing the mod. In case of a mod bringing both changed rules and audiovisuals, the 'permanent' feature will include only the media on all games, to use the rules you will still need to select the mod for a new game.</p>
<h2 id="mod-names">Mod names</h2>
<p>Mods need to conform to github repo naming rules, but best stay simple and use only letters, digits, and dashes <code>-</code>. Dashes are <em>automatically</em> converted to spaces for display and use within Unciv. Many punctuation or extended unicode characters <em>might</em> work, but at best potential users won't find them attractive, at worst we'll refuse support when you run into problems :smiling_imp: </p>
<h2 id="mod-components">Mod components</h2>
<p>Mods are located in a <code>/mods</code> directory, on Desktop that should be next to your .jar file.</p>
<p>Mods typically have 2 subfolders:
- jsons - here you should put files that alter the data of game objects, the order of the files is as in <a href="/android/assets/jsons">the base json files</a>. More information on these can be found <a href="../JSON-files-for-mods/">here</a>
- Images - here you should put game images, as in <a href="/android/Images">the base image files</a>. Please read the <a href="#more-on-images-and-the-texture-atlas">atlas chapter</a> for important details.</p>
<p>In order to remove objects from the game, you'll need to create a ModOptions file in the <code>/jsons</code> subfolder - there's an example <a href="https://github.com/yairm210/Unciv-mod-example/blob/master/Removing%20Things/jsons/ModOptions.json">here</a></p>
<p>In a base ruleset mod, ALL the original objects are removed - this is done by adding a <code>"isBaseRuleset":true</code> configuration to your modOptions file, <a href="https://github.com/k4zoo/Civilization-6-Mod/blob/master/jsons/ModOptions.json">like so</a></p>
<p>For an example, you can refer to <a href="https://github.com/yairm210/Unciv-mod-example">the example mod</a> - just download the Example-Aliens-Mod and put it in a <code>/mods</code> folder next to the jar, run Unciv, start a new game, and you'll be able to enable the mod, which will allow to you pick Aliens as a playable civilization!</p>
<p>If you want to add a new civilization as a mod, you should check out <a href="../Making-a-new-Civilization/">the Civ making instructions</a> to see what's required, or see the example Aliens mod =)</p>
<h3 id="more-on-images-and-the-texture-atlas">More on Images and the texture atlas</h3>
<p>Images are combined (at runtime) into texture images with an 'atlas', so if you see "game.atlas" and "game.png" files being generated, now you know what for. Most mods will need only one pair of those, the base game has around four.</p>
<p>When the game runs from a packaged distribution (android, jar), the texture+atlas files alone are relevant, so you need to include them in your repository and keep them up to date. Actually omitting the original images would work for these uses, but we still recommend including them, so developers running from source can access them.</p>
<p>If your mod has lots of images (or large ones), the textures might 'spill' into additional texture ".png" files - 2048x2048 is the limit for a single texture pack. This is not good for performance, which is why the base game controls which kinds of images go together into one texture(+atlas). This works for mods, too: Create not only one Images folder, but several, the additional ones named "Images.xyz", where xyz will become the filename of the additional texture file (So don't use both Images and Images.game - those will clash). Look at the Unciv base game to get a better idea how that works. To minimize texture swaps, try to group them by the situation where in the game they are needed. You can distibute by folder, but having the same subfolders under several "Images.xyz" and distributing the images between them will also work.</p>
<h3 id="adding-maps-to-mods">Adding maps to mods</h3>
<p>You can also add maps to mods, so they'll be available to players who download your mod.</p>
<p>A mod can also be maps-only, if all you want to do is share your maps.</p>
<p>When you've finished making your map in the Map Editor, save it, and it will be in the <code>/maps</code> folder of your game.</p>
<p>Copy it to a <code>/maps</code> folder in your <em>mod</em>, and you're done!</p>
<h2 id="getting-your-mod-out-there">Getting your mod out there</h2>
<p>In order to make your mod downloadable by anyone, you need to create a Github repository (instructions <a href="https://docs.github.com/en/github/getting-started-with-github/create-a-repo">here</a>)</p>
<p>The Images and jsons folders need to be in the root directory of the repo - see <a href="https://github.com/yairm210/Unciv-IV-mod">here</a> for example.</p>
<p>You can then manually download the mod from within the Mod Manager in Unciv:</p>
<ul>
<li>From Unciv's main screen, click "Mods"</li>
<li>Click "Download mod from URL", and enter the location of your Github page</li>
<li>The game will automatically download and extract your mod, and it'll be ready to use!</li>
</ul>
<p>Once you've tested that your mod CAN be downloaded, and that it works well once downloaded, you're ready for the final stage - GETTING IT TO THE USERS AUTOMATICALLY.</p>
<p>In order to do this, all you need to do is:</p>
<ul>
<li>Go to your Github page</li>
<li>Click the gear icon next to the About (top-right part of the page)</li>
<li>In 'Topics', add "unciv-mod"</li>
</ul>
<p>When you open your app, it will query Github's <a href="https://github.com/topics/unciv-mod">list of repos with that topic</a>, and now YOUR repo will appear there!</p>
<h2 id="i-have-the-mod-now-what">I have the mod, now what?</h2>
<p>The primary use of mods is to add them when starting a new game, or configuring a map. This will mean that both the ruleset of the mod, and the images, will be in use for that specific game/map.</p>
<p>For mods which are primarily visual or audio, there is a second use - through the mod manager, you can enable them as <strong>permanent audiovisual mods</strong>. This means that the images, sounds (or upcoming: music) from the mod will replace the original media everywhere in the game.</p>
<h2 id="mod-location-for-manual-loading-of-mods">Mod location for manual loading of mods</h2>
<p>In general, you should never be manually-loading your mods - not only is this clunky, it's also more error-prone. Unless you have a very specific use-case, you probably shouldn't be doing this.</p>
<p>In Android, they should go into the <code>Android/data/com.unciv.app/files/mods</code> directory.</p>
<p>In Chromebook, go to "Play files", should be on the sidebar on the left side of the window under "My files".
Click the 3 vertical dots on the top right-hand corner of the window below the "X".
If the option "Show all Play folders" does not have a check next to it click it. You should see some new files that appear on your screen.
<em>Now</em> navigate to <code>Android/data/com.unciv.app/files/mods</code></p>
<p>When loading a mod, it needs to be in its own folder in <code>/mods</code> - this is how you will work when you're editing your mod.</p>
<h2 id="other">Other</h2>
<p>Existing mods can be found <a href="https://github.com/topics/unciv-mod">here</a>!</p>
<p>A list of uniques and how to use them can be found <a href="../Uniques/">here</a>!</p>
<p>Some images don't exist at all in the base game, but can be added in mods. For more info, see <a href="../Audiovisual-Mods/">Audiovisual Mods</a>.</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../Miscellaneous-JSON-files/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Miscellaneous JSON files" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
Miscellaneous JSON files
</div>
</div>
</a>
<a href="../Project-structure-and-major-classes/" class="md-footer__link md-footer__link--next" aria-label="Next: Project structure" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
Project structure
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../../assets/javascripts/workers/search.bd0b6b67.min.js"}</script>
<script src="../../assets/javascripts/bundle.8aa65030.min.js"></script>
</body>
</html>