<!--
* 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.html %}
	<body>
		{% include header.html %}
		
		<div class="container">
			<div class="row">
				{% include docs20_nav.html %}
				<div class="col-md-9 col-lg-9 col-xs-14 aside2">
					<div id="container">
						<div id="pjax">
							<h1 class="post-title">{{ page.title }}</h1>
							{% if page.version == NULL %}
							{% else %}							
								<p>version: {{page.version}}, since: {{page.since}}</p>
							{% endif %}
							<article class="post-content" >	
							{{ content }}
							</article>
						</div>
					</div>
				</div>
			</div>
		</div>		
		{% include footer.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>
