<!DOCTYPE html>
<!--
   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.
  -->
<html>
<head>
    <title>Oak Standalone Example Application</title>
    <link type="text/css" rel="stylesheet" href="github-markdown.css"/>
    <link type="text/css" rel="stylesheet" href="stylish.css"/>
</head>
<body>
<article class="markdown-body">
    <h1>Oak Standalone Example Application</h1>
    <ul>
        <li><a href="/osgi/system/console">System Console</a></li>
        <li><a href="/osgi/system/console/sc">Script Console</a></li>
        <li><a href="/repository/default">Webdav</a></li>
        <li><a href="/metrics">Metrics</a></li>
    </ul>
</article>
</body>
</html>
