<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Swagger UI</title>
    <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
    <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
    <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
    <style>
      html
      {
        box-sizing: border-box;
        overflow: -moz-scrollbars-vertical;
        overflow-y: scroll;
      }

      *,
      *:before,
      *:after
      {
        box-sizing: inherit;
      }

      body
      {
        margin:0;
        background: #fafafa;
      }
    </style>
  </head>

  <body>
    <div id="swagger-ui"></div>

    <script src="./swagger-ui-bundle.js"> </script>
    <script src="./swagger-ui-standalone-preset.js"> </script>
    <script>
    window.onload = function() {
      var url = window.location.search.match(/url=([^&]+)/);
      if (url && url.length > 1) {
        url = decodeURIComponent(url[1]);
      }
      else if (document.location.href.substring(0, 5) === "file:") {
        url = "../swagger.json";
      }
      else {
        var baseUrl = document.location.href;
        //this removes the anchor at the end, if there is one
        baseUrl = baseUrl.substring(0, (baseUrl.indexOf("#") === -1) ? baseUrl.length : baseUrl.indexOf("#"));
        //this removes the query after the file name, if there is one
        baseUrl = baseUrl.substring(0, (baseUrl.indexOf("?") === -1) ? baseUrl.length : baseUrl.indexOf("?"));
        //this removes everything after the last slash in the path
        baseUrl = baseUrl.substring(0, (baseUrl.lastIndexOf("/") === -1) ? baseUrl.length : baseUrl.lastIndexOf("/"));

        url = baseUrl + "/swagger.json";
      }

      // Begin Swagger UI call region
      window.ui = SwaggerUIBundle({
        url: url,
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      });
      // End Swagger UI call region
    }
  </script>
  </body>
</html>