    <footer class="footer">
      {% include footer-content.html %}
    </footer>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="/assets/js/bootstrap.min.js"></script>

    <!-- Anchor JS -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.2.0/anchor.min.js"></script>
    <script>
      // Automatically add anchors and links to all header elements that don't already have them.
      anchors.add();
    </script>

    <script>
      var shiftWindow = function() {
        if (location.hash.length !== 0) {
          window.scrollBy(0, -50);
        }
      };
      window.addEventListener("hashchange", shiftWindow);

      var highlightCurrentSidebarNav = function() {
        var href = location.pathname;
        var item = $('#sidebar-nav [href$="' + href + '"]');
        if (item) {
          var li = item.parent();
          li.addClass("active");

          if (li.parent() && li.parent().is("ul")) {
            do {
              var ul = li.parent();
              if (ul.hasClass("collapse")) {
                ul.collapse("show");
              }
              li = ul.parent();
            } while (li && li.is("li"));
          }
        }
      };

      $(document).ready(function() {
        // Scroll to anchor of location hash, adjusted for fixed navbar.
        window.setTimeout(function() {
          shiftWindow();
        }, 1);

        // Flip the caret when submenu toggles are clicked.
        $(".sidebar-submenu").on("show.bs.collapse", function() {
          var toggle = $('[href$="#' + $(this).attr('id') + '"]');
          if (toggle) {
            toggle.addClass("dropup");
          }
        });
        $(".sidebar-submenu").on("hide.bs.collapse", function() {
          var toggle = $('[href$="#' + $(this).attr('id') + '"]');
          if (toggle) {
            toggle.removeClass("dropup");
          }
        });

        // Highlight the current page on the sidebar nav.
        highlightCurrentSidebarNav();
      });
    </script>

    <!-- Google Analytics tracking code -->
    <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', 'UA-61082125-1', 'auto');
      ga('send', 'pageview');
    </script>
