<div id="gc-footer">
  <button class="google-button" id="scroll-to-top">↑</button>
  <button class="google-button" id="send-feedback">Send Feedback</button>
  <div class="text">
    <p>
      Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
      the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
      Attribution 3.0 License</a>, and code samples are licensed under the
      <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
    </p>
    <p>
      ©2013 Google
    </p>
    <script src="{{static}}/js/platform_chooser.js" type="text/javascript"></script>
    <script src="{{static}}/js/popup.js" type="text/javascript"></script>
    <script src="{{static}}/js/prettify.js" type="text/javascript"></script>
    <script src="{{static}}/js/scroll.js" type="text/javascript"></script>
    <script src="{{static}}/js/sidebar.js" type="text/javascript"></script>
    <script src="{{static}}/js/tabs.js" type="text/javascript"></script>
    <script>
      (function() {
        // Auto syntax highlight all pre tags.
        var preElements = document.getElementsByTagName('pre');
        for (var i = 0; i < preElements.length; i++)
          preElements[i].classList.add('prettyprint');
        prettyPrint();
      })();
    </script>

    <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-41980257-1', 'chrome.com');
      ga('send', 'pageview');

    </script>

    <!-- Feedback. -->
    <script type="text/javascript" src="//www.gstatic.com/feedback/api.js"></script>
    <script type="text/javascript">
      (function() {
       document.getElementById('send-feedback').addEventListener('click', function() {
         userfeedback.api.startFeedback({ productId: 86265 });
       });
      })();
    </script>
  </div>
</div>
