<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->

<!DOCTYPE html>
<html>

  {% include head.cn.html %}

  <body>

    {% include header.cn.html %}
<main id="main" >
  <div >
    <div id="zero" class=" main blogs" >

    <div class="page-content">
      <div class="wrapper">
        {{ content }}
      </div>
    </div>

    </div>
  </div>
</main>

    {% include footer.cn.html %}

  <script src="/assets/js/jquery-1.9.1.min.js"></script> 
  <script src="/assets/js/bootstrap.min.js"></script> 
  <script src="/assets/js/main.js"></script>
  </body>

</html>
