
{%- set css_files = css_files + ['_static/css/sphinx_theme.css'] %}
{%- set css_files = css_files + ['_static/css/bootstrap-3.0.3.min.css'] %}
{%- set css_files = css_files + ['_static/css/v2.css'] %}
{%- set css_files = css_files + ['_static/css/custom.css'] %}
{%- set css_files = css_files + ['_static/css/restructuredtext.css'] %}
{%- set script_files = script_files + ['_static/js/bootstrap-3.0.3.min.js'] %}
{%- set script_files = script_files + ['_static/js/affix.js'] %}
{%- set script_files = script_files + ['_static/js/main.js'] %}
{%- set url_root = pathto('', 1) %}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
  {%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
{%- else %}
  {%- set titlesuffix = "" %}
{%- endif %}

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    {{ metatags }}

    {% block htmltitle %}
    <title>{{ title|striptags|e }}{{ titlesuffix }}</title>
    {% endblock %}

    {# FAVICON #}
    {% if favicon %}
      <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
    {% endif %}

    {# CSS #}

    <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />

    {% for cssfile in css_files %}
      <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
    {% endfor %}

    {% for cssfile in extra_css_files %}
      <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
    {% endfor %}

    <link rel="stylesheet" href="{{ pathto('_static/css/overrides.css', 1) }}" type="text/css" />
    {%- block linktags %}
      {%- if hasdoc('about') %}
          <link rel="author" title="{{ _('About these documents') }}"
                href="{{ pathto('about') }}"/>
      {%- endif %}
      {%- if hasdoc('genindex') %}
          <link rel="index" title="{{ _('Index') }}"
                href="{{ pathto('genindex') }}"/>
      {%- endif %}
      {%- if hasdoc('search') %}
          <link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}"/>
      {%- endif %}
      {%- if hasdoc('copyright') %}
          <link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}"/>
      {%- endif %}
      <link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}"/>
      {%- if parents %}
          <link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}"/>
      {%- endif %}
      {%- if next %}
          <link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}"/>
      {%- endif %}
      {%- if prev %}
          <link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}"/>
      {%- endif %}
    {%- endblock %}
    {%- block extrahead %} {% endblock %}

    {# Keep modernizr in head - http://modernizr.com/docs/#installing #}
    <script src="{{ pathto('_static/js/modernizr.min.js', 1) }}"></script>

    {% if theme_google_analytics %}
    <script>
    (function(i, s, o, g, r, a, m) {
	i["GoogleAnalyticsObject"] = r;
	(i[r] =
		i[r] ||
		function() {
			(i[r].q = i[r].q || []).push(arguments);
		}),
		(i[r].l = 1 * new Date());
	(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
	a.async = 1;
	a.src = g;
	m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");

ga("create", "{{ theme_google_analytics[0] }}", "{{ theme_google_analytics[1] }}");
ga("send", "pageview");
</script>
    {% endif %}

  </head>

  <body class="not-front page-documentation" role="document" >
    <div id="wrapper">
      {% include "main-banner.html" %}
      {% include "header.html" %}
      <!-- STARTS MAIN CONTENT -->
      <div id="main-content">
        {% include "breadcrumbs.html" %}
        <!-- STARTS CONTAINER -->
        <div class="container">
          <!-- STARTS .content -->
          <div id="content" class="row">
            {# SIDE NAV, TOGGLES ON MOBILE #}
            {% include "sidebar.html" %}

            <div class="col-xs-12 col-sm-9">
              {% if cur_version != latest_version %}
                <div class="alert alert-warning">
                  <p>
                    Version {{ cur_version }} is not the most recent version of the
                    Apache Mynewt documentation. Click <a href="/latest">here</a> to
                    read the latest version.
                  </p>
                </div>
              {% endif %}

              {# PAGE CONTENT #}
              <div class="">
                <div class="rst-content">
                  <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
                   <div itemprop="articleBody">
                    {% block body %}{% endblock %}
                   </div>
                  </div>
                  {% include "navigation.html" %}
                </div>
              </div>
            </div>
            <!-- ENDS CONTENT SECTION -->
          </div>
          <!-- ENDS .content -->
        </div>
      </div>
      {% include "footer.html" %}
    </div>
    <!-- ENDS #wrapper -->

  {% if not embedded %}

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'{{ url_root }}',
            VERSION:'{{ release|e }}',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
            HAS_SOURCE:  {{ has_source|lower }},
            SOURCELINK_SUFFIX: '.txt'
        };
    </script>
    {%- for scriptfile in script_files %}
      <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
    {%- endfor %}

  {% endif %}

  {%- block footer %} {% endblock %}

  </body>
</html>
