diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index 575accf..0000000
--- a/.babelrc
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "presets": [
-    "@babel/react",
-    "@babel/env"
-  ],
-  "plugins": ["@babel/plugin-transform-object-assign", "@babel/plugin-proposal-object-rest-spread",
-    "@babel/plugin-proposal-class-properties", "babel-plugin-array-includes","@babel/plugin-transform-async-to-generator"]
-}
diff --git a/.env b/.env
deleted file mode 100644
index d18f8e8..0000000
--- a/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default environment variables for the Docker Compose files in /docker
-# This file needs to be placed where the docker-compose command is run from.
-
-# Used to provide a CouchDB 2 / 3 build matrix in .travis.yml
-COUCHDB_IMAGE=ibmcom/couchdb3
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 1680c40..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,11 +0,0 @@
-# node_modules ignored by default
-
-dist/
-test/
-assets/
-
-app/**/*.react.js
-app/addons/.module-cache
-app/addons/**/assets/*
-app/addons/**/dependencies/*
-app/load_addons.js
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 37e2aa0..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "root": true,
-  "parser": "babel-eslint",
-
-  "plugins": [
-    "react"
-  ],
-
-  "extends": [
-    "eslint:recommended",
-    "plugin:react/recommended"
-  ],
-
-  "rules": {
-    "semi": ["error", "always"],
-    "keyword-spacing": "error",
-    "space-infix-ops": "error",
-    "space-before-blocks": "error",
-    "array-bracket-spacing": ["error", "never"],
-    "brace-style": ["error", "1tbs", { "allowSingleLine": true }],
-    "comma-spacing": ["error", {"before": false, "after": true}],
-    "computed-property-spacing": ["error", "never"],
-    "eol-last": "error",
-    "indent": ["error", 2, { "SwitchCase": 1, "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }],
-    "no-case-declarations": "off",
-    "no-console": [1, { "allow": ["warn", "error", "info"] }],
-    "no-else-return": "error",
-    "no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
-    "no-trailing-spaces": "error",
-    "semi-spacing": ["error", {"before": false, "after": true}],
-    "space-in-parens": ["error", "never"],
-    "space-unary-ops": "error",
-    "no-unused-vars": ["error", {"varsIgnorePattern": "ReactDOM"}],
-    "react/display-name": "off",
-    // disabling for now since there are too many components without PropTypes
-    "react/prop-types": "off"    
-  },
-
-  "parserOptions": {
-    "sourceType": "module",
-    "ecmaFeatures": {
-      "jsx": true,
-      "experimentalObjectRestSpread": true
-    }
-  },
-
-  "env": {
-    "browser": true,
-    "node": true,
-    "jquery": true,
-    "amd": true,
-    "mocha": true,
-    "phantomjs": true,
-    "es6": true
-  },
-
-  "globals": {
-    "document": true,
-    "window": true,
-    "location": true,
-    "alert": true,
-    "console": true,
-    "clearInterval": true,
-    "setInterval": true,
-    "setTimeout": true,
-    "prompt": true,
-    "confirm": true,
-
-    "jQuery": true,
-    "Backbone": true,
-    "$": true,
-    "_": true,
-    "require": true,
-    "module": true,
-    "sinon": true,
-    "it": true,
-    "describe": true,
-    "beforeEach": true,
-    "afterEach": true,
-    "before": true,
-    "after": true,
-    "define": true,
-    "expect": true,
-    "prettyPrint": true,
-    "jest": true
-  },
-
-  "settings": {
-    "react": {
-      "version": "detect"
-    }
-  }
-}
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index be4f816..0000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--- Provide a general summary of the issue in the Title above -->
-
-## Expected Behavior
-<!--- If you're describing a bug, tell us what should happen -->
-<!--- If you're suggesting a change/improvement, tell us how it should work -->
-
-## Current Behavior
-<!--- If describing a bug, tell us what happens instead of the expected behavior -->
-<!--- If suggesting a change/improvement, explain the difference from current behavior -->
-
-## Possible Solution
-<!--- Not obligatory, but suggest a fix/reason for the bug, -->
-<!--- or ideas how to implement the addition or change -->
-
-## Steps to Reproduce (for bugs)
-<!--- Provide a link to a live example, or an unambiguous set of steps to -->
-<!--- reproduce this bug. Include code to reproduce, if relevant -->
-1.
-2.
-3.
-4.
-
-## Context
-<!--- How has this issue affected you? What are you trying to accomplish? -->
-<!--- Providing context helps us come up with a solution that is most useful in the real world -->
-
-## Your Environment
-<!--- Include as many relevant details about the environment you experienced the bug in -->
-* Version used:
-* Browser Name and version:
-* Operating System and version (desktop or mobile):
-* Link to your project:
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index cd39026..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,42 +0,0 @@
-<!-- Thank you for your contribution!
-
-     Please file this form by replacing the Markdown comments
-     with your text. If a section needs no action - remove it.
-
-     Also remember, that CouchDB uses the Review-Then-Commit (RTC) model
-     of code collaboration. Positive feedback is represented +1 from committers
-     and negative is a -1. The -1 also means veto, and needs to be addressed
-     to proceed. Once there are no objections, the PR can be merged by a
-     CouchDB committer.
-
-     See: http://couchdb.apache.org/bylaws.html#decisions for more info. -->
-
-## Overview
-
-<!-- Please give a short brief for the pull request,
-     what problem it solves or how it makes things better. -->
-
-## Testing recommendations
-
-<!-- Describe how we can test your changes.
-     Does it provides any behaviour that the end users
-     could notice? -->
-
-## GitHub issue number
-
-<!-- If this is a significant change, please file a separate issue at:
-     https://github.com/apache/couchdb-fauxton/issues
-     and include the number here and in commit message(s) using
-     syntax like "Fixes #472" or "Fixes apache/couchdb#472".  -->
-
-## Related Pull Requests
-
-<!-- If your changes affects multiple components in different
-     repositories please put links to those pull requests here.  -->
-
-## Checklist
-
-- [ ] Code is written and works correctly;
-- [ ] Changes are covered by tests;
-- [ ] Documentation reflects the changes;
-- [ ] Update [rebar.config.script](https://github.com/apache/couchdb/blob/master/rebar.config.script) with the correct tag once a new Fauxton release is made
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 2d7315c..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,48 +0,0 @@
-node_modules
-dist
-build
-app/load_addons.js
-!app/addons/
-app/addons/*
-!app/addons/activetasks
-!app/addons/config
-!app/addons/cluster
-!app/addons/components
-!app/addons/replication
-!app/addons/auth
-!app/addons/permissions
-!app/addons/verifyinstall
-!app/addons/compaction
-!app/addons/fauxton
-!app/addons/databases
-!app/addons/documents
-!app/addons/documentation
-!app/addons/styletests
-!app/addons/cors
-!app/addons/setup
-!app/addons/search
-!app/addons/news
-settings.json*
-i18n.json
-!settings.json.default
-!settings.json.default.json
-!i18n.json.default.json
-test/test.config.js
-app/initialize.js
-.module-cache
-test/nightwatch_tests/nightwatch.json
-test/nightwatch_tests/reports/*
-test/nightwatch_tests/selenium/*
-!test/nightwatch_tests/selenium/.gitkeep
-.DS_Store
-selenium-debug.log
-npm-debug.log
-test/bundle.js
-test/bundle.dev.js
-test/templates.js
-test/dashboard.assets
-# test coverage dir
-coverage
-
-# Jetbrains IDE
-.idea/
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 0da95e4..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-app/
-assets/
-tasks
-test/
-dist/debug
-dist/tmp-out
diff --git a/.travis.yml b/.travis.yml
index 9354f57..735a399 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,35 +1,6 @@
 language: node_js
-node_js:
-   - "10"
-sudo: false
-services:
-  - docker
 git:
   depth: 1
-env:
-  - COUCHDB_IMAGE=apache/couchdb:2.3.1 NIGHTWATCH_SKIPTAGS="search,partitioned"
-  - COUCHDB_IMAGE=apache/couchdb:3 NIGHTWATCH_SKIPTAGS="search,nonpartitioned,couchdb-v2-only"
-  # - COUCHDB_IMAGE=couchdb:dev NIGHTWATCH_SKIPTAGS="search,nonpartitioned"
 
-before_install:
-  - npm install -g npm@latest
-  - ./bin/build-couchdb-dev.sh
-install:
-  - npm ci
-before_script:
-  - travis_retry ./bin/docker-up-and-check.sh
-  - curl http://127.0.0.1:5984
-  - npm run stylecheck
-  - npm ls --production --depth=0
-  - npm test
-  - grunt debugDev
-  - DIST=./dist/debug ./bin/fauxton &
-  - sleep 30
 script:
-  - ./node_modules/.bin/grunt nightwatch_retries
-after_script:
-  - npm run docker:down
-cache:
-  - apt
-  - directories:
-    - "$HOME/.npm"
+  - echo "Passed!"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 1d6dd22..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Contributing to Fauxton
-
-Please take a moment to review this document in order to make the contribution
-process easy and effective for everyone involved.
-
-Following these guidelines helps to communicate that you respect the time of
-the developers managing and developing this open source project. In return,
-they should reciprocate that respect in addressing your issue, assessing
-changes, and helping you finalize your pull requests.
-
-Contributions to CouchDB are governed by our [Code of Conduct][6] and a set of
-[Project Bylaws][7]. Apache CouchDB itself also has a [CONTRIBUTING.md][9] if
-you want to help with the larger project. Come join us!
-
-## Contributor quick start
-
-If you never created a pull request before, welcome :tada: :smile: [Here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
-on how to send one :)
-
-The [Readme file](https://github.com/apache/couchdb-fauxton/blob/master/readme.md) has information about how to get the project set up for development.
-
-## Guide to Contributions
-
-We follow our coding-styleguide to make it easier for everyone to write, read and review code:
-[https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md](https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md)
-
-To start working on a specific ticket, create a branch with the GitHub Issue # followed by a traincase description of the issue.
-
-> e.g. 1234-Added-support-for-list-functions
-
-If there is no GH Issue for the issue you have, you don't have to create one. Please describe the issue, how it happens and how you fixed it in the commit message.
-
-Commit messages should follow the following style:
-
-```
-A brief one line description < 72 chars
-
-Followed by further explanation if needed, this should be wrapped at
-around 72 characters. Most commits should reference an existing
-issue
-
-Fixes #XXX (if there is a GH Issue)
-Fixes apache/couchdb#XXX (if there is a CouchDB project GH Issue)
-```
-
-Before you submit the Pull Request, please [run our test suite](#tests.md) and make sure that it passes.
-
-We regularly check the PR list for Fauxton and should get back
-to you with a code review. If no one has responded to you yet, you can find us on [Freenode IRC in #couchdb-dev][8].
-Ping **garren**, **robertkowalski** or **michellep** though anyone in the room should be able to help you.
-
-## Get in Touch
-
-We appreciate constructive feedback from people who use CouchDB, so don't be shy. We know there are bugs and we know
-there is room for improvement.
-
-ʕ´•ᴥ•`ʔ Thanks!
-
--- Fauxton team
-
-[6]: http://couchdb.apache.org/conduct.html
-[7]: http://couchdb.apache.org/bylaws.html
-[8]: http://webchat.freenode.net?channels=%23couchdb-dev
-[9]: https://github.com/apache/couchdb/blob/master/CONTRIBUTING.md
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 215bbf4..0000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,266 +0,0 @@
-// Licensed 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.
-
-
-// This is the main application configuration file.  It is a Grunt
-// configuration file, which you can learn more about here:
-// https://github.com/cowboy/grunt/blob/master/docs/configuring.md
-
-/*jslint node: true */
-"use strict";
-
-module.exports = function (grunt) {
-  var helper = require('./tasks/helper.js'),
-      initHelper = helper.init(grunt),
-      _ = grunt.util._;
-
-  var couch_config = function () {
-    var default_couch_config = {
-      fauxton: {
-        db: helper.couch + 'fauxton',
-        app: './couchapp.js',
-        options: {
-          okay_if_missing: true
-        }
-      }
-    };
-
-    var settings_couch_config = initHelper.readSettingsFile().couch_config;
-    return settings_couch_config || default_couch_config;
-  }();
-
-  var cleanableAddons =  function () {
-    var theListToClean = [];
-    initHelper.processAddons(function (addon) {
-      // Only clean addons that are included from a local dir
-      if (addon.path) {
-        theListToClean.push("app/addons/" + addon.name);
-      }
-    });
-
-    return theListToClean;
-  }();
-
-  var cleanable = function () {
-    // Whitelist files and directories to be cleaned
-    // You'll always want to clean these two directories
-    // Now find the external addons you have and add them for cleaning up
-    return _.union(["dist/", "app/load_addons.js"], cleanableAddons);
-  }();
-
-  var templateSettings = (function getTemplateSettings () {
-    var settings = initHelper.readSettingsFile();
-
-    var i18n = JSON.stringify(initHelper.readI18nFile(), null, ' ');
-
-    Object.keys(settings.template).forEach(function (key) {
-      settings.template[key].variables.generationDate = new Date().toISOString();
-      if (!settings.template[key].variables.generationLabel) {
-        settings.template[key].variables.generationLabel = 'Generated: ';
-      }
-      settings.template[key].app.i18n = i18n;
-    });
-
-    return settings.template;
-  })();
-
-  var config = {
-
-    // The clean task ensures all files are removed from the dist/ directory so
-    // that no files linger from previous builds.
-    clean: {
-      options: {
-        'force': true
-      },
-      release:  cleanable
-    },
-
-    template: templateSettings,
-
-    // Copy build artifacts and library code into the distribution
-    // see - http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
-    copy: {
-      couchdb: {
-        files: [
-          // this gets built in the template task
-          {src: "dist/release/index.html", dest: "../../share/www/index.html"},
-          {src: ["**"], dest: '../../share/www/dashboard.assets/', cwd: 'dist/release/dashboard.assets/',  expand: true},
-        ]
-      },
-      couchdebug: {
-        files: [
-          // this gets built in the template task
-          {src: "dist/debug/index.html", dest: "../../share/www/index.html"},
-        ]
-      },
-      dist:{
-        files:[
-          {src: 'dist/debug/index.html', dest: 'dist/release/index.html'},
-          {src: './favicon.ico', dest: "dist/release/favicon.ico"}
-        ]
-      },
-
-      distDepsRequire: {
-        files:[
-          {src: 'assets/**', dest: 'dist/tmp-out/', flatten: false, expand: false},
-        ]
-      },
-
-      debug: {
-        files:[
-          {src: './favicon.ico', dest: "dist/debug/favicon.ico"}
-        ]
-      },
-
-      testfiles: {
-        files:[
-          {src: ['test/**'], dest: 'dist/debug/', flatten: false, expand: true},
-          {src: 'assets/**', dest: 'dist/debug/', flatten: false, expand: false},
-        ]
-      }
-    },
-
-    get_deps: {
-      "default": {
-        src: "settings.json"
-      }
-    },
-
-    gen_load_addons: {
-      "default": {
-        src: "settings.json"
-      }
-    },
-    gen_initialize: templateSettings,
-    checkTestExists: templateSettings,
-
-    mkcouchdb: couch_config,
-    rmcouchdb: couch_config,
-    couchapp: couch_config,
-
-    shell: {
-      webpack: {
-        command: 'npm run webpack:dev'
-      },
-
-      webpackrelease: {
-        command: 'npm run webpack:release'
-      }
-    },
-
-    exec: {
-      start_nightWatch: {
-        command: 'node ' + __dirname + '/node_modules/nightwatch/bin/nightwatch' +
-        ' -c ' + __dirname + '/test/nightwatch_tests/nightwatch.json',
-        options: {
-          maxBuffer: 1000 * 1024
-        }
-      },
-      start_nightWatch_with_retries: {
-        command: 'node ' + __dirname + '/node_modules/nightwatch/bin/nightwatch' +
-        ' -c ' + __dirname + '/test/nightwatch_tests/nightwatch.json' +
-        ' --suiteRetries 3',
-        options: {
-          maxBuffer: 1000 * 1024
-        }
-      }
-    },
-
-    // generates the nightwatch.json file with appropriate content for this env
-    initNightwatch: {
-      default: {
-        settings: initHelper.readSettingsFile(),
-        template: 'test/nightwatch_tests/nightwatch.json.underscore',
-        dest: 'test/nightwatch_tests/nightwatch.json'
-      }
-    }
-  };
-
-  grunt.initConfig(config);
-
-  /*
-   * Load Grunt plugins
-   */
-  // Load fauxton specific tasks
-  grunt.loadTasks('tasks');
-
-  grunt.loadNpmTasks('grunt-couchapp');
-  grunt.loadNpmTasks('grunt-exec');
-  grunt.loadNpmTasks('grunt-contrib-copy');
-  grunt.loadNpmTasks('grunt-contrib-clean');
-  grunt.loadNpmTasks('grunt-shell');
-  /*
-   * Default task
-   */
-  // defult task - install minified app to local CouchDB
-  grunt.registerTask('default', 'couchdb');
-
-  /*
-   * Transformation tasks
-   */
-  grunt.registerTask('test', ['clean:release', 'dependencies', 'copy:debug', 'gen_initialize:development']);
-
-  // Fetch dependencies (from git or local dir)
-  grunt.registerTask('dependencies', ['get_deps', 'gen_load_addons:default']);
-
-  // minify code and css, ready for release.
-  grunt.registerTask('build', ['copy:distDepsRequire', 'shell:webpackrelease']);
-  /*
-   * Build the app in either dev, debug, or release mode
-   */
-  // dev server
-  grunt.registerTask('dev', function () {
-    console.warn('This is deprecated. Please run npm run dev instead');
-  });
-
-  // build a debug release
-  grunt.registerTask('debug', ['clean', 'dependencies', "gen_initialize:development",
-    'copy:debug']);
-
-  grunt.registerTask('debugDev', ['clean', 'dependencies', "gen_initialize:development",
-    'copy:debug', 'shell:webpack']);
-
-  grunt.registerTask('devSetup', ['dependencies', "gen_initialize:development",
-    'copy:debug']);
-  grunt.registerTask('devSetupWithClean', ['clean', 'devSetup']);
-
-  grunt.registerTask('watchRun', ['clean:watch', 'dependencies', 'shell:stylecheck']);
-
-  // build a release
-  grunt.registerTask('release_commons_prefix', ['clean', 'dependencies']);
-  grunt.registerTask('release_commons_suffix', ['build', 'copy:dist']);
-
-  grunt.registerTask('release', ['release_commons_prefix', 'gen_initialize:release', 'release_commons_suffix']);
-  grunt.registerTask('couchapp_release', ['release_commons_prefix', 'gen_initialize:couchapp', 'release_commons_suffix']);
-
-  /*
-   * Install into CouchDB in either debug, release, or couchapp mode
-   */
-  // make a development install that is server by mochiweb under _utils
-  grunt.registerTask('couchdebug', ['debug', 'copy:couchdebug']);
-  // make a minimized install that is server by mochiweb under _utils
-  grunt.registerTask('couchdb', ['release', 'copy:couchdb']);
-  // make an install that can be deployed as a couchapp
-  grunt.registerTask('couchapp_setup', ['couchapp_release']);
-  // install fauxton as couchapp
-  grunt.registerTask('couchapp_install', ['rmcouchdb:fauxton', 'mkcouchdb:fauxton', 'couchapp:fauxton']);
-  // setup and install fauxton as couchapp
-  grunt.registerTask('couchapp_deploy', ['couchapp_setup', 'couchapp_install']);
-
-  /*
-   * Nightwatch functional testing
-   */
-  //Start Nightwatch test from terminal, using: $ grunt nightwatch
-  grunt.registerTask('nightwatch', ['initNightwatch', 'exec:start_nightWatch']);
-  //Same as above but the Nightwatch runner will retry tests 3 times before failing
-  grunt.registerTask('nightwatch_retries', ['initNightwatch', 'exec:start_nightWatch_with_retries']);
-};
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index e747955..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                Apache License
-                          Version 2.0, January 2004
-                       http://www.apache.org/licenses/
-
-  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-  1. Definitions.
-
-     "License" shall mean the terms and conditions for use, reproduction,
-     and distribution as defined by Sections 1 through 9 of this document.
-
-     "Licensor" shall mean the copyright owner or entity authorized by
-     the copyright owner that is granting the License.
-
-     "Legal Entity" shall mean the union of the acting entity and all
-     other entities that control, are controlled by, or are under common
-     control with that entity. For the purposes of this definition,
-     "control" means (i) the power, direct or indirect, to cause the
-     direction or management of such entity, whether by contract or
-     otherwise, or (ii) ownership of fifty percent (50%) or more of the
-     outstanding shares, or (iii) beneficial ownership of such entity.
-
-     "You" (or "Your") shall mean an individual or Legal Entity
-     exercising permissions granted by this License.
-
-     "Source" form shall mean the preferred form for making modifications,
-     including but not limited to software source code, documentation
-     source, and configuration files.
-
-     "Object" form shall mean any form resulting from mechanical
-     transformation or translation of a Source form, including but
-     not limited to compiled object code, generated documentation,
-     and conversions to other media types.
-
-     "Work" shall mean the work of authorship, whether in Source or
-     Object form, made available under the License, as indicated by a
-     copyright notice that is included in or attached to the work
-     (an example is provided in the Appendix below).
-
-     "Derivative Works" shall mean any work, whether in Source or Object
-     form, that is based on (or derived from) the Work and for which the
-     editorial revisions, annotations, elaborations, or other modifications
-     represent, as a whole, an original work of authorship. For the purposes
-     of this License, Derivative Works shall not include works that remain
-     separable from, or merely link (or bind by name) to the interfaces of,
-     the Work and Derivative Works thereof.
-
-     "Contribution" shall mean any work of authorship, including
-     the original version of the Work and any modifications or additions
-     to that Work or Derivative Works thereof, that is intentionally
-     submitted to Licensor for inclusion in the Work by the copyright owner
-     or by an individual or Legal Entity authorized to submit on behalf of
-     the copyright owner. For the purposes of this definition, "submitted"
-     means any form of electronic, verbal, or written communication sent
-     to the Licensor or its representatives, including but not limited to
-     communication on electronic mailing lists, source code control systems,
-     and issue tracking systems that are managed by, or on behalf of, the
-     Licensor for the purpose of discussing and improving the Work, but
-     excluding communication that is conspicuously marked or otherwise
-     designated in writing by the copyright owner as "Not a Contribution."
-
-     "Contributor" shall mean Licensor and any individual or Legal Entity
-     on behalf of whom a Contribution has been received by Licensor and
-     subsequently incorporated within the Work.
-
-  2. Grant of Copyright License. Subject to the terms and conditions of
-     this License, each Contributor hereby grants to You a perpetual,
-     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-     copyright license to reproduce, prepare Derivative Works of,
-     publicly display, publicly perform, sublicense, and distribute the
-     Work and such Derivative Works in Source or Object form.
-
-  3. Grant of Patent License. Subject to the terms and conditions of
-     this License, each Contributor hereby grants to You a perpetual,
-     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-     (except as stated in this section) patent license to make, have made,
-     use, offer to sell, sell, import, and otherwise transfer the Work,
-     where such license applies only to those patent claims licensable
-     by such Contributor that are necessarily infringed by their
-     Contribution(s) alone or by combination of their Contribution(s)
-     with the Work to which such Contribution(s) was submitted. If You
-     institute patent litigation against any entity (including a
-     cross-claim or counterclaim in a lawsuit) alleging that the Work
-     or a Contribution incorporated within the Work constitutes direct
-     or contributory patent infringement, then any patent licenses
-     granted to You under this License for that Work shall terminate
-     as of the date such litigation is filed.
-
-  4. Redistribution. You may reproduce and distribute copies of the
-     Work or Derivative Works thereof in any medium, with or without
-     modifications, and in Source or Object form, provided that You
-     meet the following conditions:
-
-     (a) You must give any other recipients of the Work or
-         Derivative Works a copy of this License; and
-
-     (b) You must cause any modified files to carry prominent notices
-         stating that You changed the files; and
-
-     (c) You must retain, in the Source form of any Derivative Works
-         that You distribute, all copyright, patent, trademark, and
-         attribution notices from the Source form of the Work,
-         excluding those notices that do not pertain to any part of
-         the Derivative Works; and
-
-     (d) If the Work includes a "NOTICE" text file as part of its
-         distribution, then any Derivative Works that You distribute must
-         include a readable copy of the attribution notices contained
-         within such NOTICE file, excluding those notices that do not
-         pertain to any part of the Derivative Works, in at least one
-         of the following places: within a NOTICE text file distributed
-         as part of the Derivative Works; within the Source form or
-         documentation, if provided along with the Derivative Works; or,
-         within a display generated by the Derivative Works, if and
-         wherever such third-party notices normally appear. The contents
-         of the NOTICE file are for informational purposes only and
-         do not modify the License. You may add Your own attribution
-         notices within Derivative Works that You distribute, alongside
-         or as an addendum to the NOTICE text from the Work, provided
-         that such additional attribution notices cannot be construed
-         as modifying the License.
-
-     You may add Your own copyright statement to Your modifications and
-     may provide additional or different license terms and conditions
-     for use, reproduction, or distribution of Your modifications, or
-     for any such Derivative Works as a whole, provided Your use,
-     reproduction, and distribution of the Work otherwise complies with
-     the conditions stated in this License.
-
-  5. Submission of Contributions. Unless You explicitly state otherwise,
-     any Contribution intentionally submitted for inclusion in the Work
-     by You to the Licensor shall be under the terms and conditions of
-     this License, without any additional terms or conditions.
-     Notwithstanding the above, nothing herein shall supersede or modify
-     the terms of any separate license agreement you may have executed
-     with Licensor regarding such Contributions.
-
-  6. Trademarks. This License does not grant permission to use the trade
-     names, trademarks, service marks, or product names of the Licensor,
-     except as required for reasonable and customary use in describing the
-     origin of the Work and reproducing the content of the NOTICE file.
-
-  7. Disclaimer of Warranty. Unless required by applicable law or
-     agreed to in writing, Licensor provides the Work (and each
-     Contributor provides its Contributions) on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-     implied, including, without limitation, any warranties or conditions
-     of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-     PARTICULAR PURPOSE. You are solely responsible for determining the
-     appropriateness of using or redistributing the Work and assume any
-     risks associated with Your exercise of permissions under this License.
-
-  8. Limitation of Liability. In no event and under no legal theory,
-     whether in tort (including negligence), contract, or otherwise,
-     unless required by applicable law (such as deliberate and grossly
-     negligent acts) or agreed to in writing, shall any Contributor be
-     liable to You for damages, including any direct, indirect, special,
-     incidental, or consequential damages of any character arising as a
-     result of this License or out of the use or inability to use the
-     Work (including but not limited to damages for loss of goodwill,
-     work stoppage, computer failure or malfunction, or any and all
-     other commercial damages or losses), even if such Contributor
-     has been advised of the possibility of such damages.
-
-  9. Accepting Warranty or Additional Liability. While redistributing
-     the Work or Derivative Works thereof, You may choose to offer,
-     and charge a fee for, acceptance of support, warranty, indemnity,
-     or other liability obligations and/or rights consistent with this
-     License. However, in accepting such obligations, You may act only
-     on Your own behalf and on Your sole responsibility, not on behalf
-     of any other Contributor, and only if You agree to indemnify,
-     defend, and hold each Contributor harmless for any liability
-     incurred by, or claims asserted against, such Contributor by reason
-     of your accepting any such warranty or additional liability.
-
-  END OF TERMS AND CONDITIONS
-
-  APPENDIX: How to apply the Apache License to your work.
-
-     To apply the Apache License to your work, attach the following
-     boilerplate notice, with the fields enclosed by brackets "[]"
-     replaced with your own identifying information. (Don't include
-     the brackets!)  The text should be enclosed in the appropriate
-     comment syntax for the file format. We also recommend that a
-     file or class name and description of purpose be included on the
-     same "printed page" as the copyright notice for easier
-     identification within third-party archives.
-
-  Copyright [yyyy] [name of copyright owner]
-
-  Licensed 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.
-
diff --git a/__mocks__/fileMock.js b/__mocks__/fileMock.js
deleted file mode 100644
index 86059f3..0000000
--- a/__mocks__/fileMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'test-file-stub';
diff --git a/__mocks__/styleMock.js b/__mocks__/styleMock.js
deleted file mode 100644
index f053ebf..0000000
--- a/__mocks__/styleMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = {};
diff --git a/app/addons/activetasks/__tests__/components.test.js b/app/addons/activetasks/__tests__/components.test.js
deleted file mode 100644
index d5dea22..0000000
--- a/app/addons/activetasks/__tests__/components.test.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed 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.
-import TableHeader from '../components/tableheader';
-import FilterTabs from '../components/filtertabs';
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Active Tasks -- Components', () => {
-
-  describe('Active Tasks Table (Components)', () => {
-    describe('Active Tasks Filter tray', () => {
-
-      const radioTexts = [
-        'Replication',
-        'Database Compaction',
-        'Indexer',
-        'View Compaction'
-      ];
-
-      it('should trigger change to radio buttons', () => {
-        radioTexts.forEach((text) => {
-          let spy = sinon.spy();
-          const tabs = mount(
-            <FilterTabs
-              onRadioClick={spy}
-              selectedRadio={"All Tasks"}
-              radioNames={radioTexts}
-            />
-          );
-
-          tabs.find(`input[value="${text}"]`).simulate('change');
-          expect(spy.calledOnce).toBeTruthy();
-        });
-      });
-
-      it('should trigger change to search term', () => {
-        const spy = sinon.spy();
-        const tabs = mount(
-          <FilterTabs
-            onSearch={spy}
-            selectedRadio={"All Tasks"}
-          />
-        );
-        tabs.find('.searchbox').simulate('change', {target: {value: 'searching'}});
-        expect(spy.calledOnce).toBeTruthy();
-      });
-    });
-
-    describe('Active Tasks Table Headers', () => {
-      const tableTexts = [
-        'type',
-        'database',
-        'started-on'
-      ];
-
-      it('should trigger change to radio buttons', () => {
-
-        tableTexts.forEach((text) => {
-          let spy = sinon.spy();
-          const table = mount(
-            <table>
-              <TableHeader
-                onTableHeaderClick={spy}
-                headerIsAscending={true}
-                sortByHeader={"All Tasks"}
-              />
-            </table>
-          );
-
-          table.find(`.${text}`).simulate('click');
-          expect(spy.calledOnce).toBeTruthy();
-        });
-      });
-    });
-  });
-});
diff --git a/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js b/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js
deleted file mode 100644
index bf60a47..0000000
--- a/app/addons/activetasks/__tests__/fakeActiveTaskResponse.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// Licensed 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.
-export default [
-  {
-    "user": "okra",
-    "updated_on": 10,
-    "type": "replication",
-    "target": "https://okra.fake.com/okra_rep/",
-    "doc_write_failures": 0,
-    "doc_id": "rep_1",
-    "continuous": true,
-    "checkpointed_source_seq": "3-g1AAAAEkeJyFzkEOgjAQBdAJkHgOPUBDQS1dyVVmaE0l0CaIa72Z3qyOwahscPMn-Zm8_A4AMpca2BhqwmBrQzIXfQj-7E7eiqYLF4N-FN6OHf8mCHSIMbYuwbTnYiUllUbJl7H-GNUSQTUnXd8KTEqR467Qc0UtKT7jhBsfhu5fCa3SFR3nUvlfekzS76a9Vmi37RPEPVpb",
-    "checkpoint_interval": 5000,
-    "changes_pending": null,
-    "pid": "<0.10487.5819>",
-    "node": "fake1@fake.net",
-    "docs_read": 0,
-    "docs_written": 0,
-    "missing_revisions_found": 0,
-    "replication_id": "07d9a41f181ce11b93ba1855ca7+continuous+create_target",
-    "revisions_checked": 0,
-    "source": "https://okra.fake.com/okra/",
-    "source_seq": 0,
-    "started_on": 9
-  },
-  {
-    "user": "ooo",
-    "updated_on": 8,
-    "type": "indexer",
-    "node": "fake2@fake2.net",
-    "pid": "<0.10541.4469>",
-    "changes_done": 145,
-    "database": "shards/00000000-3fffffff/ooo/fakedatabase.1234567890abc",
-    "design_document": "_design/superpurple",
-    "progress": 0,
-    "started_on": 7,
-    "total_changes": 22942
-  },
-  {
-    "updated_on": 6,
-    "node": "fake3@fake3.net",
-    "pid": "<0.1152.4474>",
-    "changes_done": 144001,
-    "database": "shards/00000000-3fffffff/global_changes.1398718618",
-    "progress": 66,
-    "started_on": 5,
-    "total_changes": 218052,
-    "type": "database_compaction"
-  },
-  {
-    "user": "information",
-    "updated_on": 4,
-    "type": "replication",
-    "target": "https://information.com/somedatabase/",
-    "doc_write_failures": 0,
-    "doc_id": "c0ffb663f75cd940aadb4a4eaa",
-    "continuous": true,
-    "checkpointed_source_seq": 58717,
-    "checkpoint_interval": 3600000,
-    "changes_pending": 0,
-    "pid": "<0.11612.3684>",
-    "node": "fake.fake.com",
-    "docs_read": 108,
-    "docs_written": 108,
-    "missing_revisions_found": 108,
-    "replication_id": "a546c13951c6bd4f2d187d388+continuous",
-    "revisions_checked": 1024,
-    "source": "http://software:*****@123.123.123:5984/somedatabase/",
-    "source_seq": 58717,
-    "started_on": 3
-  },
-  {
-    "user": "abc",
-    "updated_on": 2,
-    "type": "replication",
-    "target": "https://fake.com/db_abc/",
-    "doc_write_failures": 0,
-    "doc_id": "replication_2014",
-    "continuous": true,
-    "checkpointed_source_seq": "2-g1AAAAEXeJzLYWBgYMlgTyrNSS3QS87JL01JzCvRy0styQGqY0pkSLL___9_VgZTImMuUIA9JSUx1cTIAE2_IS79SQ5AMqkexQiLNAPzNAsjYp2QxwIkGRqAFNCU_SBjGMDGGFokp6WZJ6IZY4TfmAMQY_4jjDE2SDE3TzHJAgBp5FSv",
-    "checkpoint_interval": 5000,
-    "changes_pending": 0,
-    "pid": "<0.14029.1733>",
-    "node": "node.node.node..net",
-    "docs_read": 0,
-    "docs_written": 0,
-    "missing_revisions_found": 0,
-    "replication_id": "33af566bab6a58aee04e+continuous",
-    "revisions_checked": 7,
-    "source": "https://fake.fake123.com/db_abc/",
-    "source_seq": "2-g1AAAAEXeJzLYWBgYMlgS3QS87JL01JzCvRy0styQGqY0pkSLL___9_VgZTImMuUIA9JSUx1cTIAE2_IS79SQ5AMqkexQiLNAPzNAsjYp2QxwIkGRqAFNCU_SBjGMDGGFokp6WZJ6IZY4TfmAMQY_4jjDE2SDE3TzHJAgBp5FSv",
-    "started_on": 1
-  },
-  {
-    "view": 5,
-    "user": "treeman",
-    "updated_on": 1426614009,
-    "type": "view_compaction",
-    "total_changes": 1108953,
-    "node": "treeman.net",
-    "pid": "<0.19668.4045>",
-    "changes_done": 430000,
-    "database": "shards/c0000000-ffffffff/treecompany/fake.1234567890",
-    "design_document": "_design/trunk",
-    "phase": "view",
-    "progress": 38,
-    "started_on": 1426602505
-  },
-];
diff --git a/app/addons/activetasks/__tests__/reducer.test.js b/app/addons/activetasks/__tests__/reducer.test.js
deleted file mode 100644
index e1ddb8f..0000000
--- a/app/addons/activetasks/__tests__/reducer.test.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed 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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-import fakedResponse from "./fakeActiveTaskResponse";
-
-describe('Active Tasks -- Stores', () => {
-  let initState;
-
-  beforeEach(() => {
-    initState = reducer(undefined, {
-      type: ActionTypes.ACTIVE_TASKS_FETCH_AND_SET,
-      options: fakedResponse
-    });
-  });
-
-  describe('Active Task Stores - Filter Tab Tray', () => {
-
-    it('should filter the table correctly, by radio -- All Tasks', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'all_tasks'
-      });
-      expect(state.tasks.length).toBeGreaterThan(0);
-      expect(state.tasks.length).toEqual(state.filteredTasks.length);
-    });
-
-    it('should filter the table correctly, by radio', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'replication'
-      });
-
-      //parse table and check that it only contains objects with type: Replication
-      expect(state.filteredTasks.length > 0).toBeTruthy();
-      state.filteredTasks.forEach(task => {
-        expect(task.type).toEqual('replication');
-        expect(task.type).toEqual(state.selectedRadio);
-      });
-    });
-
-    it('should search the table correctly', () => {
-      var searchTerm = 'base';
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM,
-        options: searchTerm
-      });
-
-      const fakeFilteredTable = [
-        { user: 'information'},
-        { user: 'ooo'}
-      ];
-
-      expect(fakeFilteredTable[0].user).toBe(state.filteredTasks[0].user);
-      expect(fakeFilteredTable[1].user).toBe(state.filteredTasks[1].user);
-    });
-  });
-
-  describe('Active Task Stores - Table Header Sort - Select Ascending/Descending', () => {
-
-    it('should set header as ascending, on default', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-        options: 'all_tasks'
-      });
-      expect(state.headerIsAscending).toBeTruthy();
-    });
-
-    it('should set header as descending, if same header is selected again', () => {
-      const state = reducer(initState, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state.headerIsAscending).toBeTruthy();
-
-      const state2 = reducer(state, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state2.headerIsAscending).toBeFalsy();
-
-      const state3 = reducer(state2, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'sameHeader'
-      });
-      expect(state3.headerIsAscending).toBeTruthy();
-
-      const state4 = reducer(state3, {
-        type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-        options: 'differentHeader'
-      });
-      expect(state4.headerIsAscending).toBeTruthy();
-    });
-  });
-});
diff --git a/app/addons/activetasks/actions.js b/app/addons/activetasks/actions.js
deleted file mode 100644
index 60d6488..0000000
--- a/app/addons/activetasks/actions.js
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from '../../core/api';
-import ActionTypes from "./actiontypes";
-import fetchActiveTasks from './api';
-
-export const setActiveTaskIsLoading = (boolean) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SET_IS_LOADING,
-    options: boolean
-  };
-};
-
-export const setActiveTasks = (tasks) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_FETCH_AND_SET,
-    options: tasks
-  };
-};
-
-export const init = () => (dispatch) => {
-  dispatch(setActiveTaskIsLoading(true));
-  fetchActiveTasks()
-    .then(tasks => {
-      dispatch(setActiveTaskIsLoading(false));
-      dispatch(setActiveTasks(tasks));
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: `Fetching active tasks failed: ${error}`,
-        type: 'error'
-      });
-    });
-};
-
-export const switchTab = (tab) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SWITCH_TAB,
-    options: tab
-  };
-};
-
-export const setSearchTerm = (searchTerm) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM,
-    options: searchTerm
-  };
-};
-
-export const sortByColumnHeader = (columnName) => {
-  return {
-    type: ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER,
-    options: columnName
-  };
-};
-
-export const runPollingUpdate = () => (dispatch) => {
-  fetchActiveTasks()
-    .then(tasks => {
-      dispatch(setActiveTasks(tasks));
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: `Fetching active tasks failed: ${error}`,
-        type: 'error'
-      });
-    });
-};
diff --git a/app/addons/activetasks/actiontypes.js b/app/addons/activetasks/actiontypes.js
deleted file mode 100644
index 16e463d..0000000
--- a/app/addons/activetasks/actiontypes.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed 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.
-export default {
-  ACTIVE_TASKS_SWITCH_TAB: 'ACTIVE_TASKS_SWITCH_TAB',
-  ACTIVE_TASKS_SET_COLLECTION: 'ACTIVE_TASKS_SET_COLLECTION',
-  ACTIVE_TASKS_SET_SEARCH_TERM: 'ACTIVE_TASKS_SET_SEARCH_TERM',
-  ACTIVE_TASKS_SORT_BY_COLUMN_HEADER: 'ACTIVE_TASKS_SORT_BY_COLUMN_HEADER',
-  ACTIVE_TASKS_FETCH_AND_SET: 'ACTIVE_TASKS_FETCH_AND_SET',
-  ACTIVE_TASKS_SET_IS_LOADING: 'ACTIVE_TASKS_SET_IS_LOADING',
-  ACTIVE_TASKS_POLLING_COLLECTION: 'ACTIVE_TASKS_POLLING_COLLECTION'
-};
diff --git a/app/addons/activetasks/api.js b/app/addons/activetasks/api.js
deleted file mode 100644
index 161c341..0000000
--- a/app/addons/activetasks/api.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-
-import Helpers from "../../helpers";
-import { get } from '../../core/ajax';
-
-export default () => {
-  return get(Helpers.getServerUrl('/_active_tasks'))
-    .then(tasks => {
-      if (tasks.error) {
-        throw new Error(tasks.reason);
-      }
-      return tasks;
-    });
-};
-
diff --git a/app/addons/activetasks/assets/less/activetasks.less b/app/addons/activetasks/assets/less/activetasks.less
deleted file mode 100644
index 5b4cb7a..0000000
--- a/app/addons/activetasks/assets/less/activetasks.less
+++ /dev/null
@@ -1,155 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "../../../../../assets/less/mixins.less";
-
-#active-tasks-page {
-  overflow: auto;
-
-  .inner {
-    overflow: auto;
-    height: 100%;
-  }
-
-  .task-tabs li,
-  .active-tasks td.tableheader {
-    cursor: pointer;
-    padding-bottom: 15px;
-
-    &.type {
-      width: 10%;
-    }
-
-    &.database {
-      width: 30%;
-    }
-
-    &.started-on {
-      width: 13%;
-    }
-
-    &.updated-on {
-      width: 13%;
-    }
-
-    &.pid {
-      width: 10%;
-    }
-
-    &.progress {
-      width: 23%;
-    }
-  }
-
-  #active-tasks-table {
-    min-width: 725px;
-    td.header-field {
-      padding: 0px;
-    }
-
-    p.multiline-active-tasks-message {
-      margin: 0;
-      line-height: 1.3;
-      margin-bottom: 3px;
-
-      &.time:nth-child(2) {
-        color: #888;
-      }
-
-      &.to-from-database{
-        &:first-child {
-          border-bottom: 1px solid #ddd;
-        }
-        padding-bottom: 15px;
-      }
-    }
-  }
-
-  .task-search-database {
-    margin: 20px;
-  }
-
-  .active-tasks.dashboard-upper-menu {
-    left: 220px;
-
-    .closeMenu & {
-      left: 64px;
-    }
-  }
-
-  .component-tab-element-wrapper {
-    #active-tasks-search-box {
-      display: inline;
-      font-size: 14px;
-      font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-      height: 51px;
-      background-color: #eee;
-      width: 200px;
-      margin: 9px 0 0 0;
-
-      &:focus {
-        background-color: #fff;
-        outline-color: #fff;
-      };
-    }
-  }
-
-  .dashboard-lower-menu {
-    padding-top: 90px;
-    padding-left: 20px;
-  }
-
-  .header-field {
-    background-color: #ccc;
-
-
-    &.radio {
-      display: none;
-    }
-
-    &.label-text {
-      display: block;
-      font-weight: bold;
-      padding:10px;
-      margin: 0px;
-      height: 50px;
-      .noselect()
-    }
-
-    .table td& {
-      padding: 0px;
-      margin: 0px;
-    }
-
-    .active-tasks-header {
-      background-color: #ccc;
-    }
-
-    .icon-caret-up, .icon-caret-down {
-      color: @brandHighlight;
-    }
-  }
-}
-
-.active-tasks__polling-wrapper {
-  display: flex;
-  align-items: center;
-  flex-direction: row;
-  height: 100%;
-
-  &--ie1X {
-      align-items: stretch;
-  }
-}
diff --git a/app/addons/activetasks/base.js b/app/addons/activetasks/base.js
deleted file mode 100644
index f51cf89..0000000
--- a/app/addons/activetasks/base.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import Activetasks from "./routes";
-import "./assets/less/activetasks.less";
-import reducers from './reducers';
-
-Activetasks.initialize = function () {
-  FauxtonAPI.addHeaderLink({title: 'Active Tasks', icon: 'fonticon-activetasks', href: '#/activetasks'});
-};
-
-FauxtonAPI.addReducers({
-  activetasks: reducers
-});
-
-export default Activetasks;
diff --git a/app/addons/activetasks/components/controller.js b/app/addons/activetasks/components/controller.js
deleted file mode 100644
index ec8a841..0000000
--- a/app/addons/activetasks/components/controller.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import ActiveTasksFilterTabs from './filtertabs';
-import ActiveTaskTable from './table';
-
-export default class ActiveTasksController extends React.Component {
-  componentDidMount() {
-    this.props.init();
-  }
-
-  setNewSearchTerm = (searchTerm) => {
-    this.props.setSearchTerm(searchTerm);
-  };
-
-  switchTab = (newRadioButton) => {  //tabs buttons
-    this.props.switchTab(newRadioButton);
-  };
-
-  tableHeaderOnClick = (headerClicked) => {
-    this.props.sortByColumnHeader(headerClicked);
-  };
-
-  render() {
-    const {isLoading, tasks, searchTerm, selectedRadio, sortByHeader, headerIsAscending} = this.props;
-
-    const setSearchTerm = this.setNewSearchTerm;
-    const onTableHeaderClick = this.tableHeaderOnClick;
-
-    return (
-      <div id="active-tasks-page" className="scrollable">
-        <div className="inner">
-          <ActiveTasksFilterTabs
-            searchTerm={searchTerm}
-            selectedRadio={selectedRadio}
-            onSearch={setSearchTerm}
-            onRadioClick={this.switchTab}/>
-          <ActiveTaskTable
-            isLoading={isLoading}
-            tasks={tasks}
-            searchTerm={searchTerm}
-            selectedRadio={selectedRadio}
-            onTableHeaderClick={onTableHeaderClick}
-            sortByHeader={sortByHeader}
-            headerIsAscending={headerIsAscending} />
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/filtertabs.js b/app/addons/activetasks/components/filtertabs.js
deleted file mode 100644
index 8d5410c..0000000
--- a/app/addons/activetasks/components/filtertabs.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import Components from "../../components/react-components";
-const {TabElement, TabElementWrapper} = Components;
-
-export default class ActiveTasksFilterTabs extends React.Component {
-  static defaultProps = {
-    radioNames : [
-      'All Tasks',
-      'Replication',
-      'Database Compaction',
-      'Indexer',
-      'View Compaction'
-    ]
-  };
-
-  checked = (radioName) => {
-    return this.props.selectedRadio === radioName;
-  };
-
-  onRadioClick = (e) => {
-    var radioName = e.target.value;
-    this.props.onRadioClick(radioName);
-  };
-
-  createFilterTabs = () => {
-    return (
-      this.props.radioNames.map((radioName, i) => {
-        const checked = this.checked(radioName);
-
-        return (
-          <TabElement
-            key={i}
-            selected={checked}
-            text={radioName}
-            onChange={this.onRadioClick} />
-        );
-      })
-    );
-  };
-
-  searchTermChange = (e) => {
-    var searchTerm = e.target.value;
-    this.props.onSearch(searchTerm);
-  };
-
-  render() {
-    const filterTabs = this.createFilterTabs();
-    return (
-      <TabElementWrapper>
-        {filterTabs}
-        <li className="component-tab-list-element">
-          <input
-            id="active-tasks-search-box"
-            className="searchbox"
-            type="text"
-            name="search"
-            placeholder="Search for databases..."
-            value={this.props.searchTerm}
-            onChange={this.searchTermChange} />
-        </li>
-      </TabElementWrapper>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/polling.js b/app/addons/activetasks/components/polling.js
deleted file mode 100644
index 6e3d52e..0000000
--- a/app/addons/activetasks/components/polling.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import Helpers from '../../../helpers';
-import Components from "../../components/react-components";
-const { Polling } = Components;
-
-export default class ActiveTasksPollingWidgetController extends React.Component {
-
-  runPollingUpdate = () => {
-    this.props.runPollingUpdate();
-  };
-
-  getPluralForLabel = () => {
-    return this.state.pollingInterval === "1" ? '' : 's';
-  };
-
-
-  render() {
-    let activePollingClass = "active-tasks__polling-wrapper";
-    if (Helpers.isIE1X()) {
-      activePollingClass += " " + activePollingClass + "--ie1X";
-    }
-    return (
-      <div className={activePollingClass}>
-        <Polling
-          min={1}
-          max={30}
-          stepSize={1}
-          startValue={15}
-          valueUnits={"second"}
-          onPoll={this.runPollingUpdate}
-        />
-      </div>
-    );
-  }
-}
-
diff --git a/app/addons/activetasks/components/table.js b/app/addons/activetasks/components/table.js
deleted file mode 100644
index b006090..0000000
--- a/app/addons/activetasks/components/table.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import ActiveTasksTableBody from './tablebody';
-import ActiveTasksTableHeader from './tableheader';
-
-export default class ActiveTaskTable extends React.Component {
-  render() {
-    const {
-      tasks,
-      selectedRadio,
-      searchTerm,
-      sortByHeader,
-      onTableHeaderClick,
-      headerIsAscending,
-      isLoading
-    } = this.props;
-
-    return (
-      <div id="dashboard-lower-content">
-        <table id="active-tasks-table" className="table table-bordered table-striped active-tasks">
-          <ActiveTasksTableHeader
-            onTableHeaderClick={onTableHeaderClick}
-            sortByHeader={sortByHeader}
-            headerIsAscending={headerIsAscending}/>
-          <ActiveTasksTableBody
-            tasks={tasks}
-            selectedRadio={selectedRadio}
-            isLoading={isLoading}
-            searchTerm={searchTerm}/>
-        </table>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tablebody.js b/app/addons/activetasks/components/tablebody.js
deleted file mode 100644
index bb73880..0000000
--- a/app/addons/activetasks/components/tablebody.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ActiveTaskTableBodyContents from './tablebodycontents';
-
-export default class ActiveTasksTableBody extends React.Component {
-  createRows = () => {
-    var isThereASearchTerm = this.props.searchTerm.trim() === "";
-
-    if (this.props.tasks.length === 0 || this.props.isLoading) {
-      return isThereASearchTerm ? this.noActiveTasks() : this.noActiveTasksMatchFilter();
-    }
-
-    return this.props.tasks.map((item, key) => {
-      return <ActiveTaskTableBodyContents key={key} item={item} />;
-    });
-  };
-
-  getType = () => {
-    const type = this.props.selectedRadio;
-    if (type === "All Tasks") {
-      return "";
-    }
-
-    return type;
-  }
-
-  noActiveTasks = () => {
-    const type = this.getType();
-    let msg = <td  colSpan="6">No active {type} tasks.</td>;
-
-    if (this.props.isLoading) {
-      msg = <td  colSpan="6">Loading tasks.</td>;
-    }
-
-    return (
-      <tr className="no-matching-database-on-search">
-        {msg}
-      </tr>
-    );
-  };
-
-  noActiveTasksMatchFilter = () => {
-    const type = this.getType();
-
-    return (
-      <tr className="no-matching-database-on-search">
-        <td colSpan="6">No active {type} tasks match with filter: &quot;{this.props.searchTerm}&quot;</td>
-      </tr>
-    );
-  };
-
-  render() {
-    return (
-      <tbody className="js-tasks-go-here">
-        {this.createRows()}
-      </tbody>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tablebodycontents.js b/app/addons/activetasks/components/tablebodycontents.js
deleted file mode 100644
index e8c6e2b..0000000
--- a/app/addons/activetasks/components/tablebodycontents.js
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from '../../../app';
-
-const activeTasksHelpers = {
-  getTimeInfo (timeStamp) {
-    var timeMessage = [
-      app.helpers.formatDate(timeStamp),
-      app.helpers.getDateFromNow(timeStamp)
-    ];
-    return timeMessage;
-  },
-
-  getDatabaseFieldMessage (item) {
-    var type = item.type;
-    var databaseFieldMessage = [];
-
-    if (type === 'replication') {
-      databaseFieldMessage.push('From: ' + item.source);
-      databaseFieldMessage.push('To: ' + item.target);
-    } else if (type === 'indexer') {
-      databaseFieldMessage.push(item.database);
-      databaseFieldMessage.push('(View: ' + item.design_document + ')');
-    } else {
-      databaseFieldMessage.push(item.database);
-    }
-
-    return databaseFieldMessage;
-  },
-
-  getProgressMessage (item) {
-    var progressMessage = [];
-    var type = item.type;
-
-    if (_.has(item, 'progress')) {
-      progressMessage.push('Progress: ' + item.progress + '%');
-    }
-
-    if (type === 'indexer') {
-      progressMessage.push(
-        'Processed ' + item.changes_done + ' of ' + item.total_changes + ' changes.'
-      );
-    } else if (type === 'replication') {
-      progressMessage.push(item.docs_written + ' docs written.');
-
-      if (_.has(item, 'changes_pending')) {
-        progressMessage.push(item.changes_pending + ' pending changes.');
-      }
-    }
-
-    if (_.has(item, 'changes_done')) {
-      progressMessage.push(item.changes_done + ' Changes done.');
-    }
-
-    return progressMessage;
-  },
-
-  getSourceSequence (item) {
-    return item.source_seq;
-  }
-
-};
-
-export default class ActiveTaskTableBodyContents extends React.Component {
-  getInfo = (item) => {
-    return {
-      type : item.type,
-      objectField: activeTasksHelpers.getDatabaseFieldMessage(item),
-      started_on: activeTasksHelpers.getTimeInfo(item.started_on),
-      updated_on: activeTasksHelpers.getTimeInfo(item.updated_on),
-      pid: item.pid.replace(/[<>]/g, ''),
-      progress: activeTasksHelpers.getProgressMessage(item),
-    };
-  };
-
-  multilineMessage = (messageArray, optionalClassName) => {
-
-    if (!optionalClassName) {
-      optionalClassName = '';
-    }
-    var cssClasses = 'multiline-active-tasks-message ' + optionalClassName;
-
-    return messageArray.map(function (msgLine, iterator) {
-      return <p key={iterator} className={cssClasses}>{msgLine}</p>;
-    });
-  };
-
-  render() {
-    var rowData =  this.getInfo(this.props.item);
-    var objectFieldMsg = this.multilineMessage(rowData.objectField, 'to-from-database');
-    var startedOnMsg = this.multilineMessage(rowData.started_on, 'time');
-    var updatedOnMsg = this.multilineMessage(rowData.updated_on, 'time');
-    var progressMsg = this.multilineMessage(rowData.progress);
-
-    return (
-      <tr>
-        <td>{rowData.type}</td>
-        <td>{objectFieldMsg}</td>
-        <td>{startedOnMsg}</td>
-        <td>{updatedOnMsg}</td>
-        <td>{rowData.pid}</td>
-        <td>{progressMsg}</td>
-      </tr>
-    );
-  }
-}
diff --git a/app/addons/activetasks/components/tableheader.js b/app/addons/activetasks/components/tableheader.js
deleted file mode 100644
index 2b85cc5..0000000
--- a/app/addons/activetasks/components/tableheader.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-
-export class TableHeader extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.onTableHeaderClick = this.onTableHeaderClick.bind(this);
-  }
-
-
-  arrow = () => {
-    const sortBy = this.props.sortByHeader;
-    const currentName = this.props.headerName;
-    const headerIsAscending = this.props.headerIsAscending;
-    const arrow = headerIsAscending ? 'icon icon-caret-up' : 'icon icon-caret-down';
-
-    if (sortBy === currentName) {
-      return <i className={arrow}></i>;
-    }
-  };
-
-  onTableHeaderClick = () => {
-    this.props.onTableHeaderClick(this.props.headerName);
-  };
-
-  render() {
-    return (
-      <td className={`header-field ${this.props.headerName} tableheader`} onClick={this.onTableHeaderClick}>
-        <label className="header-field label-text active-tasks-header noselect">
-          {this.props.displayName} {this.arrow()}
-        </label>
-      </td>
-    );
-  }
-}
-
-export default class ActiveTasksTableHeader extends React.Component {
-  static defaultProps = {
-    headerNames : [
-      ['type', 'Type'],
-      ['database', 'Database'],
-      ['started-on', 'Started on'],
-      ['updated-on', 'Updated on'],
-      ['pid', 'PID'],
-      ['progress', 'Status']
-    ]
-  };
-
-  createTableHeadingFields = () => {
-    const {
-      onTableHeaderClick,
-      sortByHeader,
-      headerIsAscending
-    } = this.props;
-
-    return this.props.headerNames.map(function (header) {
-      return <TableHeader
-        headerName={header[0]}
-        displayName={header[1]}
-        key={header[0]}
-        onTableHeaderClick={onTableHeaderClick}
-        sortByHeader={sortByHeader}
-        headerIsAscending={headerIsAscending} />;
-    });
-  };
-
-  render() {
-    return (
-      <thead>
-        <tr>{this.createTableHeadingFields()}</tr>
-      </thead>
-    );
-  }
-}
diff --git a/app/addons/activetasks/container.js b/app/addons/activetasks/container.js
deleted file mode 100644
index 38f8fad..0000000
--- a/app/addons/activetasks/container.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import Controller from './layout';
-import {
-  init,
-  setSearchTerm,
-  sortByColumnHeader,
-  switchTab,
-  runPollingUpdate
-} from './actions';
-import {
-  getTasks,
-  getHeaderIsAscending,
-  getSelectedRadio,
-  getSortByHeader,
-  getSearchTerm,
-  getIsLoading
-} from './reducers';
-
-const mapStateToProps = ({activetasks}) => {
-  return {
-    tasks: getTasks(activetasks),
-    headerIsAscending: getHeaderIsAscending(activetasks),
-    selectedRadio: getSelectedRadio(activetasks),
-    sortByHeader: getSortByHeader(activetasks),
-    searchTerm: getSearchTerm(activetasks),
-    isLoading: getIsLoading(activetasks)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    init: () => dispatch(init()),
-    setSearchTerm: (term) => dispatch(setSearchTerm(term)),
-    sortByColumnHeader: (column) => dispatch(sortByColumnHeader(column)),
-    switchTab: (tab) => dispatch(switchTab(tab)),
-    runPollingUpdate: () => dispatch(runPollingUpdate())
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(Controller);
diff --git a/app/addons/activetasks/layout.js b/app/addons/activetasks/layout.js
deleted file mode 100644
index e126237..0000000
--- a/app/addons/activetasks/layout.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import {OnePane, OnePaneHeader, OnePaneContent} from '../components/layouts';
-import ActiveTasksController from "./components/controller";
-import ActiveTasksPollingWidgetController from './components/polling';
-
-const crumbs = [
-  {'name': 'Active Tasks'}
-];
-
-export const ActiveTasksLayout = (props) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-        docURL={FauxtonAPI.constants.DOC_URLS.ACTIVE_TASKS}
-        endpoint={Helpers.getApiUrl('/_active_tasks')}
-      >
-        <ActiveTasksPollingWidgetController {...props} />
-      </OnePaneHeader>
-      <OnePaneContent>
-        <ActiveTasksController {...props} />
-      </OnePaneContent>
-    </OnePane>
-  );
-};
-
-export default ActiveTasksLayout;
diff --git a/app/addons/activetasks/reducers.js b/app/addons/activetasks/reducers.js
deleted file mode 100644
index bba4bf4..0000000
--- a/app/addons/activetasks/reducers.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed 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.
-import ActionTypes from "./actiontypes";
-import { has, sortBy, isUndefined } from 'lodash';
-
-const initialState = {
-  isLoading: false,
-  sortByHeader: 'started-on',
-  headerIsAscending: true,
-  selectedRadio: 'All Tasks',
-  searchTerm: '',
-  tasks: [],
-  filteredTasks: []
-};
-
-const sortTasksByColumnHeader = (colName, tasks, headerIsAscending) => {
-  var sorted = sortBy(tasks, (item) => {
-    var variable = colName;
-
-    if (isUndefined(item[variable])) {
-      variable = 'source';
-    }
-    return item[variable];
-  });
-
-  if (!headerIsAscending) {
-    return sorted.reverse();
-  }
-
-  return sorted;
-};
-
-
-const setSearchTerm = (state, searchTerm) => {
-  const filteredTasks = filterTasks(searchTerm, state.selectedRadio, state.sortbyHeader, state.tasks, state.headerIsAscending);
-  return {
-    ...state,
-    filteredTasks,
-    searchTerm
-  };
-};
-
-const passesSearchFilter = (item, searchTerm) => {
-  const regex = new RegExp(searchTerm, 'g');
-  let itemDatabasesTerm = '';
-  if (has(item, 'database')) {
-    itemDatabasesTerm += item.database;
-  }
-  if (has(item, 'source')) {
-    itemDatabasesTerm += item.source;
-  }
-  if (has(item, 'target')) {
-    itemDatabasesTerm += item.target;
-  }
-
-  return regex.test(itemDatabasesTerm);
-};
-
-const passesRadioFilter = (item, selectedRadio) => {
-  const fixedSelectedRadio = selectedRadio.toLowerCase().replace(' ', '_');
-  return item.type ===  fixedSelectedRadio ||  fixedSelectedRadio === 'all_tasks';
-};
-
-const filterTasks = (searchTerm, selectedRadio, sortByHeader, tasks, headerIsAscending) => {
-  const filtered = tasks.filter(task => {
-    return passesRadioFilter(task, selectedRadio) && passesSearchFilter(task, searchTerm);
-  });
-
-  return sortTasksByColumnHeader(sortByHeader, filtered, headerIsAscending);
-};
-
-const setHeaderIsAscending = (prevSortbyHeader, sortByHeader, headerIsAscending) => {
-  if (prevSortbyHeader === sortByHeader) {
-    return !headerIsAscending;
-  }
-
-  return true;
-};
-
-export default (state = initialState, {type, options}) => {
-  switch (type) {
-    case ActionTypes.ACTIVE_TASKS_FETCH_AND_SET:
-      return {
-        ...state,
-        tasks: options,
-        filteredTasks: filterTasks(state.searchTerm, state.selectedRadio, state.sortByHeader, options, state.headerIsAscending)
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SWITCH_TAB:
-      const filteredTasks = filterTasks(state.searchTerm, options, state.sortByHeader, state.tasks, headerIsAscending);
-      return {
-        ...state,
-        selectedRadio: options,
-        filteredTasks
-      };
-
-    case ActionTypes.ACTIVE_TASKS_CHANGE_POLLING_INTERVAL:
-      return {
-        ...state,
-        pollingIntervalSeconds: options
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SET_SEARCH_TERM:
-      return setSearchTerm(state, options);
-
-    case ActionTypes.ACTIVE_TASKS_SORT_BY_COLUMN_HEADER:
-      const prevSortbyHeader = state.sortByHeader;
-      const sortByHeader = options;
-      const headerIsAscending = setHeaderIsAscending(prevSortbyHeader, sortByHeader, state.headerIsAscending);
-      const headerFilteredTasks = filterTasks(state.searchTerm, state.selectedRadio, sortByHeader, state.tasks, headerIsAscending);
-      return {
-        ...state,
-        sortByHeader,
-        headerIsAscending,
-        filteredTasks: headerFilteredTasks
-      };
-
-    case ActionTypes.ACTIVE_TASKS_SET_IS_LOADING:
-      return {
-        ...state,
-        isLoading: options
-      };
-  }
-  return state;
-};
-
-export const getTasks = (state) => state.filteredTasks;
-export const getHeaderIsAscending = (state) => state.headerIsAscending;
-export const getIsLoading = (state) => state.isLoading;
-export const getSelectedRadio = (state) => state.selectedRadio;
-export const getSortByHeader = (state) => state.sortByHeader;
-export const getSearchTerm = (state) => state.searchTerm;
diff --git a/app/addons/activetasks/routes.js b/app/addons/activetasks/routes.js
deleted file mode 100644
index 2d51fc4..0000000
--- a/app/addons/activetasks/routes.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Layout from './container';
-
-var ActiveTasksRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Active Tasks',
-
-  routes: {
-    'activetasks/:id': 'showActiveTasks',
-    'activetasks': 'showActiveTasks'
-  },
-
-  roles: ['_admin'],
-
-  showActiveTasks: function () {
-    return <Layout />;
-  }
-});
-
-export default {
-  RouteObjects: [ActiveTasksRouteObject]
-};
diff --git a/app/addons/auth/__tests__/components.test.js b/app/addons/auth/__tests__/components.test.js
deleted file mode 100644
index 8a1066e..0000000
--- a/app/addons/auth/__tests__/components.test.js
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import LoginForm from "../components/loginform";
-import {CreateAdminForm} from "../components/createadminform";
-import {ChangePasswordForm} from '../components/changepasswordform';
-import * as Actions from "../actions";
-import { mount } from 'enzyme';
-import sinon from "sinon";
-
-describe('Auth -- Components', () => {
-
-  describe('LoginForm', () => {
-    let stub;
-
-    beforeEach(() => {
-      stub = sinon.stub(Actions, 'login');
-    });
-
-    afterEach(() => {
-      Actions.login.restore();
-    });
-
-    it('should trigger login event when form submitted', () => {
-      const loginForm = mount(<LoginForm/>);
-      loginForm.find('#login').simulate('submit');
-      expect(stub.calledOnce).toBeTruthy();
-    });
-
-    it('in case of nothing in state, should pass actual values to Actions.login()', () => {
-      const username = 'bob';
-      const password = 'smith';
-
-      const loginForm = mount(
-        <LoginForm
-          testBlankUsername={username}
-          testBlankPassword={password}
-        />);
-
-      loginForm.find('#login').simulate('submit');
-      expect(stub.calledOnce).toBeTruthy();
-
-      // confirm Actions.login() received the values that weren't in the DOM
-      expect(stub.args[0][0]).toBe(username);
-      expect(stub.args[0][1]).toBe(password);
-    });
-
-  });
-
-  describe('ChangePasswordForm', () => {
-
-    it('should update state on password change', () => {
-      const changePasswordForm = mount(<ChangePasswordForm />);
-      changePasswordForm.find('#password').simulate('change', { target: { value: 'bobsyouruncle' }});
-      expect(changePasswordForm.state('password')).toEqual('bobsyouruncle');
-    });
-
-    it('should update state on password confirm change', () => {
-      const changePasswordForm = mount(<ChangePasswordForm />);
-      changePasswordForm.find('#password-confirm').simulate('change', { target: { value: 'hotdiggity' }});
-      expect(changePasswordForm.state('passwordConfirm')).toEqual('hotdiggity');
-    });
-
-    it('should call action to submit form', () => {
-      const spy = sinon.spy();
-      const changePasswordForm = mount(<ChangePasswordForm username={"bobsyouruncle"} changePassword={spy} />);
-      changePasswordForm.find('#change-password').simulate('submit');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('CreateAdminForm', () => {
-    it('should update username state', () => {
-      const createAdminForm = mount(<CreateAdminForm loginAfter={false} />);
-      createAdminForm.find('#username').simulate('change',  { target: { value: 'catsmeow' }});
-      expect(createAdminForm.state('username')).toEqual('catsmeow');
-    });
-
-    it('should call action to update password confirm on field change', () => {
-      const createAdminForm = mount(<CreateAdminForm loginAfter={false} />);
-      createAdminForm.find('#password').simulate('change',  { target: { value: 'topnotch' }});
-      expect(createAdminForm.state('password')).toEqual('topnotch');
-    });
-  });
-});
diff --git a/app/addons/auth/actions.js b/app/addons/auth/actions.js
deleted file mode 100644
index 1e094c9..0000000
--- a/app/addons/auth/actions.js
+++ /dev/null
@@ -1,143 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from "../../core/api";
-import app from "../../app";
-import ActionTypes from './actiontypes';
-import Api from './api';
-
-const {
-  AUTH_HIDE_PASSWORD_MODAL,
-} = ActionTypes;
-
-const errorHandler = ({ message }) => {
-  FauxtonAPI.addNotification({
-    msg: message,
-    type: "error"
-  });
-};
-
-const validate = (...predicates) => {
-  return predicates.every(isTrue => isTrue);
-};
-
-export const validateUser = (username, password) => {
-  return validate(!_.isEmpty(username), !_.isEmpty(password));
-};
-
-export const validatePasswords = (password, passwordConfirm) => {
-  return validate(
-    !_.isEmpty(password),
-    !_.isEmpty(passwordConfirm),
-    password === passwordConfirm
-  );
-};
-
-export const login = (username, password, urlBack) => {
-  if (!validateUser(username, password)) {
-    return errorHandler({message: app.i18n.en_US['auth-missing-credentials']});
-  }
-
-  return Api.login({name: username, password})
-    .then(resp => {
-      if (resp.error) {
-        errorHandler({message: resp.reason});
-        return resp;
-      }
-
-      let msg = app.i18n.en_US['auth-logged-in'];
-      if (msg) {
-        FauxtonAPI.addNotification({msg});
-      }
-
-      if (urlBack && !urlBack.includes("login")) {
-        return FauxtonAPI.navigate(urlBack);
-      }
-      FauxtonAPI.navigate("/");
-    })
-    .catch(errorHandler);
-};
-
-export const changePassword = (username, password, passwordConfirm, nodes) => () => {
-  if (!validatePasswords(password, passwordConfirm)) {
-    return errorHandler({message: app.i18n.en_US['auth-passwords-not-matching']});
-  }
-  //To change an admin's password is the same as creating an admin. So we just use the
-  //same api function call here.
-  Api.createAdmin({
-    name: username,
-    password,
-    node: nodes[0].node
-  }).then(
-    () => {
-      FauxtonAPI.addNotification({
-        msg: app.i18n.en_US["auth-change-password"]
-      });
-    },
-    errorHandler
-  );
-};
-
-export const createAdmin = (username, password, loginAfter, nodes) => () => {
-  const node = nodes[0].node;
-  if (!validateUser(username, password)) {
-    return errorHandler({message: app.i18n.en_US['auth-missing-credentials']});
-  }
-
-  Api.createAdmin({name: username, password, node})
-    .then(resp => {
-      if (resp.error) {
-        return errorHandler({message: `${app.i18n.en_US['auth-admin-creation-failed-prefix']} ${resp.reason}`});
-      }
-
-      FauxtonAPI.addNotification({
-        msg: app.i18n.en_US['auth-admin-created']
-      });
-
-      if (loginAfter) {
-        return FauxtonAPI.navigate("/login");
-      }
-    });
-};
-
-// simple authentication method - does nothing other than check creds
-export const authenticate = (username, password, onSuccess) => {
-  Api.login({
-    name: username,
-    password: password
-  })
-    .then((resp) => {
-      if (resp.error) {
-        throw (resp);
-      }
-      hidePasswordModal();
-      onSuccess(username, password);
-    })
-    .catch(() => {
-      FauxtonAPI.addNotification({
-        msg: "Your username or password is incorrect.",
-        type: "error",
-        clear: true
-      });
-    });
-};
-
-export const hidePasswordModal = () => {
-  FauxtonAPI.dispatch({ type: AUTH_HIDE_PASSWORD_MODAL });
-};
-
-export const logout = () => {
-  FauxtonAPI.addNotification({ msg: "You have been logged out." });
-  Api.logout()
-    .then(Api.getSession)
-    .then(() => FauxtonAPI.navigate('/'))
-    .catch(errorHandler);
-};
diff --git a/app/addons/auth/actiontypes.js b/app/addons/auth/actiontypes.js
deleted file mode 100644
index 4ab3e5b..0000000
--- a/app/addons/auth/actiontypes.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed 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.
-
-export default {
-  AUTH_CREDS_VALID: 'AUTH_CREDS_VALID',
-  AUTH_CREDS_INVALID: 'AUTH_CREDS_INVALID',
-  AUTH_SHOW_PASSWORD_MODAL: 'AUTH_SHOW_PASSWORD_MODAL',
-  AUTH_HIDE_PASSWORD_MODAL: 'AUTH_HIDE_PASSWORD_MODAL'
-};
diff --git a/app/addons/auth/api.js b/app/addons/auth/api.js
deleted file mode 100644
index a281675..0000000
--- a/app/addons/auth/api.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-import app from './../../app';
-import Helpers from "../../helpers";
-import {deleteFormEncoded, get, postFormEncoded, put} from '../../core/ajax';
-
-
-export function createAdmin({name, password, node}) {
-  const url = Helpers.getServerUrl(`/_node/${node}/_config/admins/${name}`);
-  return put(url, password);
-}
-
-let loggedInSessionPromise;
-
-export function getSession() {
-  if (loggedInSessionPromise) {
-    return loggedInSessionPromise;
-  }
-
-  const url = Helpers.getServerUrl('/_session');
-  const promise = get(url).then(resp => {
-    if (resp.userCtx.name) {
-      loggedInSessionPromise = promise;
-    }
-    return resp.userCtx;
-  });
-
-  return promise;
-}
-
-export function login(body) {
-  const url = Helpers.getServerUrl('/_session');
-  return postFormEncoded(url, app.utils.queryParams(body));
-}
-
-export function logout() {
-  loggedInSessionPromise = null;
-  const url = Helpers.getServerUrl('/_session');
-  return deleteFormEncoded(url, app.utils.queryParams({ username: "_", password: "_" }));
-}
-
-export default {
-  createAdmin,
-  login,
-  logout,
-  getSession
-};
diff --git a/app/addons/auth/assets/less/auth.less b/app/addons/auth/assets/less/auth.less
deleted file mode 100644
index bf6ddcc..0000000
--- a/app/addons/auth/assets/less/auth.less
+++ /dev/null
@@ -1,27 +0,0 @@
-//  Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-.sidenav header {
-  padding-left: 24px !important;
-  h3 {
-    margin: 8px 0 4px;
-  }
-}
-
-.faux__auth-page {
-  padding: 20px !important;
-  h3 {
-    margin-top: 0;
-  }
-}
diff --git a/app/addons/auth/base.js b/app/addons/auth/base.js
deleted file mode 100644
index 0fce5f8..0000000
--- a/app/addons/auth/base.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import RouteObjects from './routes';
-import "./assets/less/auth.less";
-import Session from './session';
-
-const cleanupAuthSection = () => {
-  FauxtonAPI.removeHeaderLink({ id: 'auth', bottomNav: true });
-};
-
-FauxtonAPI.setSession(new Session({allowAdminParty: true}));
-
-export default ({
-  initialize: () => {
-    FauxtonAPI.addHeaderLink({
-      id: 'auth',
-      title: 'Login',
-      href: '#/login',
-      icon: 'fonticon-user',
-      bottomNav: true
-    });
-
-    FauxtonAPI.session.onChange(() => {
-      const session = FauxtonAPI.session;
-      let link;
-
-      if (session.isAdminParty()) {
-        link = {
-          id: 'auth',
-          title: 'Admin Party!',
-          href: '#/createAdmin',
-          icon: 'fonticon-user',
-          bottomNav: true
-        };
-
-        cleanupAuthSection();
-        FauxtonAPI.addHeaderLink(link);
-        FauxtonAPI.hideLogin();
-
-      } else if (session.isLoggedIn()) {
-        link = {
-          id: 'auth',
-          title: 'Your Account',
-          href: '#/changePassword',
-          icon: 'fonticon-user',
-          bottomNav: true
-        };
-
-        cleanupAuthSection();
-        FauxtonAPI.addHeaderLink(link);
-        FauxtonAPI.showLogout();
-      } else {
-        cleanupAuthSection();
-        FauxtonAPI.showLogin();
-      }
-    });
-  },
-  RouteObjects
-});
diff --git a/app/addons/auth/components/changepasswordform.js b/app/addons/auth/components/changepasswordform.js
deleted file mode 100644
index 14943d7..0000000
--- a/app/addons/auth/components/changepasswordform.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import FauxtonAPI from '../../../core/api';
-import {
-  changePassword
-} from "./../actions";
-
-import {connect} from 'react-redux';
-
-export class ChangePasswordForm extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      password: '',
-      passwordConfirm: ''
-    };
-  }
-
-  onChangePassword(e) {
-    this.setState({password: e.target.value});
-  }
-
-  onChangePasswordConfirm(e) {
-    this.setState({passwordConfirm: e.target.value});
-  }
-
-  componentDidMount() {
-    this.passwordField.focus();
-  }
-
-  changePassword(e) {
-    e.preventDefault();
-    this.props.changePassword(this.props.username, this.state.password, this.state.passwordConfirm, this.props.nodes);
-  }
-
-  render() {
-    return (
-      <div className="faux__auth-page">
-        <h3>Change Password</h3>
-
-        <form id="change-password" onSubmit={this.changePassword.bind(this)}>
-          <p>
-            Enter your new password.
-          </p>
-
-          <input
-            id="password"
-            type="password"
-            ref={node => this.passwordField = node}
-            name="password"
-            placeholder="Password"
-            size="24"
-            onChange={this.onChangePassword.bind(this)}
-            value={this.state.password}
-          />
-          <br />
-          <input
-            id="password-confirm"
-            type="password"
-            name="password_confirm"
-            placeholder="Verify Password"
-            size="24"
-            onChange={this.onChangePasswordConfirm.bind(this)}
-            value={this.state.passwordConfirm}
-          />
-
-          <br />
-          <p>
-            <button type="submit" className="btn btn-primary">Change</button>
-          </p>
-        </form>
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes,
-    username: FauxtonAPI.session.user().name
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  {changePassword}
-)(ChangePasswordForm);
diff --git a/app/addons/auth/components/createadminform.js b/app/addons/auth/components/createadminform.js
deleted file mode 100644
index 333b419..0000000
--- a/app/addons/auth/components/createadminform.js
+++ /dev/null
@@ -1,124 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import {
-  createAdmin
-} from "./../actions";
-import {connect} from 'react-redux';
-
-export class CreateAdminForm extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      username: '',
-      password: ''
-    };
-  }
-
-  onChangeUsername(e) {
-    this.setState({username: e.target.value});
-  }
-
-  onChangePassword(e) {
-    this.setState({password: e.target.value});
-  }
-
-  componentDidMount() {
-    this.usernameField.focus();
-  }
-
-  createAdmin(e) {
-    e.preventDefault();
-    this.props.createAdmin(
-      this.state.username,
-      this.state.password,
-      this.props.loginAfter,
-      this.props.nodes
-    );
-  }
-
-  render() {
-    return (
-      <div className="faux__auth-page">
-        <h3>Create Admins</h3>
-
-        <p>
-          Before a server admin is configured, all clients have admin privileges. This is fine when
-
-          HTTP access is restricted to trusted users. <strong>
-            If end-users will be accessing this
-            CouchDB, you must create an admin account to prevent accidental (or malicious) data
-
-            loss.
-          </strong>
-        </p>
-        <p>
-          Server admins can create and destroy databases, install and update _design documents, run
-
-          the test suite, and edit all aspects of CouchDB configuration.
-        </p>
-
-        <form id="create-admin-form" onSubmit={this.createAdmin.bind(this)}>
-          <input
-            id="username"
-            type="text"
-            ref={node => this.usernameField = node}
-            name="name"
-            placeholder="Username"
-            size="24"
-            onChange={this.onChangeUsername.bind(this)}
-          />
-          <br />
-          <input
-            id="password"
-            type="password"
-            name="password"
-            placeholder="Password"
-            size="24"
-            onChange={this.onChangePassword.bind(this)}
-          />
-          <p>
-            Non-admin users have read and write access to all databases, which
-            are controlled by validation. CouchDB can be configured to block all
-            access to anonymous users.
-          </p>
-          <button type="submit" id="create-admin" className="btn btn-primary">
-            Create Admin
-          </button>
-        </form>
-      </div>
-    );
-  }
-}
-
-CreateAdminForm.propTypes = {
-  loginAfter: PropTypes.bool.isRequired
-};
-
-CreateAdminForm.defaultProps = {
-  loginAfter: false
-};
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes
-  };
-};
-
-
-export default connect(
-  mapStateToProps,
-  {createAdmin}
-)(CreateAdminForm);
diff --git a/app/addons/auth/components/index.js b/app/addons/auth/components/index.js
deleted file mode 100644
index 2c38e5a..0000000
--- a/app/addons/auth/components/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-import LoginForm from './loginform.js';
-import PasswordModal from './passwordmodal.js';
-import CreateAdminForm from './createadminform.js';
-import ChangePasswordForm from './changepasswordform.js';
-
-export default {
-  LoginForm,
-  PasswordModal,
-  CreateAdminForm,
-  ChangePasswordForm
-};
diff --git a/app/addons/auth/components/loginform.js b/app/addons/auth/components/loginform.js
deleted file mode 100644
index b961c93..0000000
--- a/app/addons/auth/components/loginform.js
+++ /dev/null
@@ -1,113 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import { login } from "./../actions";
-
-class LoginForm extends React.Component {
-  constructor() {
-    super();
-    this.state = {
-      username: "",
-      password: ""
-    };
-  }
-  onUsernameChange(e) {
-    this.setState({username: e.target.value});
-  }
-  onPasswordChange(e) {
-    this.setState({password: e.target.value});
-  }
-
-  submit(e) {
-    e.preventDefault();
-    if (!this.checkUnrecognizedAutoFill()) {
-      this.login(this.state.username, this.state.password);
-    }
-  }
-  // Safari has a bug where autofill doesn't trigger a change event. This checks for the condition where the state
-  // and form fields have a mismatch. See: https://issues.apache.org/jira/browse/COUCHDB-2829
-  checkUnrecognizedAutoFill() {
-    if (this.state.username !== "" || this.state.password !== "") {
-      return false;
-    }
-    let username = this.props.testBlankUsername
-      ? this.props.testBlankUsername
-      : this.usernameField.value;
-    let password = this.props.testBlankPassword
-      ? this.props.testBlankPassword
-      : this.passwordField.value;
-    this.setState({ username: username, password: password }); // doesn't set immediately, hence separate login() call
-    this.login(username, password);
-
-    return true;
-  }
-  login(username, password) {
-    login(username, password, this.props.urlBack);
-  }
-  componentDidMount() {
-    this.usernameField.focus();
-  }
-  render() {
-    return (
-      <div className="couch-login-wrapper">
-        <div className="row-fluid">
-          <div className="span12">
-            <form id="login" onSubmit={this.submit.bind(this)}>
-              <p className="help-block">
-                Enter your username and password.
-              </p>
-              <input
-                id="username"
-                type="text"
-                name="username"
-                ref={node => this.usernameField = node}
-                placeholder="Username"
-                size="24"
-                onChange={this.onUsernameChange.bind(this)}
-                value={this.state.username}
-              />
-              <br />
-              <input
-                id="password"
-                type="password"
-                name="password"
-                ref={node => this.passwordField = node}
-                placeholder="Password"
-                size="24"
-                onChange={this.onPasswordChange.bind(this)}
-                value={this.state.password}
-              />
-              <br />
-              <button id="submit" className="btn btn-success" type="submit">
-                Log In
-              </button>
-            </form>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-LoginForm.defaultProps = {
-  urlBack: ""
-};
-
-LoginForm.propTypes = {
-  urlBack: PropTypes.string.isRequired
-};
-
-export default LoginForm;
diff --git a/app/addons/auth/components/passwordmodal.js b/app/addons/auth/components/passwordmodal.js
deleted file mode 100644
index b652c66..0000000
--- a/app/addons/auth/components/passwordmodal.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import { Modal } from "react-bootstrap";
-import { hidePasswordModal, authenticate } from "./../actions";
-import Components from "../../components/react-components";
-import FauxtonAPI from "../../../core/api";
-
-class PasswordModal extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      password: ""
-    };
-    this.authenticate = this.authenticate.bind(this);
-    this.onKeyPress = this.onKeyPress.bind(this);
-  }
-
-  // clicking <Enter> should submit the form
-  onKeyPress(e) {
-    if (e.key === "Enter") {
-      this.authenticate();
-    }
-  }
-  // default authentication function. This can be overridden via props if you want to do something different
-  authenticate() {
-    const username = FauxtonAPI.session.user().name;
-    this.props.onSubmit(username, this.state.password, this.props.onSuccess);
-  }
-  render() {
-    const {
-      visible,
-      onClose,
-      submitBtnLabel,
-      headerTitle,
-      modalMessage
-    } = this.props;
-    if (!this.props.visible) {
-      return null;
-    }
-
-    return (
-      <Modal
-        dialogClassName="enter-password-modal"
-        show={visible}
-        onHide={() => onClose()}
-      >
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{headerTitle}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {modalMessage}
-          <input
-            style={{ width: "385px" }}
-            type="password"
-            className="password-modal-input"
-            placeholder="Enter your password"
-            autoFocus={true}
-            value={this.state.password}
-            onChange={e => this.setState({ password: e.target.value })}
-            onKeyPress={this.onKeyPress}
-          />
-        </Modal.Body>
-        <Modal.Footer>
-          <a className="cancel-link" onClick={() => onClose()}>Cancel</a>
-          <Components.ConfirmButton
-            text={submitBtnLabel}
-            onClick={this.authenticate}
-          />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-
-PasswordModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  modalMessage: PropTypes.oneOfType([
-    PropTypes.string,
-    PropTypes.element
-  ]),
-  onSubmit: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  submitBtnLabel: PropTypes.string
-};
-
-PasswordModal.defaultProps = {
-  headerTitle: "Enter Password",
-  visible: false,
-  modalMessage: "",
-  onClose: hidePasswordModal,
-  onSubmit: authenticate,
-  onSuccess: () => {},
-  submitBtnLabel: "Continue"
-};
-
-export default PasswordModal;
diff --git a/app/addons/auth/layout.js b/app/addons/auth/layout.js
deleted file mode 100644
index 54b59ef..0000000
--- a/app/addons/auth/layout.js
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {OnePane, OnePaneContent} from '../components/layouts';
-import {Breadcrumbs} from '../components/header-breadcrumbs';
-import Components from "./components";
-import {TabElementWrapper, TabElement} from '../components/components/tabelement';
-import FauxtonAPI from "../../core/api";
-
-const {
-  CreateAdminForm,
-  ChangePasswordForm
-} = Components;
-
-export const OnePaneHeader = ({crumbs}) => {
-  return (
-    <header>
-      <div className='flex-layout flex-row'>
-        <div id='breadcrumbs' className='flex-body'>
-          <Breadcrumbs crumbs={crumbs}/>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-export const AuthLayout = ({crumbs, component}) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-      >
-      </OnePaneHeader>
-      <OnePaneContent>
-        {component}
-      </OnePaneContent>
-    </OnePane>
-  );
-};
-
-const Tabs = ({changePassword}) => {
-  return (
-    <TabElementWrapper>
-      <TabElement
-        key={1}
-        selected={changePassword}
-        text={"Change Password"}
-        onChange={() => {
-          FauxtonAPI.navigate('#changePassword');
-        }}
-      />
-      <TabElement
-        key={2}
-        selected={!changePassword}
-        text={"Create Server Admin"}
-        onChange={() => {
-          FauxtonAPI.navigate('#addAdmin');
-        }}
-      />
-    </TabElementWrapper>
-  );
-};
-
-export const AdminLayout = ({crumbs, changePassword}) => {
-  let content = changePassword ? <ChangePasswordForm /> : <CreateAdminForm loginAfter={false} />;
-  return (
-    <OnePane>
-      <OnePaneHeader crumbs={crumbs}/>
-      <OnePaneContent>
-        <div className="template-content flex-body flex-layout flex-col">
-          <Tabs changePassword={changePassword} />
-          <div id="dashboard-conten1t" className="flex-layout flex-col">
-            {content}
-          </div>
-        </div>
-      </OnePaneContent>
-    </OnePane>
-
-  );
-
-};
-
-export default AuthLayout;
diff --git a/app/addons/auth/routes/auth.js b/app/addons/auth/routes/auth.js
deleted file mode 100644
index d274c08..0000000
--- a/app/addons/auth/routes/auth.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ClusterActions from "../../cluster/actions";
-import { AuthLayout } from "./../layout";
-import app from "../../../app";
-import Components from "./../components";
-import {logout} from '../actions';
-
-const {
-  LoginForm,
-  CreateAdminForm
-} = Components;
-
-const crumbs = [{ name: "Log In to CouchDB" }];
-
-export default FauxtonAPI.RouteObject.extend({
-  routes: {
-    "login?*extra": "login",
-    "login": "login",
-    "logout": "logout",
-    "createAdmin": "checkNodes",
-    "createAdmin/:node": "createAdminForNode"
-  },
-  checkNodes() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/createAdmin/");
-  },
-  login() {
-    return (
-      <AuthLayout
-        crumbs={crumbs}
-        component={<LoginForm urlBack={app.getParams().urlback} />}
-      />
-    );
-  },
-  logout() {
-    logout();
-  },
-  createAdminForNode() {
-    ClusterActions.fetchNodes();
-    const crumbs = [{ name: "Create Admin" }];
-    return (
-      <AuthLayout
-        crumbs={crumbs}
-        component={<CreateAdminForm loginAfter={true} />}
-      />
-    );
-  }
-});
diff --git a/app/addons/auth/routes/index.js b/app/addons/auth/routes/index.js
deleted file mode 100644
index da37e64..0000000
--- a/app/addons/auth/routes/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed 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.
-
-import Auth from './auth';
-import User from './user';
-
-export default [Auth, User];
diff --git a/app/addons/auth/routes/user.js b/app/addons/auth/routes/user.js
deleted file mode 100644
index 36a8f53..0000000
--- a/app/addons/auth/routes/user.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ClusterActions from "../../cluster/actions";
-import { AdminLayout } from "./../layout";
-
-export default FauxtonAPI.RouteObject.extend({
-  hideNotificationCenter: true,
-  hideApiBar: true,
-  selectedHeader: 'Your Account',
-
-  routes: {
-    changePassword: {
-      route: "checkNodesForPasswordChange",
-      roles: ["fx_loggedIn"]
-    },
-    "changePassword/:node": {
-      route: "changePassword",
-      roles: ["fx_loggedIn"]
-    },
-    addAdmin: {
-      route: "checkNodesForAddAdmin",
-      roles: ["_admin"]
-    },
-    "addAdmin/:node": {
-      route: "addAdmin",
-      roles: ["_admin"]
-    }
-  },
-
-  checkNodesForPasswordChange() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/changePassword/");
-  },
-
-  checkNodesForAddAdmin() {
-    ClusterActions.navigateToNodeBasedOnNodeCount("/addAdmin/");
-  },
-
-  changePassword() {
-    ClusterActions.fetchNodes();
-    return (
-      <AdminLayout
-        crumbs={[{ name: "User Management" }]}
-        changePassword={true}
-      />
-    );
-  },
-  addAdmin() {
-    ClusterActions.fetchNodes();
-    return (
-      <AdminLayout
-        crumbs={[{ name: "User Management" }]}
-        changePassword={false}
-      />
-    );
-  }
-});
diff --git a/app/addons/auth/session.js b/app/addons/auth/session.js
deleted file mode 100644
index 20e72fc..0000000
--- a/app/addons/auth/session.js
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed 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.
-
-import { uniqueId, each, includes } from "lodash";
-import Api from './api';
-import Promise from 'bluebird';
-
-function isAdmin(roles = []) {
-  return includes(roles, "_admin");
-}
-
-export default class {
-
-  constructor(opts) {
-    this._user = {
-      name: false,
-      roles: []
-    };
-    this._onChange = {};
-    this._authenticatedPromise = new Promise((resolve, reject) => {
-      this._authenticateResolve = resolve;
-      this._authenticateReject = reject;
-    });
-
-    this._allowAdminParty = opts.allowAdminParty;
-  }
-
-  isAuthenticated () {
-    return this._authenticatedPromise;
-  }
-
-  setUser(user) {
-    if (this._user.name !== user.name) {
-      this._user = {
-        name: user.name,
-        roles: user.roles,
-        isAdmin: isAdmin(user.roles)
-      };
-      each(this._onChange, fn => fn(this._user));
-    }
-    return this._user;
-  }
-
-  user() {
-    return this._user;
-  }
-
-  getSession() {
-    return Api.getSession()
-      .then(userCtx => {
-        this.setUser(userCtx);
-        if (this.isLoggedIn()) {
-          this._authenticateResolve(this.user());
-        }
-      })
-      .catch(err => {
-        this._authenticateReject(err);
-      });
-  }
-
-  isAdminParty() {
-    if (!this._allowAdminParty) {
-      return false;
-    }
-
-    return !this._user.name && this._user.isAdmin;
-  }
-
-  isLoggedIn() {
-    return !_.isNull(this._user.name);
-  }
-
-  userRoles() {
-    const user = this._user;
-
-    if (this.isLoggedIn()) {
-      if (user.roles.indexOf("fx_loggedIn") === -1) {
-        user.roles.push("fx_loggedIn");
-      }
-      return user.roles;
-    }
-    return [];
-  }
-
-  onChange(fn) {
-    let uuid = uniqueId();
-    this._onChange[uuid] = fn;
-    return () => {
-      delete this._onChange[uuid];
-    };
-  }
-
-  matchesRoles(roles = []) {
-    if (roles.length === 0) {
-      return true;
-    }
-
-    const numberMatchingRoles = _.intersection(this.userRoles(), roles).length;
-    return numberMatchingRoles > 0;
-  }
-}
diff --git a/app/addons/cluster/__tests__/cluster.test.js b/app/addons/cluster/__tests__/cluster.test.js
deleted file mode 100644
index c9012bf..0000000
--- a/app/addons/cluster/__tests__/cluster.test.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from "../../../core/api";
-import {DisabledConfigController} from "../cluster";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-
-
-describe('Cluster Controller', () => {
-  let controller;
-
-  beforeEach(() => {
-    FauxtonAPI.reduxDispatch = sinon.stub();
-
-    var nodeList = [
-      {'node': 'node1@127.0.0.1', 'isInCluster': true},
-      {'node': 'node2@127.0.0.1', 'isInCluster': true},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false},
-      {'node': 'node3@127.0.0.1', 'isInCluster': false}
-    ];
-
-    controller = mount(
-      <DisabledConfigController nodes={nodeList} />
-    );
-  });
-
-  it('renders the amount of nodes', () => {
-    expect(controller.text()).toMatch(/6 nodes/);
-  });
-});
diff --git a/app/addons/cluster/actions.js b/app/addons/cluster/actions.js
deleted file mode 100644
index 60ec0c9..0000000
--- a/app/addons/cluster/actions.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import getNodes from "./api";
-import ActionTypes from "./actiontypes";
-
-export default {
-  fetchNodes () {
-    getNodes().then((nodes) => {
-      this.updateNodes({
-        nodes: nodes.nodes_mapped
-      });
-    })
-      .catch(err => {
-        FauxtonAPI.addNotification({
-          type: 'error',
-          msg: err.message,
-          clear: true
-        });
-      });
-  },
-
-  updateNodes (options) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.CLUSTER_FETCH_NODES,
-      options: options
-    });
-  },
-
-  navigateToNodeBasedOnNodeCount (successtarget) {
-    getNodes().then((nodes) => {
-      const allNodes = nodes.all_nodes;
-
-      if (allNodes.length === 1) {
-        return FauxtonAPI.navigate(successtarget + allNodes[0]);
-      }
-      return FauxtonAPI.navigate('/cluster/disabled', {trigger: true});
-    })
-      .catch(err => {
-        FauxtonAPI.addNotification({
-          type: 'error',
-          msg: err.message,
-          clear: true
-        });
-      });
-  }
-
-};
diff --git a/app/addons/cluster/actiontypes.js b/app/addons/cluster/actiontypes.js
deleted file mode 100644
index 525e7f6..0000000
--- a/app/addons/cluster/actiontypes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed 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.
-
-export default {
-  CLUSTER_FETCH_NODES: 'CLUSTER_FETCH_NODES'
-};
diff --git a/app/addons/cluster/api.js b/app/addons/cluster/api.js
deleted file mode 100644
index a6c05a1..0000000
--- a/app/addons/cluster/api.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed 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.
-
-import Helpers from "../../helpers";
-import {get} from '../../core/ajax';
-
-export default () => {
-  return get(Helpers.getServerUrl('/_membership'))
-    .then(res => {
-      if (!res.all_nodes) {
-        const details = res.reason ? res.reason : '';
-        throw new Error('Failed to load list of nodes.' + details);
-      }
-
-      const list = res.all_nodes.reduce(function (acc, node) {
-        var isInCluster = res.cluster_nodes.indexOf(node) !== -1;
-
-        acc.push({node: node, isInCluster: isInCluster});
-        return acc;
-      }, []);
-
-      res.nodes_mapped = list;
-      return res;
-    });
-};
diff --git a/app/addons/cluster/base.js b/app/addons/cluster/base.js
deleted file mode 100644
index d61ca99..0000000
--- a/app/addons/cluster/base.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-import Cluster from "./routes";
-import FauxtonAPI from "../../core/api";
-import reducers from './reducers';
-
-Cluster.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  clusters: reducers
-});
-
-export default Cluster;
diff --git a/app/addons/cluster/cluster.js b/app/addons/cluster/cluster.js
deleted file mode 100644
index 7a4d1a3..0000000
--- a/app/addons/cluster/cluster.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import {connect} from 'react-redux';
-
-export class DisabledConfigController extends React.Component {
-  render() {
-    return (
-      <div className="config-warning-cluster-wrapper">
-        <div className="config-warning-cluster-container">
-          <div>
-            <div className="config-warning-icon-container pull-left">
-              <i className="fonticon-attention-circled"></i>
-            </div>
-            It seems that you are running a cluster with {this.props.nodes.length} nodes. For CouchDB 2.0
-            or greater we recommend using a configuration management tools like Chef, Ansible,
-            Puppet or Salt (in no particular order) to configure your nodes in a cluster.
-            <br/>
-            <br/>
-            <div className="config-warning-other-text">
-              We highly recommend against configuring nodes in your cluster using the HTTP API and
-              suggest using a configuration management tool for all configurations.
-            </div>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({clusters}) => {
-  return {
-    nodes: clusters.nodes
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  null,
-)(DisabledConfigController);
diff --git a/app/addons/cluster/reducers.js b/app/addons/cluster/reducers.js
deleted file mode 100644
index 8a48c7a..0000000
--- a/app/addons/cluster/reducers.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from "./actiontypes";
-
-const initialState = {
-  nodes: []
-};
-
-export default (state = initialState, {type, options}) => {
-  switch (type) {
-    case ActionTypes.CLUSTER_FETCH_NODES:
-      return {
-        ...state,
-        nodes: options.nodes
-      };
-  }
-
-  return state;
-};
diff --git a/app/addons/cluster/routes.js b/app/addons/cluster/routes.js
deleted file mode 100644
index 37ed665..0000000
--- a/app/addons/cluster/routes.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Helpers from "../../helpers";
-import DisabledConfigController from "./cluster";
-import ClusterActions from "./actions";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-
-var ConfigDisabledRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Configuration',
-
-  routes: {
-    'cluster/disabled': 'showDisabledFeatureScreen'
-  },
-
-  showDisabledFeatureScreen: function () {
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<DisabledConfigController/>}
-      endpoint={Helpers.getServerUrl('/_membership')}
-      docURL={FauxtonAPI.constants.DOC_URLS.MEMBERSHIP}
-      crumbs={[
-        { name: 'Config disabled' }
-      ]}
-    />;
-  }
-});
-
-export default {
-  RouteObjects: [ConfigDisabledRouteObject]
-};
diff --git a/app/addons/components/README.md b/app/addons/components/README.md
deleted file mode 100644
index 01bf4b5..0000000
--- a/app/addons/components/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Components
-
-small building blocks for Fauxton built using React
diff --git a/app/addons/components/__tests__/accordion.test.js b/app/addons/components/__tests__/accordion.test.js
deleted file mode 100644
index 40eb602..0000000
--- a/app/addons/components/__tests__/accordion.test.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed 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.
-
-import { Accordion, AccordionItem } from '../components/accordion';
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-
-describe('Accordion', () => {
-
-  it('Shows and hides content after clicking on header', () => {
-    const el = mount(
-      <Accordion>
-        <AccordionItem title={'Click to open'}>
-          <p id="test_content">Have a great day</p>
-        </AccordionItem>
-      </Accordion>
-    );
-
-    expect(el.find('.faux--accordion__item-content').hasClass('in')).toBe(false);
-    el.find('.faux--accordion__item-header').simulate('click');
-    expect(el.find('.faux--accordion__item-content').hasClass('in')).toBe(true);
-  });
-
-  it('Calls onClick event', () => {
-    const spy = sinon.spy();
-    const el = mount(
-      <Accordion>
-        <AccordionItem title={'Click to open'} onClick={spy}>
-          <p id="test_content">Have a great day</p>
-        </AccordionItem>
-      </Accordion>
-    );
-
-    el.find('.faux--accordion__item-header').simulate('click');
-    sinon.assert.called(spy);
-  });
-
-});
diff --git a/app/addons/components/__tests__/apilinks.test.js b/app/addons/components/__tests__/apilinks.test.js
deleted file mode 100644
index 75dfe15..0000000
--- a/app/addons/components/__tests__/apilinks.test.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-import { JSONLink, DocLink } from "../components/apibar";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-
-describe('JSONLink', () => {
-
-  it('Should render with url', () => {
-    const url = "http://couchdb.com/_all_dbs";
-    const el = mount(<JSONLink endpoint={url}/>);
-
-    expect(el.find('a').prop('href')).toEqual(url);
-  });
-
-});
-
-describe('DocLink', () => {
-
-  it('Should render with url', () => {
-    const url = "http://couchdb.com/help/_all_dbs";
-    const el = mount(<DocLink docURL={url}/>);
-
-    expect(el.find('a').prop('href')).toEqual(url);
-  });
-
-});
diff --git a/app/addons/components/__tests__/badges.test.js b/app/addons/components/__tests__/badges.test.js
deleted file mode 100644
index 5cb84cc..0000000
--- a/app/addons/components/__tests__/badges.test.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('Badges', () => {
-  it('renders a list of badges', () => {
-    const el = mount(
-      <ReactComponents.BadgeList elements={['foo', 'bar']} removeBadge={() => {}} />
-    );
-
-    expect(el.find('.component-badge').length).toBe(2);
-  });
-
-  it('supports custom label formatters', () => {
-    const el = mount(
-      <ReactComponents.BadgeList elements={['foo', 'bar']} removeBadge={() => {}} getLabel={(el) => { return el + 'foo'; }} />
-    );
-
-    expect(el.find('.component-badge').first().text()).toBe('foofoo×');
-    expect(el.find('.component-badge').last().text()).toBe('barfoo×');
-  });
-
-});
diff --git a/app/addons/components/__tests__/beautify.test.js b/app/addons/components/__tests__/beautify.test.js
deleted file mode 100644
index faefe5f..0000000
--- a/app/addons/components/__tests__/beautify.test.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('Beautify', () => {
-  let beautifyEl;
-
-  it('should be empty for multi-lined code', () => {
-    const correctCode = 'function() {\n    console.log("hello");\n}';
-    beautifyEl = mount(
-      <ReactComponents.Beautify code={correctCode}/>
-    );
-    expect(beautifyEl.instance().render()).toBeNull();
-  });
-
-  it('should have button to beautify for single line code', () => {
-    const badCode = '() => { console.log("hello"); }';
-    beautifyEl = mount(<ReactComponents.Beautify code={badCode}/>);
-    expect(beautifyEl.find('button').hasClass('beautify')).toBeTruthy();
-  });
-
-  it('on click beautifies code', () => {
-    let fixedCode;
-    const correctCode = 'function() {\n    console.log("hello");\n}';
-
-    const beautifiedCode = (code) => {
-      fixedCode = code;
-    };
-
-    beautifyEl = mount(
-      <ReactComponents.Beautify
-        beautifiedCode={beautifiedCode}
-        code={'function() { console.log("hello"); }'}
-        noOfLines={1}/>
-    );
-    beautifyEl.simulate('click');
-    expect(fixedCode).toBe(correctCode);
-  });
-
-  it('on click beautifies es6 code', () => {
-    let fixedCode;
-    const correctCode = '({\n    type,\n    code\n}) => type === \'WIDGET\' && emit(code, 1)';
-
-    const beautifiedCode = (code) => {
-      fixedCode = code;
-    };
-
-    beautifyEl = mount(
-      <ReactComponents.Beautify
-        beautifiedCode={beautifiedCode}
-        code={'({type,code}) => type === \'WIDGET\' && emit(code,1)'}
-        noOfLines={1}/>
-    );
-    beautifyEl.simulate('click');
-    expect(fixedCode).toBe(correctCode);
-  });
-});
diff --git a/app/addons/components/__tests__/codeEditor.test.js b/app/addons/components/__tests__/codeEditor.test.js
deleted file mode 100644
index a4990c6..0000000
--- a/app/addons/components/__tests__/codeEditor.test.js
+++ /dev/null
@@ -1,137 +0,0 @@
-// Licensed 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.
-
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-var code2 = 'function (doc) {\n if(doc._id) { \n emit(doc._id, 2); \n } \n}';
-
-var ignorableErrors = [
-  'Missing name in function declaration.',
-  "['{a}'] is better written in dot notation."
-];
-
-describe('Code Editor', () => {
-  let codeEditorEl, spy;
-
-  beforeEach(() => {
-    spy = sinon.spy();
-
-    codeEditorEl = mount(
-      <ReactComponents.CodeEditor defaultCode={code} blur={spy} />
-    );
-  });
-
-  describe('Tracking edits', () => {
-    it('no change on mount', () => {
-      expect(codeEditorEl.instance().hasChanged()).toBeFalsy();
-    });
-
-    it('detects change on user input', () => {
-      codeEditorEl.instance().editor.setValue(code2, -1);
-      expect(codeEditorEl.instance().hasChanged()).toBeTruthy();
-    });
-  });
-
-  describe('onBlur', () => {
-    it('calls blur function', () => {
-      codeEditorEl.instance().editor._emit('blur');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('setHeightToLineCount', () => {
-    it('check default num lines #1', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} setHeightToLineCount={true} />
-      );
-      codeEditorEl.update();
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(3);
-    });
-    it('check default num lines #2', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code2} setHeightToLineCount={true} />
-      );
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(5);
-    });
-    // Skipping because the maxLines option is not working in the ACE editor
-    it.skip('check maxLines', () => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code2} setHeightToLineCount={true} maxLines={2} />
-      );
-      expect(codeEditorEl.instance().editor.getSession().getDocument().getLength()).toBe(2);
-    });
-  });
-
-  describe('removeIncorrectAnnotations', () => {
-    beforeEach(() => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} ignorableErrors={ignorableErrors} />
-      );
-    });
-    it('removes default errors that do not apply to CouchDB Views', () => {
-      expect(codeEditorEl.instance().getAnnotations()).toEqual([]);
-    });
-  });
-
-  describe('getEditor', () => {
-    beforeEach(() => {
-      codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} />
-      );
-    });
-    it('returns a reference to get access to the editor', () => {
-      expect(codeEditorEl.instance().getEditor()).toBeTruthy();
-    });
-  });
-
-  describe('parseLineForStringMatch', () => {
-    const initEditor = (code) => {
-      const editor = mount(
-        <ReactComponents.CodeEditor defaultCode={code} />
-      );
-      sinon.stub(editor.instance(), 'getSelectionStart').returns({row: 1});
-      sinon.stub(editor.instance(), 'getSelectionEnd').returns({row: 1});
-      sinon.stub(editor.instance(), 'isRowExpanded').returns(true);
-      return editor;
-    };
-
-    it('returns matches on pretty formatted code', () => {
-      const code = '{\n "field": "my string value" \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value" ').toBe(matches[3]);
-    });
-    it('returns matches when line ends with comma', () => {
-      const code = '{\n "field": "my string value", \n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value", ').toBe(matches[3]);
-    });
-    it('returns matches on code with extra spaces', () => {
-      const code = '{\n "field"  \t :  \t "my string value"  \t  ,  \t  \n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value"  \t  ,  \t  ').toBe(matches[3]);
-    });
-    it('returns matches on code with special and non-ASCII chars', () => {
-      const code = '{\n "@langua漢字g e" : "my string value",\n "field2": 123 \n}';
-      codeEditorEl = initEditor(code);
-      const matches = codeEditorEl.instance().parseLineForStringMatch();
-      expect('"my string value",').toBe(matches[3]);
-    });
-  });
-
-});
diff --git a/app/addons/components/__tests__/codeEditorPanel.test.js b/app/addons/components/__tests__/codeEditorPanel.test.js
deleted file mode 100644
index a13608b..0000000
--- a/app/addons/components/__tests__/codeEditorPanel.test.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-var codeNoNewlines = 'function (doc) {emit(doc._id, 1);}';
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-
-describe('CodeEditorPanel', () => {
-
-  describe('Doc icon', () => {
-    it('hidden by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} />
-      );
-      expect(codeEditorEl.find('.icon-question-sign').length).toBe(0);
-    });
-    it('hidden by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} docLink="http://link.com" />
-      );
-      expect(codeEditorEl.find('.icon-question-sign').length).toBe(1);
-    });
-  });
-
-  describe('Zen Mode', () => {
-    it('shows zen mode by default', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel defaultCode={code} />
-      );
-      expect(codeEditorEl.find('.zen-editor-icon').length).toBe(1);
-    });
-
-    it('omits zen mode if explicitly turned off', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditor defaultCode={code} allowZenMode={false} />
-      );
-      expect(codeEditorEl.find('.zen-editor-icon').length).toBe(0);
-    });
-  });
-
-  describe('Beautify', () => {
-    it('confirm clicking beautify actually works within context of component', () => {
-
-      const codeEditorEl = mount(
-        <ReactComponents.CodeEditorPanel
-          defaultCode={codeNoNewlines}
-        />
-      );
-
-      // confirm there are no newlines in the code at this point
-      expect(codeEditorEl.instance().getValue().match(/\n/g)).toBeNull();
-
-      codeEditorEl.find('.beautify').simulate('click');
-
-      // now confirm newlines are found
-      expect(codeEditorEl.instance().getValue().match(/\n/g).length).toBe(2);
-    });
-  });
-
-});
diff --git a/app/addons/components/__tests__/confirmButton.test.js b/app/addons/components/__tests__/confirmButton.test.js
deleted file mode 100644
index 1b3df1d..0000000
--- a/app/addons/components/__tests__/confirmButton.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('ConfirmButton', function () {
-  let button;
-
-  it('should render text properties', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here to render Rocko Artischocko" />
-    );
-    expect(button.text()).toBe('Click here to render Rocko Artischocko');
-  });
-
-  it('should use onClick handler if provided', function () {
-    const spy = sinon.spy();
-
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={spy} />
-    );
-
-    button.simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('shows icon by default', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={function () { }} />
-    );
-    expect(button.find('.icon').length).toBe(1);
-  });
-
-  it('optionally omits the icon', function () {
-    button = mount(
-      <ReactComponents.ConfirmButton text="Click here" onClick={function () { }} showIcon={false} />
-    );
-    expect(button.find('.icon').length).toBe(0);
-  });
-});
diff --git a/app/addons/components/__tests__/copy.test.js b/app/addons/components/__tests__/copy.test.js
deleted file mode 100644
index 64216c7..0000000
--- a/app/addons/components/__tests__/copy.test.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed 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.
-import { Copy } from "../components/copy";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-import uuid from 'uuid';
-
-describe('Copy', () => {
-
-  it('shows a copy icon by default', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} text="copy me"/>);
-    expect(wrapper.find('.icon-paste').length).toBe(1);
-  });
-
-  it('shows text if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} text="copy me" displayType="text" />);
-    expect(wrapper.find('.icon-paste').length).toBe(0);
-  });
-
-  it('shows custom text if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} displayType="text" textDisplay="booyah!" text="copy me" />);
-    expect(wrapper.html()).toMatch(/booyah!/);
-  });
-
-  it('shows an input field and button if specified', () => {
-    const wrapper = mount(<Copy uniqueKey={uuid.v4()} displayType='input' text="http://localhost:8000/_all_dbs" />);
-    expect(wrapper.find('input').length).toBe(1);
-  });
-});
diff --git a/app/addons/components/__tests__/deleteDatabaseModal.test.js b/app/addons/components/__tests__/deleteDatabaseModal.test.js
deleted file mode 100644
index 9c12cd7..0000000
--- a/app/addons/components/__tests__/deleteDatabaseModal.test.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-const noop = () => {};
-
-describe('DeleteDatabaseModal', function () {
-
-  it('submitting is disabled when initially rendered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    expect(modal.find('button.delete').first().prop('disabled')).toBe(true);
-  });
-
-  it('submitting is disabled when garbage entered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    const input = modal.find('input');
-
-    input.simulate('change', {target: {value: 'Hello, world'}});
-    expect(modal.find('button.delete').prop('disabled')).toBe(true);
-  });
-
-  it('submitting is enabled when same db name entered', function () {
-    const modal = mount(
-      <ReactComponents.DeleteDatabaseModal
-        showHide={noop}
-        modalProps={{isSystemDatabase: false, showDeleteModal: true, dbId: 'fooo'}} />
-    );
-
-    var input = modal.find('.modal').find('input');
-
-    input.simulate('change', {target: {value: 'fooo'}});
-    expect(modal.find('button.delete').prop('disabled')).toBeFalsy();
-  });
-
-
-});
diff --git a/app/addons/components/__tests__/doc.test.js b/app/addons/components/__tests__/doc.test.js
deleted file mode 100644
index 6107ca1..0000000
--- a/app/addons/components/__tests__/doc.test.js
+++ /dev/null
@@ -1,181 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-const noop = () => {};
-
-describe('Document', () => {
-  let el;
-
-  const doc = {};
-  _.times(1000, (n) => {
-    doc['prop' + n] = n;
-  });
-
-  const docContent = JSON.stringify(doc, null, '  ');
-
-  it('hosts child elements', () => {
-    el = mount(
-      <ReactComponents.Document docIdentifier="foo" docChecked={noop}>
-        <div className="foo-children"></div>
-      </ReactComponents.Document>
-    );
-    expect(el.find('.foo-children').length).toBeGreaterThan(0);
-  });
-
-  it('does not require child elements', () => {
-    el = mount(
-      <ReactComponents.Document docIdentifier="foo" docChecked={noop} />
-    );
-    expect(el.find('.doc-edit-symbol').length).toBe(0);
-  });
-
-  it('you can check it', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" />
-    );
-    expect(el.find('input').prop('data-checked')).toBe(true);
-  });
-
-  it('you can uncheck it', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} docIdentifier="foo" />
-    );
-    expect(el.find('[data-checked="true"]').length).toBe(0);
-  });
-
-  it('it calls an onchange callback', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document doc={{id: "foo"}} isDeletable={true} docChecked={spy} docIdentifier="foo" />
-    );
-    el.find('input[type="checkbox"]').first().simulate('change', {target: {value: 'Hello, world'}});
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('it calls an onclick callback', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} onClick={spy} docIdentifier="foo" />
-    );
-    el.find('.doc-item header').first().simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('can render without checkbox', () => {
-    var spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={false} onDoubleClick={spy} docIdentifier="foo" />
-    );
-    expect(el.find('input[type="checkbox"]').length).toBe(0);
-    expect(el.find('.checkbox-dummy').length).toBeGreaterThan(0);
-  });
-
-  it('contains a doc-data element when there\'s doc content', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" docContent='{ "content": true }' />
-    );
-    expect(el.find('.doc-data').length).toBe(1);
-  });
-
-  it('doesn\'t contain a doc-data element when there\'s no doc content', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} isDeletable={true} checked={true} docIdentifier="foo" docContent='' />
-    );
-    expect(el.find('.doc-data').length).toBe(0);
-  });
-
-  it('allows empty headers', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header={null} isDeletable={true} checked={true} docIdentifier="foo" docContent='' />,
-    );
-    expect(el.find('.header-doc-id').text()).toBe('');
-  });
-
-  it('allows supports headers with "', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent='' />
-    );
-    expect(el.find('.header-doc-id').text()).toBe('"foo"');
-  });
-
-  it('small docs should not be truncated', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent='{ "content": true }' />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('large docs should get truncated', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(1);
-  });
-
-  it('custom truncate value', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} maxRows={2000} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('disabling truncation', () => {
-    el = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true} checked={true} docIdentifier="foo" docContent={docContent} truncate={false} />
-    );
-    expect(el.find('.doc-content-truncated').length).toBe(0);
-  });
-
-  it('shows icon only for docs with type MangoIndex', () => {
-    const index = {
-      type: "json",
-      def: { fields: [{ foo: "asc" }] }
-    };
-    const content = JSON.stringify(index, null, '  ');
-    const elMangoIndex = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="MangoIndex"/>
-    );
-    expect(elMangoIndex.find('i.fonticon-document').exists()).toBe(true);
-
-    const elRegularDoc = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="view"/>
-    );
-    expect(elRegularDoc.find('i.fonticon-documents').exists()).toBe(false);
-  });
-
-  it('shows icon for partitioned mango index', () => {
-    const index = {
-      type: "json",
-      partitioned: true,
-      def: { fields: [{ foo: "asc" }] }
-    };
-    const content = JSON.stringify(index, null, '  ');
-    const elMangoIndex = mount(
-      <ReactComponents.Document docChecked={noop} header="foo" isDeletable={true}
-        checked={false} docIdentifier="foo" docContent={content}
-        truncate={false} docType="MangoIndex"/>
-    );
-    expect(elMangoIndex.find('i.fonticon-documents').exists()).toBe(true);
-  });
-
-});
diff --git a/app/addons/components/__tests__/headerBreadcrumbs.test.js b/app/addons/components/__tests__/headerBreadcrumbs.test.js
deleted file mode 100644
index 8231aee..0000000
--- a/app/addons/components/__tests__/headerBreadcrumbs.test.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {mount} from 'enzyme';
-
-import {Breadcrumbs} from '../header-breadcrumbs';
-
-describe('Breadcrumbs', () => {
-  it('should not inject dividers if 1 element present', () => {
-
-    const crumbs = [{name: 'pineapple'}];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-divider').length).toBe(0);
-  });
-
-  it('should inject 2 dividers if 3 elements present', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-
-    expect(el.find('.faux-header__breadcrumbs-divider').length).toBe(2);
-  });
-
-  it('linked breadcrumbs are possible', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango', link: 'http://example.com'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-link').length).toBe(1);
-  });
-
-  it('linked breadcrumbs are not created for non-linked elements', () => {
-
-    const crumbs = [
-      {name: 'pineapple'},
-      {name: 'mango'},
-      {name: 'guayaba'}
-    ];
-
-    let el = mount(
-      <div><Breadcrumbs crumbs={crumbs} /></div>
-    );
-
-    expect(el.find('.faux-header__breadcrumbs-link').length).toBe(0);
-  });
-});
diff --git a/app/addons/components/__tests__/headerTogglebutton.test.js b/app/addons/components/__tests__/headerTogglebutton.test.js
deleted file mode 100644
index 9ea0b59..0000000
--- a/app/addons/components/__tests__/headerTogglebutton.test.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Header Togglebutton', () => {
-  let toggleEl, toggleCallback;
-  beforeEach(() => {
-    toggleCallback = sinon.spy();
-    toggleEl = mount(<ReactComponents.ToggleHeaderButton fonticon={'foo'}
-      classString={'bar'} toggleCallback={toggleCallback} />);
-  });
-
-
-  it('should call the passed callback', () => {
-    toggleEl.simulate('click');
-    expect(toggleCallback.calledOnce).toBeTruthy();
-  });
-});
diff --git a/app/addons/components/__tests__/paddedBorderedBox.test.js b/app/addons/components/__tests__/paddedBorderedBox.test.js
deleted file mode 100644
index 80abf3e..0000000
--- a/app/addons/components/__tests__/paddedBorderedBox.test.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-
-describe('PaddedBorderedBox', function () {
-  let el;
-
-  it('hosts child elements', function () {
-    el = mount(
-      <ReactComponents.PaddedBorderedBox>
-        <div className="foo-children"></div>
-      </ReactComponents.PaddedBorderedBox>
-    );
-    expect(el.find('.foo-children').length).toBeGreaterThan(0);
-  });
-});
diff --git a/app/addons/components/__tests__/polling.test.js b/app/addons/components/__tests__/polling.test.js
deleted file mode 100644
index e1d9cec..0000000
--- a/app/addons/components/__tests__/polling.test.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed 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.
-import {Polling, clearPollCounter, resetPollCounter} from "../components/polling";
-import {mount} from "enzyme";
-import sinon from "sinon";
-import React from "react";
-
-describe("Polling", () => {
-  describe('Counters', () => {
-
-    it('resetPollCounter calls cb after set time', done => {
-      let called = false;
-      resetPollCounter(100, () => {
-        called = true;
-        expect(called).toBeTruthy();
-        done();
-      });
-    });
-
-    it('clearRefreshCounter stops counter', done => {
-      let called = false;
-      resetPollCounter(100, () => {
-        called = true;
-      });
-
-      clearPollCounter();
-      setTimeout(() => {
-        expect(called).toBeFalsy();
-        done();
-      }, 200);
-    });
-  });
-
-  describe('Component', () => {
-    var clock;
-    beforeEach(() => {
-      clock = sinon.useFakeTimers();
-    });
-
-    afterEach(() => {
-      clock.restore();
-    });
-
-    it('renders slider with correct info', () => {
-      const wrapper = mount(<Polling
-        startValue={10}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={() => {}}
-      />);
-
-      const props = wrapper.find('.faux__polling-info-slider').at(0).props();
-      expect(props.defaultValue).toEqual(10);
-      expect(props.step).toEqual(1);
-      expect(props.min).toEqual(1);
-      expect(props.max).toEqual(21);
-    });
-
-    it('turns polling off if value is max', () => {
-      const wrapper = mount(<Polling
-        startValue={10}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={() => {}}
-      />);
-
-      const handler = wrapper.find('.rc-slider-handle').at(1);
-      wrapper.simulate('focus');
-      // Simulate key END to move handle to the max value
-      handler.simulate('keyDown', { keyCode: 35 });
-      const isOff = wrapper.find('.faux__polling-info-value--off').text();
-      expect(isOff.toLowerCase()).toEqual("off");
-    });
-
-    it('turns polling off if value is max', (done) => {
-      let pollCalled = false;
-      const onPoll = () => {
-        pollCalled = true;
-        expect(pollCalled).toBeTruthy();
-        done();
-      };
-      mount(<Polling
-        startValue={1}
-        min={1}
-        max={20}
-        stepSize={1}
-        onPoll={onPoll}
-      />);
-
-      clock.tick(1010);
-
-    });
-  });
-});
diff --git a/app/addons/components/__tests__/stringEditModal.test.js b/app/addons/components/__tests__/stringEditModal.test.js
deleted file mode 100644
index ffd5921..0000000
--- a/app/addons/components/__tests__/stringEditModal.test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-//need enzyme to support portals
-describe('String Edit Modal', () => {
-  var stub = () => {};
-
-  describe('onSave', () => {
-    it('ensures same content returns on saving', () => {
-      var string = "a string!";
-      var spy = sinon.spy();
-      const el = mount(
-        <ReactComponents.StringEditModal visible={true} onClose={stub} onSave={spy} value={string} />
-      );
-      el.find('#string-edit-save-btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-      sinon.assert.calledWith(spy, string);
-    });
-  });
-});
diff --git a/app/addons/components/__tests__/styledSelect.test.js b/app/addons/components/__tests__/styledSelect.test.js
deleted file mode 100644
index a1e6366..0000000
--- a/app/addons/components/__tests__/styledSelect.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Licensed 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.
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('styled select', () => {
-  let selectorEl, spy = sinon.spy();
-
-  beforeEach(() => {
-    const selectContent = (
-      <optgroup label="Select a document">
-        <option value="new">New Design Document</option>
-        <option value="foo">New Design Document</option>
-      </optgroup>
-    );
-
-    selectorEl = mount(
-      <ReactComponents.StyledSelect
-        selectValue={"foo"}
-        selectId="new-ddoc"
-        selectClass=""
-        selectContent={selectContent}
-        selectChange={spy} />
-    );
-  });
-
-  it('calls the callback on select', () => {
-    selectorEl.find('#new-ddoc').simulate('change', {
-      target: {
-        value: 'new'
-      }
-    });
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-});
diff --git a/app/addons/components/__tests__/tabwindowwrapper.test.js b/app/addons/components/__tests__/tabwindowwrapper.test.js
deleted file mode 100644
index 2745bb2..0000000
--- a/app/addons/components/__tests__/tabwindowwrapper.test.js
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed 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.
-import { TabWindowWrapper } from "../components/tabwindowwrapper";
-import { mount } from "enzyme";
-import React from "react";
-import ReactDOM from "react-dom";
-
-describe('TabWindowWrapper', () => {
-  const mock = () => {
-    return (<div></div>);
-  };
-
-  const tabs = [
-    {
-      name: 'Tab1',
-      component: mock,
-      route: 'tab1'
-    },
-    {
-      name: 'Tab2',
-      component: mock,
-      route: 'tab2'
-    },
-    {
-      name: 'Tab3',
-      component: mock,
-      route: 'tab3'
-    }
-  ];
-
-  it('shows all tabs', () => {
-    const wrapper = mount(<TabWindowWrapper tabs={tabs} selectedTab={"Tab1"}/>);
-    expect(wrapper.find('.component-tab-element-wrapper').length).toBe(1);
-    expect(wrapper.find('.tab-element-content').length).toBe(3);
-  });
-
-  it('shows the selected tab', () => {
-    const wrapper = mount(<TabWindowWrapper tabs={tabs} selectedTab={"Tab2"}/>);
-    expect(wrapper.find('.tab-element-checked .tab-element-content').html()).toMatch(/Tab2/);
-  });
-
-  it('shows tab badge', () => {
-    const tabNoBadge = [{name: 'Tab1', component: mock, route: 'tab1'}];
-    const wrapperNoBadge = mount(<TabWindowWrapper tabs={tabNoBadge} selectedTab={"Tab1"}/>);
-    expect(wrapperNoBadge.find('.tab-element-badge').length).toBe(0);
-
-    const tabWithBadge = [{name: 'Tab1', component: mock, route: 'tab1', badgeText: 'new'}];
-    const wrapperWithBadge = mount(<TabWindowWrapper tabs={tabWithBadge} selectedTab={"Tab1"}/>);
-    expect(wrapperWithBadge.find('.tab-element-badge').length).toBe(1);
-    expect(wrapperWithBadge.find('.tab-element-badge').text()).toBe('new');
-  });
-});
diff --git a/app/addons/components/__tests__/zenMode.test.js b/app/addons/components/__tests__/zenMode.test.js
deleted file mode 100644
index 1873227..0000000
--- a/app/addons/components/__tests__/zenMode.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed 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.
-
-import ReactComponents from "../react-components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-var code = 'function (doc) {\n  emit(doc._id, 1);\n}';
-
-describe('Zen Mode', () => {
-  let el, spy;
-
-  beforeEach(() => {
-    spy = sinon.spy();
-
-    el = mount(
-      <ReactComponents.ZenModeOverlay defaultCode={code} onExit={spy} />
-    );
-  });
-
-  afterEach(() => {
-    window.localStorage.removeItem('zenTheme');
-  });
-
-  describe('Toggle theme', () => {
-    it('defaults to dark theme', () => {
-      expect(el.find('div.zen-theme-dark').exists()).toBeTruthy();
-    });
-
-    it('switch to light theme on click', () => {
-      el.find('.js-toggle-theme').simulate('click');
-      expect(el.find('div.zen-theme-light').exists()).toBeTruthy();
-      // reset
-      el.find('.js-toggle-theme').simulate('click');
-    });
-  });
-
-  describe('Closing zen mode', () => {
-    it('method called', () => {
-      el.find('.js-exit-zen-mode').simulate('click');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-});
diff --git a/app/addons/components/actions.js b/app/addons/components/actions.js
deleted file mode 100644
index bc1783b..0000000
--- a/app/addons/components/actions.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-import { deleteRequest } from '../../core/ajax';
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-
-function showDeleteDatabaseModal (options) {
-  FauxtonAPI.dispatch({
-    type: ActionTypes.CMPNTS_DATABASES_SHOWDELETE_MODAL,
-    options: options
-  });
-}
-
-function deleteDatabase (dbId, onDeleteSuccess) {
-  const url = FauxtonAPI.urls('databaseBaseURL', 'server', dbId, '');
-
-  deleteRequest(url).then(resp => {
-    if (!resp.ok) {
-      const msg = resp.reason || '';
-      throw new Error(msg);
-    }
-    this.showDeleteDatabaseModal({ showModal: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'The database <code>' + _.escape(dbId) + '</code> has been deleted.',
-      clear: true,
-      escape: false // beware of possible XSS when the message changes
-    });
-
-    Backbone.history.loadUrl(FauxtonAPI.urls('allDBs', 'app'));
-    if (onDeleteSuccess) {
-      onDeleteSuccess();
-    }
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Could not delete the database. ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-}
-
-
-export default {
-  deleteDatabase: deleteDatabase,
-  showDeleteDatabaseModal: showDeleteDatabaseModal
-};
diff --git a/app/addons/components/actiontypes.js b/app/addons/components/actiontypes.js
deleted file mode 100644
index d9e7183..0000000
--- a/app/addons/components/actiontypes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed 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.
-
-export default {
-  CMPNTS_DATABASES_SHOWDELETE_MODAL: 'CMPNTS_DATABASES_SHOWDELETE_MODAL'
-};
diff --git a/app/addons/components/assets/less/accordion.less b/app/addons/components/assets/less/accordion.less
deleted file mode 100644
index 16a504f..0000000
--- a/app/addons/components/assets/less/accordion.less
+++ /dev/null
@@ -1,27 +0,0 @@
-.faux--accordion {
-  list-style: none;
-  margin: 0px;
-  width: 100%;
-}
-
-.faux--accordion__item {
-  background-color: transparent;
-  transition: all 0.5s linear;
-}
-
-.faux--accordion__item-header {
-  border: 0;
-  background-color: transparent;
-  color: inherit;
-  font-size: inherit;
-  padding-left: 0px;
-  span {
-    padding-left: 0.5rem;
-  }
-}
-
-.faux--accordion__item-content {
-  padding-left: 1.35rem;
-  padding-top: 0.75rem;
-  font-size: inherit;
-}
diff --git a/app/addons/components/assets/less/badges.less b/app/addons/components/assets/less/badges.less
deleted file mode 100644
index a049758..0000000
--- a/app/addons/components/assets/less/badges.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Licensed 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.
-ul.component-badgelist {
-  margin: 0;
-  display: inline-block;
-  li {
-    list-style-type: none;
-    float: left;
-    margin-left: 5px;
-  }
-}
diff --git a/app/addons/components/assets/less/bulk-selector.less b/app/addons/components/assets/less/bulk-selector.less
deleted file mode 100644
index a55ba7f..0000000
--- a/app/addons/components/assets/less/bulk-selector.less
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-
-#bulk-action-component-popover {
-  font-size: 13px;
-
-  i.icon {
-    margin-right: 10px;
-  }
-
-  ul {
-    margin: inherit;
-  }
-
-  li {
-    padding: 14px 15px;
-    line-height: 0;
-    cursor: pointer;
-    list-style-type: none;
-
-    &.disabled {
-      color: #cccccc;
-      cursor: default;
-      &:hover {
-        background-color: inherit;
-      }
-    }
-
-    &:hover {
-      background-color: #fbcece; // light red
-    }
-    &:last-child {
-      -webkit-border-bottom-right-radius: 5px;
-      -webkit-border-bottom-left-radius: 5px;
-      -moz-border-radius-bottomright: 5px;
-      -moz-border-radius-bottomleft: 5px;
-      border-bottom-right-radius: 5px;
-      border-bottom-left-radius: 5px;
-    }
-  }
-  .popover-title {
-    margin: -1px;
-  }
-
-  .popover {
-    left: 10px !important;
-
-    .arrow {
-      margin-left: -39px;
-    }
-  }
-
-  .popover-content {
-    padding: 0;
-  }
-}
-
-.bulk-action-component {
-  min-height: 43px;
-
-  button {
-    height: 26px;
-    width: 26px;
-    background-color: @background;
-    border: 1px solid @darkBorder;
-    margin-left: 7px;
-  }
-
-  .fonticon-trash:before {
-    font-size: 12px;
-    margin-left: 2px;
-    margin-top: 1px;
-  }
-
-
-  .separator {
-    border-left: 1px solid @darkBorder;
-    margin: 5px 0;
-    height: 15px;
-  }
-
-  .bulk-action-component-selector-group {
-
-    .fonticon {
-      font-size: 8px;
-      color: #505050;
-      padding: 3px 0;
-      &:hover {
-        color: @dangerRed;
-      }
-    }
-
-  }
-
-  .bulk-action-component-panel {
-    input[type="checkbox"] {
-      margin: 6px;
-    }
-
-    border: 1px solid @darkBorder;
-
-    position: relative;
-    float: left;
-    div.arrow-button {
-      height: 24px;
-      width: 24px;
-      transform: rotate(90deg);
-      cursor: pointer;
-      i {
-        margin-left: 10px;
-      }
-    }
-  }
-}
diff --git a/app/addons/components/assets/less/code-editor.less b/app/addons/components/assets/less/code-editor.less
deleted file mode 100644
index eff819b..0000000
--- a/app/addons/components/assets/less/code-editor.less
+++ /dev/null
@@ -1,100 +0,0 @@
-// Licensed 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.
-
-.zen-editor-icon {
-  float: right;
-  font-size: 13px;
-  margin-top: 3px;
-}
-
-.full-page-editor-modal-wrapper {
-  position: fixed;
-  padding: 110px;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  margin: 0;
-  width: 100%;
-  z-index: 1025;
-
-  &.zen-theme-dark {
-    background-color: #323232;
-  }
-  &.zen-theme-light {
-    background-color: #ffffff;
-  }
-
-  &>div {
-    height: 100%;
-    &.zen-mode-controls {
-      height: 96px;
-    }
-  }
-
-  .ace_editor {
-    height: 100%;
-    font-size: 15px;
-    line-height: 25px;
-    background-color: inherit;
-
-    .ace_gutter, .ace_gutter-active-line {
-      background-color: inherit;
-    }
-  }
-}
-
-.zen-theme-light {
-  .zen-mode-controls {
-    color: #999999;
-  }
-}
-
-.zen-mode-controls {
-  position: absolute;
-  right: 30px;
-  top: 30px;
-  font-size: 20px;
-  color: white;
-
-  .zen-mode-controls-wrapper {
-    position: relative;
-    float: left;
-  }
-
-  .tooltips {
-    position: relative;
-    float: left;
-  }
-
-  ul {
-    float: right;
-    list-style-type: none;
-  }
-
-  .tooltip {
-    margin-right: 20px;
-    min-width: 140px;
-  }
-
-  span {
-    cursor: pointer;
-    width: 23px;
-    height: 23px;
-    margin: 10px;
-    display: inline-block;
-  }
-}
-
-html body .ace_editor .ace_marker-layer .ace_selection {
-  background-color: rgba(29, 151, 215, 0.5);
-}
diff --git a/app/addons/components/assets/less/components.less b/app/addons/components/assets/less/components.less
deleted file mode 100644
index a334648..0000000
--- a/app/addons/components/assets/less/components.less
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-@import "accordion.less";
-@import "header-togglebutton.less";
-@import "styled-select.less";
-@import "docs.less";
-@import "loading-lines.less";
-@import "code-editor.less";
-@import "bulk-selector.less";
-@import "badges.less";
-@import "modals.less";
-@import "tab-element.less";
-@import "header-breadcrumbs.less";
-@import "layouts.less";
-@import "polling.less";
-@import "jsonlink.less";
-@import "menudropdown.less";
diff --git a/app/addons/components/assets/less/docs.less b/app/addons/components/assets/less/docs.less
deleted file mode 100644
index a148d08..0000000
--- a/app/addons/components/assets/less/docs.less
+++ /dev/null
@@ -1,133 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-#doc-list {
-  .custom-inputs {
-    display: none;
-  }
-  padding: 30px 12px 0 12px;
-  div.doc-row {
-    margin-bottom: 20px;
-    .doc-item {
-      vertical-align: top;
-      position: relative;
-      .box-shadow(3px 4px 0 rgba(0, 0, 0, 0.3));
-      .doc-data {
-        border-bottom: 1px solid @docHeaderBorderBottom;
-        border-left: 1px solid @docHeaderOtherBorders;
-        border-right: 1px solid @docHeaderOtherBorders;
-        font-family: monospace;
-        .prettyprint--small {
-          font-size: 11px;
-        }
-        .prettyprint--large {
-          font-size: 15px;
-        }
-      }
-      header {
-        cursor: pointer;
-        font-weight: bold;
-        position: relative;
-        padding: 5px 10px;
-        background-color: @docHeaderBG;
-        border-bottom: 1px solid @docHeaderBorderBottom;
-        border-left: 1px solid @docHeaderOtherBorders;
-        border-right: 1px solid @docHeaderOtherBorders;
-        border-top: 1px solid @docHeaderOtherBorders;
-        .header-doc-id {
-          color: @docHeaderDocId;
-          margin-left: 0;
-        }
-        .header-keylabel {
-          margin-right: 10px;
-        }
-        .header-keylabel:empty
-        {
-          display:none;
-        }
-        .header-keylabel,
-        .fonticon-pencil {
-          color: @docHeaderLabels;
-        }
-        .doc-edit-symbol {
-          position: relative;
-        }
-        .fonticon-pencil {
-          font-size: 16px;
-        }
-        .fonticon-pencil:hover {
-          color: @hoverHighlight;
-        }
-      }
-    }
-  }
-}
-
-.view #doc-list {
-  padding-top: 12px;
-}
-
-.show-select {
-  #doc-list {
-    padding: 0px 0 30px 0;
-    .custom-inputs {
-      display: block;
-      float: left;
-    }
-  }
-  .checkbox.inline {
-    padding-top: 17px;
-    padding-left: 0;
-    label {
-      padding-left: 23px; // 7px to the right-border + 16px around
-    }
-  }
-  .checkbox-dummy {
-    width: 20px;
-    height: 20px;
-    padding-left: 23px;
-    margin-right: 15px;
-  }
-  .doc-item {
-    width: auto;
-    overflow: hidden;
-  }
-  label.label-checkbox-doclist {
-    // https://code.google.com/p/chromium/issues/detail?id=411065
-    -webkit-user-select: none;
-    height: 1px;
-    width: 1px;
-  }
-  /* checkboxes in doc-list */
-  input[type="checkbox"] + label:before {
-    background-color: @docCheckBoxUncheckedBG;
-    border: @docCheckBoxUncheckedBorder;
-  }
-  input[type="checkbox"] + label:hover:before {
-    border: @docCheckBoxHoverBorder;
-  }
-  input[type="checkbox"]:checked + label::before {
-    border: @docCheckBoxCheckedBorder;
-    background-color: @docCheckBoxCheckedBG;
-  }
-}
-
-.doc-content-truncated {
-  background-color: #4d4d4d;
-  color: #bbbbbb;
-  padding: 10px;
-  font-size: 13px;
-  margin: 0;
-}
diff --git a/app/addons/components/assets/less/header-breadcrumbs.less b/app/addons/components/assets/less/header-breadcrumbs.less
deleted file mode 100644
index 7e4b8a0..0000000
--- a/app/addons/components/assets/less/header-breadcrumbs.less
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-.faux-header__breadcrumbs {
-  .display-flex();
-  height: @collapsedNavWidth;
-}
-
-.faux-header__breadcrumbs-element {
-  margin: 0 4px 0 4px;
-  color: #333;
-  padding: 18px 10px;
-  font-size: 24px;
-  text-shadow: none;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-a.faux-header__breadcrumbs-link {
-  color: @brandHighlight;
-  &:hover {
-  color: @hoverHighlight;
-  text-decoration: none;
-  cursor: pointer;
-  }
-}
-
-
-.faux-header__breadcrumbs-divider {
-  width: 13px;
-  padding-top: 22px;
-  font-size: 20px;
-}
-
-.faux-header__controlbox-backlink {
-  border-right: 1px solid #ccc;
-  padding-left: 10px;
-  padding-right: 2px;
-}
diff --git a/app/addons/components/assets/less/header-togglebutton.less b/app/addons/components/assets/less/header-togglebutton.less
deleted file mode 100644
index 9df3672..0000000
--- a/app/addons/components/assets/less/header-togglebutton.less
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed 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.
-@import "../../../../../assets/less/variables.less";
-
-.header-control-box {
-  color: #666;
-  font-size: 13px;
-  line-height: 33px;
-  padding: 12px 20px 12px 20px;
-  height: @collapsedNavWidth;
-  background-color: transparent;
-  border: none;
-  border-left: 1px solid @btnBorder;
-  text-decoration: none;
-  .icon {
-    font-size: 20px;
-    &:before {
-      float: left;
-      margin: 10px 0 0 0;
-    }
-  }
-  span {
-    margin-left: 6px;
-  }
-  .icon.fontawesome {
-    &:before {
-      margin: 6px 6px 0 0;
-    }
-  }
-}
-
-.header-control-square {
-  height: @collapsedNavWidth;
-  width: @collapsedNavWidth;
-  float: left;
-  .icon {
-    &:before {
-      margin: 0;
-      float: none;
-    }
-  }
-}
-
-.header-control-box:hover {
-  .icon, span {
-    color: @hoverHighlight;
-  }
-}
-
-.js-headerbar-togglebutton-selected {
-  .icon, span {
-    color: @linkColor;
-  }
-}
-
-button.control-toggle-alternative-header {
-  float: left;
-  border-right: 1px solid @btnBorder;
-  border-left: none;
-}
-
-button.control-toggle-alternative-header.js-headerbar-togglebutton-selected {
-  border-right: none;
-}
diff --git a/app/addons/components/assets/less/jsonlink.less b/app/addons/components/assets/less/jsonlink.less
deleted file mode 100644
index 304a848..0000000
--- a/app/addons/components/assets/less/jsonlink.less
+++ /dev/null
@@ -1,80 +0,0 @@
-// Licensed 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.
-
-.faux__jsonlink {
-  /*width: 76px; Static width cause rendering problems on Edge */
-  border-left: 1px solid #ccc;
-  padding: 16px 12px 12px 12px !important;
-  height: 64px;
-  background-color: rgba(0, 0, 0, 0);
-  text-align: center;
-  min-width: 55px;
-}
-
-.faux__jsonlink-link {
-  color: #666;
-  text-decoration: none;
-  line-height: 33px;
-  font-size: 13px;
-}
-
-.faux__jsonlink-link:visited,
-.faux__jsonlink-link:focus,
-.faux__jsonlink-link:active {
-  text-decoration: none;
-  color: #666;
-}
-
-.faux__jsonlink-link-brackets {
-  font-size: 15px;
-  padding-right: 3px;
-  font-weight: 500;
-}
-
-.faux__doclink {
-  text-align: center;
-  width: 55px;
-  border-left: 1px solid #ccc;
-  padding: 18px 12px 12px 12px !important;
-  height: 64px;
-  background-color: rgba(0, 0, 0, 0);
-}
-
-.faux__doclink-link {
-  color: #666;
-  text-decoration: none;
-  line-height: 33px;
-  font-size: 20px;
-}
-
-.faux__doclink-link:active,
-.faux__doclink-link:focus,
-.faux__doclink-link:visited {
-  text-decoration: none;
-  color: #666;
-}
-
-@media (max-width: 1090px) {
-  #main:not(.closeMenu) {
-    .faux__jsonlink-link-label{
-      display: none;
-    }
-  }
-}
-
-@media (max-width: 1120px) {
-  #main.closeMenu {
-    .faux__jsonlink-link-label{
-      display: none;
-    }
-  }
-}
diff --git a/app/addons/components/assets/less/layouts.less b/app/addons/components/assets/less/layouts.less
deleted file mode 100644
index 8d72807..0000000
--- a/app/addons/components/assets/less/layouts.less
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-.template {
-  height: 100%;
-}
-
-.right-header-flex {
-  display: flex;
-  align-items: center;
-  flex-direction: row;
-  height: 100%;
-
-  &--ie1X{
-     align-items:stretch;
-  }
-}
-
-//yes !important!!! We have to overridde some styles I can't override any other way for now
-div.faux__breadcrumbs-mango-header {
-  height: 64px !important;
-  -ms-flex: 0 0 440px !important;
-  flex: 0 0 440px !important;
-  overflow: hidden !important;
-}
-
-div.faux__jsondoc-wrapper {
-  display:flex;
-}
diff --git a/app/addons/components/assets/less/loading-lines.less b/app/addons/components/assets/less/loading-lines.less
deleted file mode 100644
index ce3a5d8..0000000
--- a/app/addons/components/assets/less/loading-lines.less
+++ /dev/null
@@ -1,76 +0,0 @@
-// Licensed 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.
-
-
-@import "../../../../../assets/less/variables.less";
-
-
-@loadingLinesHeight: 30px;
-@loadingLinesMargin: 3px;
-@loadingLinesWidth: 10px;
-@loadingLinesTime: 0.8s;
-@loadingLinesEffect: linear;
-@loadingLinesColor: @brandHighlight;
-
-.loading-lines {
-  display: block;
-  width: 80px;
-  margin-left: auto;
-  margin-right: auto;
-  div {
-    background-color: @loadingLinesColor;
-    width: @loadingLinesWidth;
-    height: 1px;
-    float: left;
-    animation: height-change @loadingLinesTime infinite @loadingLinesEffect;
-    -webkit-animation: height-change @loadingLinesTime infinite @loadingLinesEffect;
-  }
-}
-
-#line2 {
-  animation-delay: 0.1s;
-  -webkit-animation-delay: 0.1s;
-  margin-left: @loadingLinesMargin;
-}
-#line3 {
-  animation-delay: 0.2s;
-  -webkit-animation-delay: 0.2s;
-  margin-left: @loadingLinesMargin;
-}
-#line4 {
-  animation-delay: 0.3s;
-  -webkit-animation-delay: 0.3s;
-  margin-left: @loadingLinesMargin;
-}
-
-@-webkit-keyframes height-change {
-  0% {
-    height: 1px;
-  }
-  50% {
-    height: @loadingLinesHeight;
-  }
-  100% {
-    height: 1px;
-  }
-}
-@keyframes height-change {
-  0% {
-    height: 1px;
-  }
-  50% {
-    height: @loadingLinesHeight;
-  }
-  100% {
-    height: 1px;
-  }
-}
diff --git a/app/addons/components/assets/less/menudropdown.less b/app/addons/components/assets/less/menudropdown.less
deleted file mode 100644
index 2638a29..0000000
--- a/app/addons/components/assets/less/menudropdown.less
+++ /dev/null
@@ -1,17 +0,0 @@
-// Licensed 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.
-
-
-.dropdown-menu > li > a.fonticon-placeholder:before {
-  padding-right: 17px;
-  content: "";
-}
diff --git a/app/addons/components/assets/less/modals.less b/app/addons/components/assets/less/modals.less
deleted file mode 100644
index 93e1ba3..0000000
--- a/app/addons/components/assets/less/modals.less
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-
-
-@import "../../../../../assets/less/variables.less";
-
-.modal .cancel-link {
-  margin: 0 15px;
-  font-size: 14px;
-  color: #666;
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
diff --git a/app/addons/components/assets/less/polling.less b/app/addons/components/assets/less/polling.less
deleted file mode 100644
index 0c423e4..0000000
--- a/app/addons/components/assets/less/polling.less
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed 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.
-
-.faux__polling {
-  padding: 0 15px !important;
-  width: 236px;
-
-  .rc-slider-rail {
-    background-color: @sliderBackground;
-    height: 8px;
-    border: 1px solid @sliderBorderColor;
-  }
-
-  .rc-slider-track {
-    background-color: @sliderBackgroundHighlight;
-    height: 8px;
-    border: 1px solid @sliderBackgroundHighlight;
-  }
-
-  .rc-slider-handle {
-    height: 14px;
-    width: 14px;
-    margin-top: -3px;
-    border: 1px solid @sliderBackgroundHighlight;
-    border-radius: 8px;
-    background-color: @sliderBackgroundHighlight;
-  }
-}
-
-.faux__polling-info {
-  font-size: 14px;
-}
-
-.faux__polling-info-text {
-  color: #666;
-}
-
-.faux__polling-info-value {
-  float: right;
-}
-
-.faux__polling-info-value--off {
-  color: #999;
-}
-
-.faux__polling-info-value--active {
-  color: @brandHighlight;
-}
-
-.faux__polling-info-slider {
-  cursor: pointer;
-  height: 20px;
-  padding-top: 8px;
-}
-
-div.faux__refresh-btn {
-  border-left: 1px solid #ccc;
-  line-height: 40px;
-  padding: 12px 13px;
-  flex: 0 0 auto;
-}
-
-.faux__refresh-icon {
-  margin-right: 4px;
-}
-
-.faux__refresh-link:visited,
-.faux__refresh-link:focus,
-.faux__refresh-link {
-  color: #666;
-  font-size: 14px;
-  text-decoration: none;
-}
-
-.faux__refresh-link:hover {
-  text-decoration: none;
-  color: @hoverHighlight;
-}
diff --git a/app/addons/components/assets/less/styled-select.less b/app/addons/components/assets/less/styled-select.less
deleted file mode 100644
index 78a83e3..0000000
--- a/app/addons/components/assets/less/styled-select.less
+++ /dev/null
@@ -1,78 +0,0 @@
-// Licensed 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.
-
-.styled-select {
-  width: 200px;
-}
-
-.styled-select label {
-  margin: 0;
-}
-
-.styled-select select {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none;
-  background-color: #e6e6e6;
-  border: 1px solid #b3b3b3;
-  width: 200px;
-  text-indent: 4px;
-  height: 46px;
-  padding-right: 35px;
-  color: #333;
-}
-
-//bug in firefox for text-indent
-@-moz-document url-prefix() {
-  .styled-select  select {
-    text-indent: 0px;
-  }
-}
-
-.styled-select select:-moz-focusring {
-  color: transparent;
-  text-shadow: 0 0 0 #000;
-}
-
-.styled-select select::-ms-expand {
-  display: none;
-}
-
-.styled-select-icon {
-  pointer-events: none;
-  position: absolute;
-  right: 10px;
-  top: 12px;
-  color: #333;
-}
-
-.styled-select-hover-icon {
-  pointer-events: none;
-  position: absolute;
-  right: 10px;
-  top: 12px;
-  color: @hoverHighlight;
-  display: none;
-  z-index: 30;
-}
-
-//this is a litte css trick to create a hover effect for the triangle. We can't use the normal hover event because we
-//need to set pointer-events to none so that a click on the triangle is actually a click on the select dropdown
-.styled-select:hover {
-  .styled-select-hover-icon {
-    display: inline;
-  }
-
-  .styled-select-icon {
-    display: none;
-  }
-}
diff --git a/app/addons/components/assets/less/tab-element.less b/app/addons/components/assets/less/tab-element.less
deleted file mode 100644
index 63060d3..0000000
--- a/app/addons/components/assets/less/tab-element.less
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/mixins.less";
-
-.component-tab-element-wrapper {
-  margin-left: 0;
-  padding-left: 0;
-  margin-bottom: 0;
-  height: 60px;
-  background-color: #CBCBCB;
-  padding-left: 20px;
-  overflow: hidden;
-  width: 100%;
-  min-width: 770px;
-}
-
-.component-tab-list-element {
-  list-style-type: none;
-}
-
-.component-tab-element {
-  background-color: #eee;
-  margin-top: 10px;
-  margin-right: 5px;
-  margin-bottom: -1px;
-  float: left;
-  list-style-type: none;
-  line-height: 40px;
-
-  input {
-    display: none;
-  }
-
-  label {
-    margin-right: 0;
-    margin-bottom: 0;
-    line-height: 25px;
-    .noselect()
-  }
-
-  .tab-element-content {
-    padding: 8px 12px 12px 12px;
-  }
-
-  .tab-element-indicator-wrapper {
-    height: 5px;
-  }
-
-  .tab-element-badge {
-    display: inline-block;
-    min-width: 10px;
-    padding: 3px 7px;
-    line-height: 1;
-    color: #fff;
-    text-align: center;
-    white-space: nowrap;
-    vertical-align: middle;
-    background-color: @linkColorHover;
-    border-radius: 10px;
-    margin-left: 0.25rem;
-    font-size: 0.75rem;
-  }
-
-  .tab-element-indicator {
-    height: 0px;
-    transition: all .25s linear;
-  }
-
-  &.tab-element-checked .tab-element-indicator {
-    height: 5px;
-    background-color: @linkColorHover;
-  };
-
-  &.tab-element-checked {
-    background-color: #fff;
-    label {
-      cursor: default;
-      pointer-events: none;
-    }
-  }
-
-  &.tab-element-checked .tab-element-content {
-    font-weight: bold;
-  }
-
-  transition: all .25s linear;
-
-  &:hover {
-    background-color: #fff;
-    color: @linkColorHover;
-  };
-
-  &.tab-element-checked .tab-element-content:hover {
-    color: initial;
-  };
-
-  &.tab-element-checked:hover {
-    color: initial;
-  };
-
-  &:hover .tab-element-indicator {
-    height: 5px;
-    background-color: @linkColorHover;
-  };
-}
diff --git a/app/addons/components/assets/less/tab-window-wrapper.less b/app/addons/components/assets/less/tab-window-wrapper.less
deleted file mode 100644
index 5c2da30..0000000
--- a/app/addons/components/assets/less/tab-window-wrapper.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// Licensed 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.
-
-#dashboard-content > .tab__wrapper {
-  padding: 0;
-}
-
-.tab__container > div {
-	padding: 20px;
-}
\ No newline at end of file
diff --git a/app/addons/components/base.js b/app/addons/components/base.js
deleted file mode 100644
index 47789ef..0000000
--- a/app/addons/components/base.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Licensed 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.
-
-import "./assets/less/components.less";
-
-export default {
-  initialize () {}
-};
diff --git a/app/addons/components/components/accordion.js b/app/addons/components/components/accordion.js
deleted file mode 100644
index 48de9af..0000000
--- a/app/addons/components/components/accordion.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse } from 'react-bootstrap';
-import classnames from 'classnames';
-
-export const Accordion = (props) => {
-  const { children, className, style } = props;
-  const classNames = classnames('faux--accordion', className);
-  return (
-    <ul className={classNames} style={style}>
-      {children}
-    </ul>
-  );
-};
-
-export class AccordionItem extends React.Component {
-  static propTypes = {
-    title: PropTypes.string.isRequired
-  };
-
-  static defaultProps = {
-    onClick: () => { }
-  };
-
-  state = {
-    open: false
-  };
-
-  handleClick = (event) => {
-    const newOpen = !this.state.open;
-    this.setState({ open: newOpen });
-    this.props.onClick({ isOpen: newOpen, event });
-  };
-
-  render() {
-    const { children, title } = this.props;
-    const icon = this.state.open ? 'fonticon-down-open' : 'fonticon-right-open';
-    const contentClassNames = classnames(
-      'faux--accordion__item-content', 'collapse',
-      {in: this.state.open}
-    );
-
-    return (
-      <li
-        className='faux--accordion__item'
-        onClick={this.handleClick}>
-        <button
-          type="button"
-          className={`faux--accordion__item-header`}
-          onClick={this.handleClick}>
-          <i className={icon}></i>
-          <span>{title}</span>
-        </button>
-        <Collapse in={this.state.open}>
-          <div className={contentClassNames}>
-            { children }
-          </div>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/components/components/apibar.js b/app/addons/components/components/apibar.js
deleted file mode 100644
index 83b44e8..0000000
--- a/app/addons/components/components/apibar.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const JSONLink = ({endpoint}) => {
-  if (!endpoint) {
-    return null;
-  }
-
-  return (
-    <div className="faux__jsonlink">
-      <a data-bypass={true} className="faux__jsonlink-link" href={endpoint} target="_blank" rel="noopener noreferrer">
-        <span className="faux__jsonlink-link-brackets">{'{\u00a0}'}</span>
-        <span className="faux__jsonlink-link-label">JSON</span>
-      </a>
-    </div>
-  );
-};
-
-export const DocLink = ({docURL}) => {
-  if (!docURL) {
-    return null;
-  }
-
-  return (
-    <div className="faux__doclink">
-      <a data-bypass="true" href={docURL} target="_blank" rel="noopener noreferrer" className="faux__doclink-link">
-        <i className="icon fonticon-bookmark"></i>
-      </a>
-    </div>
-  );
-};
diff --git a/app/addons/components/components/badge.js b/app/addons/components/components/badge.js
deleted file mode 100644
index 47dd2e5..0000000
--- a/app/addons/components/components/badge.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class BadgeList extends React.Component {
-  static propTypes = {
-    elements: PropTypes.array.isRequired,
-    removeBadge: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    getLabel (el) {
-      return el;
-    },
-
-    getId (el) {
-      return el;
-    }
-  };
-
-  getBadges = () => {
-    return this.props.elements.map(function (el, i) {
-      return <Badge
-        label={this.props.getLabel(el)}
-        key={i}
-        id={el}
-        remove={this.removeBadge} />;
-    }.bind(this));
-  };
-
-  removeBadge = (label, el) => {
-    this.props.removeBadge(label, el);
-  };
-
-  render() {
-    return (
-      <ul className="component-badgelist">
-        {this.getBadges()}
-      </ul>
-    );
-  }
-}
-
-export class Badge extends React.Component {
-  static propTypes = {
-    label: PropTypes.string.isRequired,
-    remove: PropTypes.func.isRequired
-  };
-
-  remove = (e) => {
-    e.preventDefault();
-    this.props.remove(this.props.label, this.props.id);
-  };
-
-  render() {
-    return (
-      <li className="component-badge">
-        <span className="label label-info">{this.props.label}</span>
-        <a
-          href="#"
-          className="label label-info remove-filter"
-          onClick={this.remove} data-bypass="true"
-        >
-          &times;
-        </a>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/components/components/beautify.js b/app/addons/components/components/beautify.js
deleted file mode 100644
index 79f4df9..0000000
--- a/app/addons/components/components/beautify.js
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed 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.
-import React from "react";
-import ReactDOM from "react-dom";
-import beautifyHelper from "../../../../assets/js/plugins/beautify";
-import {Tooltip, OverlayTrigger} from 'react-bootstrap';
-
-const helper = beautifyHelper.js_beautify ? beautifyHelper.js_beautify : beautifyHelper;
-
-export class Beautify extends React.Component {
-  noOfLines = () => {
-    return this.props.code.split(/\r\n|\r|\n/).length;
-  };
-
-  canBeautify = () => {
-    return this.noOfLines() === 1;
-  };
-
-  beautify = (event) => {
-    event.preventDefault();
-    var beautifiedCode = helper(this.props.code);
-    this.props.beautifiedCode(beautifiedCode);
-  };
-
-  getTooltip = () => {
-    return (
-      <Tooltip id="tooltip">
-      Switch to editable code format.
-      </Tooltip>
-    );
-  };
-
-  render() {
-    if (!this.canBeautify()) {
-      return null;
-    }
-
-    const tooltip = this.getTooltip();
-
-    return (
-      <OverlayTrigger placement="right" overlay={tooltip}>
-        <button
-          onClick={this.beautify}
-          className="beautify beautify_map btn btn-primary btn-small beautify-tooltip"
-          type="button"
-        >
-          Format Code
-        </button>
-      </OverlayTrigger>
-    );
-  }
-}
diff --git a/app/addons/components/components/bulkaction.js b/app/addons/components/components/bulkaction.js
deleted file mode 100644
index fc63a81..0000000
--- a/app/addons/components/components/bulkaction.js
+++ /dev/null
@@ -1,108 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {OverlayTrigger, Popover} from "react-bootstrap";
-
-export class BulkActionComponent extends React.Component {
-  static propTypes = {
-    hasSelectedItem: PropTypes.bool.isRequired,
-    removeItem: PropTypes.func.isRequired,
-    selectAll: PropTypes.func,
-    toggleSelect: PropTypes.func.isRequired,
-    isChecked: PropTypes.bool.isRequired,
-    disabled: PropTypes.bool
-  };
-
-  static defaultProps = {
-    disabled: false,
-    title: 'Select rows that can be...',
-    bulkIcon: 'fonticon-trash',
-    buttonTitle: 'Delete all selected',
-    dropdownContentText: 'Deleted',
-    enableOverlay: false
-  };
-
-  render() {
-    return (
-      <div className="bulk-action-component">
-        <div className="bulk-action-component-selector-group">
-          {this.getMasterSelector()}
-          {this.getMultiSelectOptions()}
-        </div>
-      </div>
-    );
-  }
-
-  getMultiSelectOptions = () => {
-    if (!this.props.hasSelectedItem) {
-      return null;
-    }
-
-    return (
-      <button
-        onClick={this.props.removeItem}
-        className={'fonticon ' + this.props.bulkIcon}
-        title={this.props.buttonTitle} />
-    );
-  };
-
-  getPopupContent = () => {
-    return (
-      <ul className="bulk-action-component-popover-actions">
-        <li onClick={this.selectAll} >
-          <i className="icon fonticon-cancel"></i> {this.props.dropdownContentText}
-        </li>
-      </ul>
-    );
-  };
-
-  selectAll = () => {
-    this.bulkActionPopover.hide();
-    this.props.selectAll();
-  };
-
-  getOverlay = () => {
-    return (
-      <OverlayTrigger
-        ref={node => this.bulkActionPopover = node}
-        trigger="click"
-        placement="bottom"
-        rootClose={true}
-        overlay={
-          <Popover id="bulk-action-component-popover" title={this.props.title}>
-            {this.getPopupContent()}
-          </Popover>
-        }>
-        <div className="arrow-button">
-          <i className="fonticon fonticon-play"></i>
-        </div>
-      </OverlayTrigger>
-    );
-  };
-
-  getMasterSelector = () => {
-    return (
-      <div className="bulk-action-component-panel">
-        <input type="checkbox"
-          checked={this.props.isChecked}
-          onChange={this.props.toggleSelect}
-          disabled={this.props.disabled} />
-        {this.props.enableOverlay ? <div className="separator"></div> : null}
-        {this.props.enableOverlay ? this.getOverlay() : null}
-      </div>
-    );
-  };
-}
diff --git a/app/addons/components/components/codeeditor.js b/app/addons/components/components/codeeditor.js
deleted file mode 100644
index ca7a9e3..0000000
--- a/app/addons/components/components/codeeditor.js
+++ /dev/null
@@ -1,380 +0,0 @@
-// Licensed 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.
-import React from "react";
-import FauxtonAPI from "../../../core/api";
-import ace from "brace";
-import "brace/ext/searchbox";
-import {StringEditModal} from './stringeditmodal';
-
-require('brace/mode/javascript');
-require('brace/mode/json');
-require('brace/theme/idle_fingers');
-
-export class CodeEditor extends React.Component {
-  static defaultProps = {
-    id: 'code-editor',
-    mode: 'javascript',
-    theme: 'idle_fingers',
-    fontSize: 13,
-
-    // this sets the default value for the editor. On the fly changes are stored in state in this component only. To
-    // change the editor content after initial construction use CodeEditor.setValue()
-    defaultCode: '',
-    disabled: false,
-    showGutter: true,
-    highlightActiveLine: true,
-    showPrintMargin: false,
-    autoScrollEditorIntoView: true,
-    autoFocus: false,
-    stringEditModalEnabled: false,
-
-    // these two options create auto-resizeable code editors, with a maximum number of lines
-    setHeightToLineCount: false,
-    maxLines: 10,
-    minLines: 11, // show double digits in sidebar
-
-    // optional editor key commands (e.g. specific save action)
-    editorCommands: [],
-
-    // notifies users that there is unsaved changes in the editor when navigating away from the page
-    notifyUnsavedChanges: false,
-
-    // an optional array of ignorable Ace errors. Lets us filter out errors based on context
-    ignorableErrors: [],
-
-    // un-Reacty, but the code editor is a self-contained component and it's helpful to be able to tie into
-    // editor specific events like content changes and leaving the editor
-    change () {},
-    blur () {}
-  };
-
-  state = {
-    originalCode: this.props.defaultCode,
-
-    // these are all related to the (optional) string edit modal
-    stringEditModalVisible: false,
-    stringEditIconVisible: false,
-    stringEditIconStyle: {},
-    stringEditModalValue: ''
-  };
-
-  hasChanged = () => {
-    return !_.isEqual(this.state.originalCode, this.getValue());
-  };
-
-  clearChanges = () => {
-    this.setState({
-      originalCode: this.getValue()
-    });
-  };
-
-  setupAce = (props, shouldUpdateCode) => {
-    this.editor = ace.edit(this.ace);
-
-    // see https://github.com/ajaxorg/ace/issues/36 don't steal browser's default keybinding
-    this.editor.commands.bindKeys(
-      {
-        "Ctrl-L|Command-L": null,
-        "Ctrl-Shift-L|Command-Shift-L": "gotoline"
-      }
-    );
-
-    // suppresses an Ace editor error
-    this.editor.$blockScrolling = Infinity;
-
-    if (shouldUpdateCode) {
-      this.setValue(props.defaultCode);
-    }
-
-    this.editor.setShowPrintMargin(props.showPrintMargin);
-    this.editor.autoScrollEditorIntoView = props.autoScrollEditorIntoView;
-
-    this.editor.setOption('highlightActiveLine', this.props.highlightActiveLine);
-
-    if (this.props.setHeightToLineCount) {
-      this.setHeightToLineCount();
-    }
-
-    if (this.props.ignorableErrors) {
-      this.removeIgnorableAnnotations();
-    }
-
-    this.addCommands();
-    this.editor.getSession().setMode('ace/mode/' + props.mode);
-    this.editor.setTheme('ace/theme/' + props.theme);
-    this.editor.setFontSize(props.fontSize);
-    this.editor.getSession().setTabSize(2);
-    this.editor.getSession().setUseSoftTabs(true);
-
-    if (this.props.autoFocus) {
-      this.editor.focus();
-    }
-    this.editor.setReadOnly(props.disabled);
-  };
-
-  addCommands = () => {
-    _.each(this.props.editorCommands, (command) => {
-      this.editor.commands.addCommand(command);
-    });
-  };
-
-  setupEvents = () => {
-    this.editor.on('blur', _.bind(this.onBlur, this));
-    this.editor.on('change', _.bind(this.onContentChange, this));
-
-    if (this.props.stringEditModalEnabled) {
-      this.editor.on('changeSelection', _.bind(this.showHideEditStringGutterIcon, this));
-      this.editor.getSession().on('changeBackMarker', _.bind(this.showHideEditStringGutterIcon, this));
-      this.editor.getSession().on('changeScrollTop', _.bind(this.updateEditStringGutterIconPosition, this));
-    }
-
-    if (this.props.notifyUnsavedChanges) {
-      window.addEventListener('beforeunload', this.quitWarningMsg);
-      FauxtonAPI.beforeUnload('editor_' + this.props.id, this.quitWarningMsg);
-    }
-  };
-
-  onBlur = () => {
-    this.props.blur(this.getValue());
-  };
-
-  onContentChange = () => {
-    if (this.props.setHeightToLineCount) {
-      this.setHeightToLineCount();
-    }
-    this.props.change(this.getValue());
-  };
-
-  quitWarningMsg = () => {
-    if (this.hasChanged()) {
-      return 'Your changes have not been saved. Click Cancel to return to the document, or OK to proceed.';
-    }
-  };
-
-  removeEvents = () => {
-    if (this.props.notifyUnsavedChanges) {
-      window.removeEventListener('beforeunload', this.quitWarningMsg);
-      FauxtonAPI.removeBeforeUnload('editor_' + this.props.id);
-    }
-  };
-
-  setHeightToLineCount = () => {
-    var numLines = this.editor.getSession().getDocument().getLength();
-    var maxLines = (numLines > this.props.maxLines) ? this.props.maxLines : numLines;
-    this.editor.setOptions({
-      maxLines: maxLines,
-      minLines: this.props.minLines
-    });
-  };
-
-  componentDidMount() {
-    this.setupAce(this.props, true);
-    this.setupEvents();
-
-    if (this.props.autoFocus) {
-      this.editor.focus();
-    }
-  }
-
-  componentWillUnmount() {
-    this.removeEvents();
-    this.editor.destroy();
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    this.setupAce(nextProps, false);
-  }
-
-  getAnnotations = () => {
-    return this.editor.getSession().getAnnotations();
-  };
-
-  isIgnorableError = (msg) => {
-    return _.includes(this.props.ignorableErrors, msg);
-  };
-
-  removeIgnorableAnnotations = () => {
-    var isIgnorableError = this.isIgnorableError;
-    this.editor.getSession().on('changeAnnotation', function () {
-      var annotations = this.editor.getSession().getAnnotations();
-      var newAnnotations = _.reduce(annotations, function (annotations, error) {
-        if (!isIgnorableError(error.raw)) {
-          annotations.push(error);
-        }
-        return annotations;
-      }, []);
-
-      if (annotations.length !== newAnnotations.length) {
-        this.editor.getSession().setAnnotations(newAnnotations);
-      }
-    }.bind(this));
-  };
-
-  showHideEditStringGutterIcon = () => {
-    if (this.hasErrors() || !this.parseLineForStringMatch()) {
-      this.setState({ stringEditIconVisible: false });
-      return false;
-    }
-
-    this.setState({
-      stringEditIconVisible: true,
-      stringEditIconStyle: {
-        top: this.getGutterIconPosition()
-      }
-    });
-
-    return true;
-  };
-
-  updateEditStringGutterIconPosition = () => {
-    if (!this.state.stringEditIconVisible) {
-      return;
-    }
-    this.setState({
-      stringEditIconStyle: {
-        top: this.getGutterIconPosition()
-      }
-    });
-  };
-
-  getGutterIconPosition = () => {
-    var rowHeight = this.getRowHeight();
-    var scrollTop = this.editor.session.getScrollTop();
-    var positionFromTop = (rowHeight * this.documentToScreenRow(this.getSelectionStart().row)) - scrollTop;
-    return positionFromTop + 'px';
-  };
-
-  parseLineForStringMatch = () => {
-    const selStart = this.getSelectionStart().row;
-    const selEnd   = this.getSelectionEnd().row;
-
-    // one JS(ON) string can't span more than one line - we edit one string, so ensure we don't select several lines
-    if (selStart >= 0 && selEnd >= 0 && selStart === selEnd && this.isRowExpanded(selStart)) {
-      const editLine = this.getLine(selStart);
-      const editMatch = editLine.match(/^([ \t]*)("[^"]*["][ \t]*:[ \t]*)?(["|'].*"[ \t]*,?[ \t]*)$/);
-      if (editMatch) {
-        return editMatch;
-      }
-    }
-    return false;
-  };
-
-  openStringEditModal = () => {
-    const matches = this.parseLineForStringMatch();
-    let string = matches[3].trim();
-    // Removes trailing comma and surrouding spaces
-    if (string.substring(string.length - 1) === ',') {
-      string = string.substring(0, string.length - 1).trim();
-    }
-    // Removes surrouding quotes
-    string = string.substring(1, string.length - 1);
-
-    this.setState({
-      stringEditModalVisible: true,
-      stringEditModalValue: string
-    });
-  };
-
-  saveStringEditModal = (newString) => {
-    // replace the string on the selected line
-    var line = this.parseLineForStringMatch();
-    var indent = line[1] || '',
-        key = line[2] || '',
-        originalString = line[3],
-        comma = '';
-    if (originalString.substring(originalString.length - 1) === ',') {
-      comma = ',';
-    }
-    this.replaceCurrentLine(indent + key + JSON.stringify(newString) + comma + '\n');
-    this.closeStringEditModal();
-  };
-
-  closeStringEditModal = () => {
-    this.setState({
-      stringEditModalVisible: false
-    });
-  };
-
-  hasErrors = () => {
-    return !_.every(this.getAnnotations(), (error) => {
-      return this.isIgnorableError(error.raw);
-    });
-  };
-
-  setReadOnly = (readonly) => {
-    this.editor.setReadOnly(readonly);
-  };
-
-  setValue = (code, lineNumber) => {
-    lineNumber = lineNumber ? lineNumber : -1;
-    this.editor.setValue(code, lineNumber);
-  };
-
-  getValue = () => {
-    return this.editor.getValue();
-  };
-
-  getEditor = () => {
-    return this;
-  };
-
-  getLine = (lineNum) => {
-    return this.editor.session.getLine(lineNum);
-  };
-
-  getSelectionStart = () => {
-    return this.editor.getSelectionRange().start;
-  };
-
-  getSelectionEnd = () => {
-    return this.editor.getSelectionRange().end;
-  };
-
-  getRowHeight = () => {
-    return this.editor.renderer.layerConfig.lineHeight;
-  };
-
-  isRowExpanded = (row) => {
-    return !this.editor.getSession().isRowFolded(row);
-  };
-
-  documentToScreenRow = (row) => {
-    return this.editor.getSession().documentToScreenRow(row, 0);
-  };
-
-  replaceCurrentLine = (replacement) => {
-    this.editor.getSelection().selectLine();
-    this.editor.insert(replacement);
-    this.editor.getSelection().moveCursorUp();
-  };
-
-  render() {
-    return (
-      <div>
-        <div ref={node => this.ace = node} className="js-editor" id={this.props.id}></div>
-        <button ref={node => this.stringEditIcon = node}
-          className="btn string-edit"
-          title="Edit string"
-          disabled={!this.state.stringEditIconVisible || this.props.disabled}
-          style={this.state.stringEditIconStyle} onClick={this.openStringEditModal}>
-          <i className="icon icon-edit"></i>
-        </button>
-        <StringEditModal
-          ref={node => this.stringEditModal = node}
-          visible={this.state.stringEditModalVisible}
-          value={this.state.stringEditModalValue}
-          onSave={this.saveStringEditModal}
-          onClose={this.closeStringEditModal} />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/codeeditorpanel.js b/app/addons/components/components/codeeditorpanel.js
deleted file mode 100644
index 825138d..0000000
--- a/app/addons/components/components/codeeditorpanel.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// Licensed 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.
-import React from "react";
-import ReactDOM from "react-dom";
-import {CodeEditor} from './codeeditor';
-import {Beautify} from './beautify';
-import {ZenModeOverlay} from './zenmodeoverlay';
-
-
-// list of JSHINT errors to ignore: gets around problem of anonymous functions not being valid
-const ignorableErrors = [
-  'Missing name in function declaration.',
-  "['{a}'] is better written in dot notation."
-];
-
-/**
- * A pre-packaged JS editor panel for use on the Edit Index / Mango pages. Includes options for a title, zen mode
- * icon and beautify button.
- */
-export class CodeEditorPanel extends React.Component {
-  static defaultProps = {
-    id: 'code-editor',
-    className: '',
-    defaultCode: '',
-    title: '',
-    docLink: '',
-    allowZenMode: true,
-    blur () {}
-  };
-
-  getStoreState = () => {
-    return {
-      zenModeEnabled: false,
-      code: this.props.defaultCode
-    };
-  };
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (nextProps.defaultCode !== this.props.defaultCode) {
-      this.setState({ code: nextProps.defaultCode });
-    }
-  }
-
-  getZenModeIcon = () => {
-    if (this.props.allowZenMode) {
-      return <span className="fonticon fonticon-resize-full zen-editor-icon" title="Enter Zen mode" onClick={this.enterZenMode}></span>;
-    }
-  };
-
-  getDocIcon = () => {
-    if (this.props.docLink) {
-      return (
-        <a className="help-link"
-          data-bypass="true"
-          href={this.props.docLink}
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <i className="icon-question-sign"></i>
-        </a>
-      );
-    }
-  };
-
-  getZenModeOverlay = () => {
-    if (this.state.zenModeEnabled) {
-      return (
-        <ZenModeOverlay
-          defaultCode={this.state.code}
-          mode={this.props.mode}
-          ignorableErrors={ignorableErrors}
-          onExit={this.exitZenMode} />
-      );
-    }
-  };
-
-  enterZenMode = () => {
-    this.setState({
-      zenModeEnabled: true,
-      code: this.codeEditor.getValue()
-    });
-  };
-
-  exitZenMode = (content) => {
-    this.setState({ zenModeEnabled: false });
-    this.getEditor().setValue(content);
-  };
-
-  getEditor = () => {
-    return this.codeEditor;
-  };
-
-  getValue = () => {
-    return this.getEditor().getValue();
-  };
-
-  beautify = (code) => {
-    this.setState({ code: code });
-    this.getEditor().setValue(code);
-  };
-
-  update = () => {
-    this.getEditor().setValue(this.state.code);
-  };
-
-  state = this.getStoreState();
-
-  render() {
-    var classes = 'control-group';
-    if (this.props.className) {
-      classes += ' ' + this.props.className;
-    }
-    return (
-      <div className={classes}>
-        <label>
-          <span>{this.props.title}</span>
-          {this.getDocIcon()}
-          {this.getZenModeIcon()}
-        </label>
-        <CodeEditor
-          id={this.props.id}
-          ref={node => this.codeEditor = node}
-          mode="javascript"
-          defaultCode={this.state.code}
-          showGutter={true}
-          ignorableErrors={ignorableErrors}
-          setHeightToLineCount={true}
-          maxLines={10000}
-          blur={this.props.blur}
-        />
-        <Beautify code={this.state.code} beautifiedCode={this.beautify} />
-        {this.getZenModeOverlay()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/confirmbutton.js b/app/addons/components/components/confirmbutton.js
deleted file mode 100644
index 1846592..0000000
--- a/app/addons/components/components/confirmbutton.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class ConfirmButton extends React.Component {
-  static propTypes = {
-    showIcon: PropTypes.bool,
-    id: PropTypes.string,
-    customIcon: PropTypes.string,
-    style: PropTypes.object,
-    buttonType: PropTypes.string,
-    'data-id': PropTypes.string,
-    onClick: PropTypes.func,
-    disabled: PropTypes.bool,
-  };
-
-  static defaultProps = {
-    disabled: false,
-    showIcon: true,
-    customIcon: 'fonticon-ok-circled',
-    buttonType: 'btn-primary',
-    style: {},
-    'data-id': null,
-    onClick () { }
-  };
-
-  getIcon = () => {
-    if (!this.props.showIcon) {
-      return null;
-    }
-    return (
-      <i className={"icon " + this.props.customIcon} />
-    );
-  };
-
-  render() {
-    const { onClick, buttonType, id, style, text, disabled } = this.props;
-    return (
-      <button
-        onClick={onClick}
-        type="submit"
-        disabled={disabled}
-        data-id={this.props['data-id']}
-        className={'btn save ' + buttonType}
-        id={id}
-        style={style}
-      >
-        {this.getIcon()}
-        {text}
-      </button>
-    );
-  }
-}
diff --git a/app/addons/components/components/copy.js b/app/addons/components/components/copy.js
deleted file mode 100644
index 85b9f42..0000000
--- a/app/addons/components/components/copy.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import Clipboard from 'clipboard';
-
-let clipboard;
-
-// Locates the specific element on the DOM, configures the clipboard, and
-// sets the callback on 'success' (usually a Fauxton notification).
-export const initializeClipboard = (uniqueKey, cb) => {
-  clipboard = new Clipboard('#copy-' + uniqueKey);
-  clipboard.on('success', function() {
-    cb();
-  });
-};
-
-// Cleans up the fake elements left around by clipboard.js
-export const destroyClipboard = () => {
-  clipboard.destroy();
-};
-
-export class Copy extends React.Component {
-  componentDidMount () {
-    initializeClipboard(this.props.uniqueKey, this.props.onClipboardClick);
-  }
-
-  componentWillUnmount () {
-    destroyClipboard();
-  }
-
-  // Necessary for copy elements that are not unmounted even though they are
-  // no longer visible (ex. Notification  rows in the notification center).
-  componentDidUpdate () {
-    initializeClipboard(this.props.uniqueKey, this.props.onClipboardClick);
-  }
-
-  getClipboardElement () {
-    if (this.props.displayType === 'icon') {
-      return (<i aria-hidden="true" className="fontawesome icon-paste"></i>);
-    }
-    return this.props.textDisplay;
-  }
-
-  getClipboardButton () {
-    const btnClasses = this.props.displayType === 'input' ? "btn copy-button" : "copy" + " clipboard-copy-element";
-    return (
-      <button
-        aria-label="Copy to Clipboard"
-        className={btnClasses}
-        data-clipboard-text={this.props.text}
-        title={this.props.title}
-        id={"copy-" + this.props.uniqueKey}
-      >
-        {this.getClipboardElement()}
-      </button>
-    );
-  }
-
-  render () {
-    if (this.props.displayType === 'input') {
-      return (
-        <p>
-          <input
-            type="text"
-            className="input-xxlarge text-field-to-copy"
-            readOnly
-            value={this.props.text} />
-          {this.getClipboardButton()}
-        </p>
-      );
-    }
-    return (
-      this.getClipboardButton()
-    );
-  }
-}
-
-Copy.defaultProps = {
-  displayType: 'icon',
-  textDisplay: 'Copy',
-  title: 'Copy to clipboard',
-  onClipboardClick: function () { }
-};
-
-Copy.propTypes = {
-  text: PropTypes.string.isRequired,
-  displayType: PropTypes.oneOf(['icon', 'text', 'input']),
-  uniqueKey: PropTypes.string.isRequired,
-  onClipboardClick: PropTypes.func.isRequired
-};
diff --git a/app/addons/components/components/deletedatabasemodal.js b/app/addons/components/components/deletedatabasemodal.js
deleted file mode 100644
index 004ad68..0000000
--- a/app/addons/components/components/deletedatabasemodal.js
+++ /dev/null
@@ -1,119 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {Modal} from "react-bootstrap";
-import Actions from "../actions";
-
-export class DeleteDatabaseModal extends React.Component {
-  static propTypes = {
-    showHide: PropTypes.func.isRequired,
-    modalProps: PropTypes.object,
-    onSuccess: PropTypes.func
-  };
-
-  state = {
-    inputValue: '',
-    disableSubmit: true
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-
-    this.setState({
-      inputValue: '',
-      disableSubmit: true
-    });
-
-    this.props.showHide({showModal: false});
-  };
-
-  open = () => {
-    this.props.showHide({showModal: true});
-  };
-
-  getDatabaseName = () => {
-    return this.props.modalProps.dbId.trim();
-  };
-
-  onInputChange = (e) => {
-    const val = e.target.value.trim();
-
-    this.setState({
-      inputValue: val
-    });
-
-    this.setState({
-      disableSubmit: val !== this.getDatabaseName()
-    });
-  };
-
-  onDeleteClick = (e) => {
-    e.preventDefault();
-
-    Actions.deleteDatabase(this.getDatabaseName(), this.props.onSuccess);
-  };
-
-  onInputKeypress = (e) => {
-    if (e.keyCode === 13 && this.state.disableSubmit !== true) {
-      Actions.deleteDatabase(this.getDatabaseName(), this.props.onSuccess);
-    }
-  };
-
-  render() {
-    var isSystemDatabase = this.props.modalProps.isSystemDatabase;
-    var showDeleteModal = this.props.modalProps.showDeleteModal;
-    var dbId = this.props.modalProps.dbId;
-
-    var warning = isSystemDatabase ? (
-      <p style={{color: '#d14'}} className="warning">
-        <b>You are about to delete a system database, be careful!</b>
-      </p>
-    ) : null;
-
-    return (
-      <Modal dialogClassName="delete-db-modal" show={showDeleteModal} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Confirm Deletion</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {warning}
-          <p>
-            Warning: This action will permanently delete <code>{dbId}</code>.
-            To confirm the deletion of the database and all of the
-            database&apos;s documents, you must enter the database&apos;s name.
-          </p>
-          <input
-            type="text"
-            className="input-block-level"
-            onKeyUp={this.onInputKeypress}
-            onChange={this.onInputChange}
-            autoFocus={true} />
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" onClick={this.close} data-bypass="true" className="cancel-link">Cancel</a>
-          <button
-            disabled={this.state.disableSubmit}
-            onClick={this.onDeleteClick}
-            className="btn btn-danger delete">
-            <i className="icon icon-trash" /> Delete Database
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/components/components/document.js b/app/addons/components/components/document.js
deleted file mode 100644
index abb6a68..0000000
--- a/app/addons/components/components/document.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// Licensed 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../../documents/constants';
-import Helpers from '../../documents/helpers';
-
-export class Document extends React.Component {
-  static propTypes = {
-    docIdentifier: PropTypes.string.isRequired,
-    docType: PropTypes.string,
-    docChecked: PropTypes.func.isRequired,
-    truncate: PropTypes.bool,
-    maxRows: PropTypes.number,
-    resultsStyle: PropTypes.object
-  };
-
-  static defaultProps = {
-    truncate: true,
-    maxRows: 500,
-    resultsStyle: {
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-  };
-
-  onChange = (e) => {
-    e.preventDefault();
-    this.props.docChecked(this.props.doc.id, this.props.doc._rev);
-  };
-
-  getUrlFragment = () => {
-    if (!this.props.children) {
-      return '';
-    }
-
-    return (
-      <div className="doc-edit-symbol pull-right" title="Edit document">
-        {this.props.children}
-      </div>
-    );
-  };
-
-  getExtensionIcons = () => {
-    var extensions = FauxtonAPI.getExtensions('DocList:icons');
-    return _.map(extensions, (Extension, i) => {
-      return (<Extension doc={this.props.doc} key={i} />);
-    });
-  };
-
-  getDocumentTypeIcon = () => {
-    if (this.props.docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      if (this.props.docContent.includes(`"partitioned": true`)) {
-        return <i className="fonticon-documents" title="Partitioned index"></i>;
-      }
-      return <i className="fonticon-document" title="Global index"></i>;
-    }
-    return null;
-  };
-
-  getCheckbox = () => {
-    if (!this.props.isDeletable) {
-      return <div className="checkbox-dummy"></div>;
-    }
-
-    return (
-      <div className="checkbox inline">
-        <input
-          id={'checkbox-' + this.props.docIdentifier}
-          checked={this.props.checked}
-          data-checked={this.props.checked}
-          type="checkbox"
-          onChange={this.onChange}
-          className="js-row-select" />
-        <label onClick={this.onChange}
-          className="label-checkbox-doclist"
-          htmlFor={'checkbox-' + this.props.docIdentifier} />
-      </div>
-    );
-  };
-
-  onClick = (e) => {
-    this.props.onClick(this.props.docIdentifier, this.props.doc, e);
-  };
-
-  getDocContent = () => {
-    if (_.isEmpty(this.props.docContent)) {
-      return null;
-    }
-
-    // if need be, truncate the document
-    var content = this.props.docContent;
-    var isTruncated = false;
-    if (this.props.truncate) {
-      var result = Helpers.truncateDoc(this.props.docContent, this.props.maxRows);
-      isTruncated = result.isTruncated;
-      content = result.content;
-    }
-    const { fontSize } = this.props.resultsStyle;
-    const classNames = classnames('prettyprint', {
-      'prettyprint--small': fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL,
-      'prettyprint--large': fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE
-    });
-    return (
-      <div className="doc-data">
-        <pre className={classNames}>{content}</pre>
-        {isTruncated ? <div className="doc-content-truncated">(truncated)</div> : null}
-      </div>
-    );
-  };
-
-  render() {
-    return (
-      <div data-id={this.props.docIdentifier} className="doc-row">
-        <div className="custom-inputs">
-          {this.getCheckbox()}
-        </div>
-        <div className="doc-item">
-          <header onClick={this.onClick}>
-            <span className="header-keylabel">
-              {this.getDocumentTypeIcon()}
-              {this.props.keylabel}
-            </span>
-            <span className="header-doc-id">
-              {this.props.header ? '"' + this.props.header + '"' : null}
-            </span>
-            {this.getUrlFragment()}
-            <div className="doc-item-extension-icons pull-right">{this.getExtensionIcons()}</div>
-          </header>
-          {this.getDocContent()}
-        </div>
-        <div className="clearfix"></div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/loadlines.js b/app/addons/components/components/loadlines.js
deleted file mode 100644
index 0fa2b74..0000000
--- a/app/addons/components/components/loadlines.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed 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.
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const LoadLines = () =>
-  <div className="loading-lines">
-    <div id="line1"> </div>
-    <div id="line2"> </div>
-    <div id="line3"> </div>
-    <div id="line4"> </div>
-  </div>;
diff --git a/app/addons/components/components/menudropdown.js b/app/addons/components/components/menudropdown.js
deleted file mode 100644
index 8df4c23..0000000
--- a/app/addons/components/components/menudropdown.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Licensed 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from "react";
-import { Button, Dropdown } from "react-bootstrap";
-import RootCloseWrapper from 'react-overlays/lib/RootCloseWrapper';
-
-export class MenuDropDown extends React.Component {
-  static defaultProps = {
-    icon: 'fonticon-plus-circled',
-    hideArrow: false,
-    toggleType: 'link'
-  };
-
-  static propTypes = {
-    icon: PropTypes.string,
-    hideArrow: PropTypes.bool,
-    links: PropTypes.array.isRequired,
-    toggleType: PropTypes.string.isRequired
-  };
-
-  createSectionLinks = (links) => {
-    if (!links) { return null; }
-
-    return links.map((link, key) => {
-      return this.createEntry(link, key);
-    });
-  };
-
-  createEntry = (link, key) => {
-    return (
-      <li key={key}>
-        <a className={classnames('icon', link.icon, { 'fonticon-placeholder': !link.icon})}
-          data-bypass={link.external ? 'true' : ''}
-          href={link.url}
-          onClick={link.onClick}
-          target={link.external ? '_blank' : ''}>
-          {link.title}
-        </a>
-      </li>
-    );
-  };
-
-  createSectionTitle = (title, key) => {
-    if (!title) {
-      return null;
-    }
-
-    return (
-      <li key={key} className="header-label">{title}</li>
-    );
-  };
-
-  createSection = () => {
-    return this.props.links.map((linkSection, key) => {
-      if (linkSection.title && linkSection.links) {
-        return ([
-          this.createSectionTitle(linkSection.title, 'title_' + key),
-          this.createSectionLinks(linkSection.links)
-        ]);
-      }
-      return this.createEntry(linkSection, 'el' + key);
-    });
-  };
-
-  render() {
-    const menuItems = this.createSection();
-    const arrowClass = this.props.hideArrow ? '' : 'arrow';
-    const CustomMenuToggle = this.props.toggleType === 'button' ? CustomMenuButtonToggle : CustomMenuLinkToggle;
-    return (
-      <Dropdown id="dropdown-menu">
-        <CustomMenuToggle bsRole="toggle" icon={this.props.icon}>
-        </CustomMenuToggle>
-        <CustomMenu bsRole="menu" className={arrowClass}>
-          {menuItems}
-        </CustomMenu>
-      </Dropdown>
-    );
-  }
-}
-
-class CustomMenuButtonToggle extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-    this.handleClick = this.handleClick.bind(this);
-  }
-
-  handleClick(e) {
-    e.preventDefault();
-    this.props.onClick(e);
-  }
-
-  render() {
-    return (
-      <Button
-        onClick={this.handleClick}>
-        <i className={"dropdown-toggle " + this.props.icon}
-          style={{ fontSize: '1rem', boxShadow: '0px 0px 0px' }}>
-        </i>
-        {this.props.children}
-      </Button>
-    );
-  }
-}
-
-class CustomMenuLinkToggle extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-    this.handleClick = this.handleClick.bind(this);
-  }
-
-  handleClick(e) {
-    e.preventDefault();
-    this.props.onClick(e);
-  }
-
-  render() {
-    return (
-      <a className={"dropdown-toggle icon " + this.props.icon}
-        style={{ fontSize: '1rem', boxShadow: '0px 0px 0px' }}
-        onClick={this.handleClick}>
-        {this.props.children}
-      </a>
-    );
-  }
-}
-
-export class CustomMenu extends React.Component {
-  constructor(props, context) {
-    super(props, context);
-  }
-
-  render() {
-    const { children, open, onClose, className } = this.props;
-    return (
-      <RootCloseWrapper disabled={!open} onRootClose={onClose}>
-        <ul className={classnames('dropdown-menu', className)} role="menu" aria-labelledby="dLabel">
-          {children}
-        </ul>
-      </RootCloseWrapper>
-    );
-  }
-}
diff --git a/app/addons/components/components/paddedborderbox.js b/app/addons/components/components/paddedborderbox.js
deleted file mode 100644
index 166e129..0000000
--- a/app/addons/components/components/paddedborderbox.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class PaddedBorderedBox extends React.Component {
-  render() {
-    return (
-      <div className="bordered-box">
-        <div className="padded-box">
-          {this.props.children}
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/polling.js b/app/addons/components/components/polling.js
deleted file mode 100644
index 26859a1..0000000
--- a/app/addons/components/components/polling.js
+++ /dev/null
@@ -1,149 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Slider from 'rc-slider';
-
-let pollIntervalId;
-
-export const clearPollCounter = () => {
-  if (pollIntervalId) {
-    window.clearInterval(pollIntervalId);
-  }
-};
-
-export const resetPollCounter = (time, cb) => {
-  clearPollCounter();
-  pollIntervalId = window.setInterval(cb, time);
-};
-
-const getCountdown = (secsString, units, max, min) => {
-  const secs = parseInt(secsString, 10);
-  if (secs === 0 || secs > max || secs < min) {
-    return 'off';
-  }
-
-  if (secs < 60 && units === 'minute') {
-    return `${secs} seconds`;
-  }
-
-  let displayValue = secs;
-  if (units === 'minute') {
-    displayValue = Math.floor(secs / 60);
-  }
-  return `${displayValue} ${displayValue === 1 ? units : `${units}s`}`;
-};
-
-export class Polling extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      value: this.props.startValue
-    };
-    this.updatePollingFreq = this.updatePollingFreq.bind(this);
-  }
-
-  componentDidMount () {
-    this.setPollingCounter(this.state.value);
-  }
-
-  componentWillUnmount () {
-    clearPollCounter();
-  }
-
-  setPollingCounter (value) {
-    const {min, max, onPoll} = this.props;
-    this.setState({value: value});
-
-    if (value === 0 || value < min || value > max) {
-      clearPollCounter();
-      return;
-    }
-
-    resetPollCounter(value * 1000, () => onPoll());
-  }
-
-  updatePollingFreq (newValue) {
-    this.setPollingCounter(parseInt(newValue, 10));
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (this.props.startValue !== nextProps.startValue) {
-      this.setPollingCounter(nextProps.startValue);
-    }
-  }
-
-  render () {
-    const {
-      stepSize,
-      min,
-      max,
-      valueUnits
-    } = this.props;
-
-    const {value} = this.state;
-
-    const pollValue = getCountdown(value, valueUnits, max, min);
-    const pollStyle = pollValue === 'off' ? 'faux__polling-info-value--off' : 'faux__polling-info-value--active';
-    return (
-      <div className='faux__polling'>
-        <div className='faux__polling-info'>
-          <span className='faux__polling-info-text'>Polling Interval</span>
-          <span className={`faux__polling-info-value faux__polling-info-value ${pollStyle}`}>{pollValue}</span>
-        </div>
-        <Slider
-          className="faux__polling-info-slider"
-          min={min}
-          max={max + stepSize}
-          defaultValue={value}
-          onChange={this.updatePollingFreq}
-        />
-      </div>
-    );
-  }
-}
-
-Polling.defaultProps = {
-  startValue: 0,
-  min: 0,
-  valueUnits: 'minute'
-};
-
-Polling.propTypes = {
-  startValue: PropTypes.number,
-  valueUnits: PropTypes.string,
-  min: PropTypes.number,
-  max: PropTypes.number.isRequired,
-  stepSize: PropTypes.number.isRequired,
-  onPoll: PropTypes.func.isRequired,
-};
-
-export const RefreshBtn = ({refresh}) =>
-  <div className="faux__refresh-btn">
-    <a
-      className="faux__refresh-link"
-      href="#"
-      data-bypass="true"
-      onClick={e => {
-        e.preventDefault();
-        refresh();
-      }}
-    >
-      <i className="faux__refresh-icon fonticon-arrows-cw"></i>
-      Refresh
-    </a>
-  </div>;
-
-RefreshBtn.propTypes = {
-  refresh: PropTypes.func.isRequired
-};
diff --git a/app/addons/components/components/stringeditmodal.js b/app/addons/components/components/stringeditmodal.js
deleted file mode 100644
index df5877d..0000000
--- a/app/addons/components/components/stringeditmodal.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import {Modal} from "react-bootstrap";
-import ace from "brace";
-import Helpers from "../../documents/helpers";
-require('brace/mode/javascript');
-require('brace/mode/json');
-require('brace/theme/idle_fingers');
-
-// this appears when the cursor is over a string. It shows an icon in the gutter that opens the modal.
-export class StringEditModal extends React.Component {
-  static propTypes = {
-    value: PropTypes.string.isRequired,
-    visible: PropTypes.bool.isRequired,
-    onClose: PropTypes.func.isRequired,
-    onSave: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    visible: false,
-    onClose () { },
-    onSave () { }
-  };
-
-  state = {
-    editorInitialized: false
-  };
-
-  initAceEditor = (dom_node) => {
-    this.editor = ace.edit(dom_node);
-    this.editor.$blockScrolling = Infinity; // suppresses an Ace editor error
-    this.editor.setShowPrintMargin(false);
-    this.editor.setOption('highlightActiveLine', true);
-    this.editor.setTheme('ace/theme/idle_fingers');
-    const val = Helpers.parseJSON(this.props.value);
-    this.editor.setValue(val, -1);
-    if (!this.state.editorInitialized) {
-      this.setState({ editorInitialized: true });
-    }
-  };
-
-  closeModal = () => {
-    this.props.onClose();
-  };
-
-  save = () => {
-    this.props.onSave(this.editor.getValue());
-  };
-
-  getSaveBtn = () => {
-    return this.state.editorInitialized && (
-      <button id="string-edit-save-btn" onClick={this.save} className="btn btn-primary save">
-        <i className="fonticon-circle-check"></i> Modify Text
-      </button>);
-  };
-
-  render() {
-    return (
-      <Modal className="string-editor-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Edit Value <span id="string-edit-header"></span></Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <div id="modal-error" className="hide alert alert-error"/>
-          <div id="string-editor-wrapper">
-            <div id="string-editor-container" ref={node => this.initAceEditor(node)} className="doc-code"></div>
-          </div>
-        </Modal.Body>
-        <Modal.Footer>
-          <a className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          { this.getSaveBtn() }
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/components/components/styledselect.js b/app/addons/components/components/styledselect.js
deleted file mode 100644
index 5a4d5c5..0000000
--- a/app/addons/components/components/styledselect.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class StyledSelect extends React.Component {
-  static propTypes = {
-    selectValue: PropTypes.string.isRequired,
-    selectId: PropTypes.string.isRequired,
-    selectChange: PropTypes.func.isRequired
-  };
-
-  render() {
-    return (
-      <div className="styled-select">
-        <label htmlFor={this.props.selectId}>
-          <i className="fonticon-down-dir styled-select-icon"></i>
-          <i className="fonticon-down-dir styled-select-hover-icon"></i>
-          <select
-            value={this.props.selectValue}
-            id={this.props.selectId}
-            className={this.props.selectValue}
-            onChange={this.props.selectChange}
-          >
-            {this.props.selectContent}
-          </select>
-        </label>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/tabelement.js b/app/addons/components/components/tabelement.js
deleted file mode 100644
index 37f1e72..0000000
--- a/app/addons/components/components/tabelement.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export const TabElement = ({selected, text, onChange, iconClass, badgeText}) => {
-
-  const additionalClass = selected ? 'tab-element-checked' : '';
-  let badge = null;
-  if (badgeText) {
-    badge = <span className="tab-element-badge">{badgeText}</span>;
-  }
-  return (
-    <li className={`component-tab-element ${additionalClass}`}>
-
-      <label>
-        <div className="tab-element-indicator-wrapper">
-          <div className="tab-element-indicator"></div>
-        </div>
-        <div className="tab-element-content">
-          <i className={iconClass}></i>
-          <input
-            type="radio"
-            value={text}
-            checked={selected}
-            onChange={onChange} />
-
-          {text}
-          {badge}
-        </div>
-      </label>
-    </li>
-
-  );
-};
-TabElement.propTypes = {
-  selected: PropTypes.bool.isRequired,
-  text: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired,
-  iconClass: PropTypes.string,
-  badgeText: PropTypes.string
-};
-
-export const TabElementWrapper = ({children}) => {
-  return (
-    <ul className="component-tab-element-wrapper">
-      {children}
-    </ul>
-  );
-};
diff --git a/app/addons/components/components/tabwindowwrapper.js b/app/addons/components/components/tabwindowwrapper.js
deleted file mode 100644
index 3a7d4a4..0000000
--- a/app/addons/components/components/tabwindowwrapper.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import FauxtonAPI from '../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TabElement, TabElementWrapper} from './tabelement';
-
-
-export class TabWindowWrapper extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const {selectedTab, tabs} = this.props;
-
-    const elements = tabs.map((tab, i) => {
-
-      return (
-        <TabElement
-          key={i}
-          selected={tab.name === selectedTab}
-          text={tab.name}
-          badgeText={tab.badgeText}
-          onChange={() => { FauxtonAPI.navigate(tab.route, {redirect: true}); }}
-          iconClass="" />
-      );
-    });
-
-    const selectedPage = tabs.reduce((acc, el) => {
-      if (el.name === selectedTab) {
-        return el;
-      }
-      return acc;
-    }, {});
-
-    if (!selectedPage.component) {
-      return null;
-    }
-
-    return (
-      <div className="tab__wrapper">
-        <TabElementWrapper>
-          {elements}
-        </TabElementWrapper>
-
-        <div className="tab__container">
-          <selectedPage.component />
-        </div>
-      </div>
-    );
-  }
-
-}
-
-TabWindowWrapper.propTypes = {
-  tabs: PropTypes.array.isRequired,
-  selectedTab: PropTypes.string.isRequired
-};
diff --git a/app/addons/components/components/throttledreacselect.js b/app/addons/components/components/throttledreacselect.js
deleted file mode 100644
index a5df5e7..0000000
--- a/app/addons/components/components/throttledreacselect.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import ReactSelect from "react-select";
-
-export class ThrottledReactSelectAsync extends React.Component {
-  constructor(props) {
-    super(props);
-    this.lastCall = undefined;
-  }
-
-  wrapThrottler(loadOptions) {
-    if (!loadOptions) {
-      return () => {};
-    }
-    return (id, callback) => {
-      if (this.lastCall) {
-        clearTimeout(this.lastCall);
-      }
-      this.lastCall = setTimeout(() => {
-        loadOptions(id, callback);
-      }, 400);
-    };
-  }
-
-  render() {
-    // wrapThrottler() must be called here to ensure a new
-    // function is created when props.loadOptions is updated
-    const throttledLoadOptions = this.wrapThrottler(
-      this.props.loadOptions
-    ).bind(this);
-    const newProps = {
-      ...this.props,
-      loadOptions: throttledLoadOptions,
-      onBlurResetsInput: false
-    };
-    return <ReactSelect.Async {...newProps} />;
-  }
-}
diff --git a/app/addons/components/components/toggleheaderbutton.js b/app/addons/components/components/toggleheaderbutton.js
deleted file mode 100644
index 6f0a51e..0000000
--- a/app/addons/components/components/toggleheaderbutton.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-
-export class ToggleHeaderButton extends React.Component {
-  static defaultProps = {
-    innerClasses: '',
-    fonticon: '',
-    containerClasses: '',
-    selected: false,
-    title: '',
-    disabled: false,
-    toggleCallback: null,
-    text: '',
-    iconDefaultClass: 'icon'
-  };
-
-  render() {
-    const { iconDefaultClass, fonticon, innerClasses, selected, containerClasses, title, disabled, text, toggleCallback, active } = this.props;
-    const selectedBtnClass = (selected || active) ? 'js-headerbar-togglebutton-selected' : '';
-
-    return (
-      <button
-        title={title}
-        disabled={disabled}
-        onClick={toggleCallback}
-        className={`button ${containerClasses} ${selectedBtnClass}`}
-      >
-        <i className={`${iconDefaultClass} ${fonticon} ${innerClasses}`}></i><span>{text}</span>
-      </button>
-    );
-  }
-}
diff --git a/app/addons/components/components/tray.js b/app/addons/components/components/tray.js
deleted file mode 100644
index e37d18e..0000000
--- a/app/addons/components/components/tray.js
+++ /dev/null
@@ -1,162 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import {Overlay} from 'react-bootstrap';
-import {TransitionMotion, spring} from 'react-motion';
-
-export class TrayContents extends React.Component {
-  static propTypes = {
-    contentVisible: PropTypes.bool.isRequired,
-    closeTray: PropTypes.func.isRequired,
-    onEnter: PropTypes.func,
-    container: PropTypes.object
-  };
-
-  static defaultProps = {
-    onEnter: () => {}
-  };
-
-  constructor (props) {
-    super(props);
-    if (!props.container) {
-      this.container = this;
-    }
-  }
-
-  getChildren = (items) => {
-    const {style} = items[0];
-    const className = "tray show-tray " + this.props.className;
-    return (
-      <div key={'1'} id={this.props.id} style={{opacity: style.opacity, top: style.top + 'px'}} className={className}>
-        {this.props.children}
-      </div>);
-  };
-
-  willEnter = () => {
-    return {
-      opacity: spring(1),
-      top: spring(64)
-    };
-  };
-
-  willLeave = () => {
-    return {
-      opacity: spring(0),
-      top: spring(30)
-    };
-  };
-
-  getDefaultStyles = () => {
-    return [{key: '1', style: {opacity: 0, top: 30}}];
-  };
-
-  getStyles = (prevStyle) => {
-    if (!prevStyle) {
-      return [{
-        key: '1',
-        style: this.willEnter()
-      }];
-    }
-    return prevStyle.map(item => {
-      return {
-        key: '1',
-        style: item.style
-      };
-    });
-  };
-
-  render() {
-    return (
-      <Overlay
-        show={this.props.contentVisible}
-        onHide={this.props.closeTray}
-        placement={"bottom"}
-        container={this.props.container}
-        rootClose={true}
-        onEnter={this.props.onEnter}
-      >
-        <TransitionMotion
-          defaultStyles={this.getDefaultStyles()}
-          styles={this.getStyles()}
-          willLeave={this.willLeave}
-          willEnter={this.willEnter}
-        >
-          {this.getChildren}
-        </TransitionMotion>
-      </Overlay>
-    );
-  }
-}
-
-
-export const connectToStores = (Component, stores, getStateFromStores) => {
-  class WrappingElement extends React.Component {
-    state = getStateFromStores(this.props);
-
-    componentDidMount() {
-      stores.forEach(store => {
-        store.on('change', this.onChange, this);
-      });
-    }
-
-    componentWillUnmount() {
-      stores.forEach(function (store) {
-        store.off('change', this.onChange);
-      }.bind(this));
-    }
-
-    onChange = () => {
-      this.setState(getStateFromStores(this.props));
-    };
-
-    handleStoresChanged = () => {
-      this.setState(getStateFromStores(this.props));
-    };
-
-    render() {
-      return <Component {...this.state} {...this.props} />;
-    }
-  }
-
-  return WrappingElement;
-};
-
-export class TrayWrapper extends React.Component {
-  static defaultProps = {
-    className: ''
-  };
-
-  renderChildren = () => {
-    return React.Children.map(this.props.children, (child) => {
-
-      const props = {};
-      Object.keys(this.props).filter((k) => {
-        return Object.prototype.hasOwnProperty.call(this.props, k);
-      }).map((k) => {
-        return props[k] = this.props[k];
-      });
-
-      return React.cloneElement(child, props);
-    });
-  };
-
-  render() {
-    return (
-      <div>
-        {this.renderChildren()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/components/zenmodeoverlay.js b/app/addons/components/components/zenmodeoverlay.js
deleted file mode 100644
index dceb24c..0000000
--- a/app/addons/components/components/zenmodeoverlay.js
+++ /dev/null
@@ -1,133 +0,0 @@
-// Licensed 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.
-import React from "react";
-import ReactDOM from "react-dom";
-import app from "../../../app";
-import {CodeEditor} from './codeeditor';
-import {Tooltip, OverlayTrigger} from 'react-bootstrap';
-
-require('brace/theme/dawn');
-
-const themes = {
-  dark: 'idle_fingers',
-  light: 'dawn'
-};
-// Zen mode editing has very few options:
-// - It covers the full screen, hiding everything else
-// - Two themes: light & dark (choice stored in local storage)
-// - No save option, but has a 1-1 map with a <CodeEditor /> element which gets updated when the user leaves
-// - [Escape] closes the mode, as does clicking the shrink icon at the top right
-export class ZenModeOverlay extends React.Component {
-  static defaultProps = {
-    mode: 'javascript',
-    defaultCode: '',
-    ignorableErrors: [],
-    onExit: null,
-    highlightActiveLine: false
-  };
-
-  getStoreState = () => {
-    return {
-      theme: this.getZenTheme(),
-      code: this.props.defaultCode
-    };
-  };
-
-  getZenTheme = () => {
-    var selectedTheme = app.utils.localStorageGet('zenTheme');
-    return _.isUndefined(selectedTheme) ? 'dark' : selectedTheme;
-  };
-
-  onChange = () => {
-    this.setState(this.getStoreState());
-  };
-
-  exitZenMode = () => {
-    this.props.onExit(this.getValue());
-  };
-
-  getValue = () => {
-    return this.ace.getValue();
-  };
-
-  toggleTheme = () => {
-    var newTheme = (this.state.theme === 'dark') ? 'light' : 'dark';
-    this.setState({
-      theme: newTheme,
-      code: this.getValue()
-    });
-    app.utils.localStorageSet('zenTheme', newTheme);
-  };
-
-  setValue = (code, lineNumber) => {
-    lineNumber = lineNumber ? lineNumber : -1;
-    this.editor.setValue(code, lineNumber);
-  };
-
-  state = this.getStoreState();
-
-  render() {
-    var classes = 'full-page-editor-modal-wrapper zen-theme-' + this.state.theme;
-
-    var editorCommands = [{
-      name: 'close',
-      bindKey: { win: 'ESC', mac: 'ESC' },
-      exec: this.exitZenMode
-    }];
-
-    const tooltipExit = <Tooltip id="tooltip">
-      Exit zen mode (`esc`)
-    </Tooltip>;
-
-    const tooltipTheme = <Tooltip id="tooltip">
-      Switch zen theme
-    </Tooltip>;
-
-    return (
-      <div className={classes}>
-        <div className="zen-mode-controls">
-          <ul>
-            <li>
-              <OverlayTrigger placement="left" overlay={tooltipExit}>
-                <span
-                  className="fonticon fonticon-resize-small js-exit-zen-mode"
-                  data-container=".zen-mode-controls .tooltips"
-                  onClick={this.exitZenMode}>
-                </span>
-              </OverlayTrigger>
-            </li>
-            <li>
-              <OverlayTrigger placement="left" overlay={tooltipTheme}>
-                <span
-                  className="fonticon fonticon-picture js-toggle-theme"
-                  data-container=".zen-mode-controls .tooltips"
-                  title="Switch zen theme"
-                  onClick={this.toggleTheme}>
-                </span>
-              </OverlayTrigger>
-            </li>
-          </ul>
-          <div className="tooltips"></div>
-        </div>
-        <CodeEditor
-          ref={node => this.ace = node}
-          autoFocus={true}
-          theme={themes[this.state.theme]}
-          defaultCode={this.props.defaultCode}
-          editorCommands={editorCommands}
-          ignorableErrors={this.props.ignorableErrors}
-          highlightActiveLine={this.props.highlightActiveLine}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/components/header-breadcrumbs.js b/app/addons/components/header-breadcrumbs.js
deleted file mode 100644
index 898b997..0000000
--- a/app/addons/components/header-breadcrumbs.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export const Breadcrumbs = ({crumbs}) => {
-
-  return (
-    <div className="faux-header__breadcrumbs">
-      {getChildren(crumbs)}
-    </div>
-  );
-
-};
-
-Breadcrumbs.propTypes = {
-  crumbs: PropTypes.array.isRequired
-};
-
-
-const CrumbElement = ({children}) => {
-  return <div className="faux-header__breadcrumbs-element">{children}</div>;
-};
-
-const Divider = () => {
-  return (
-    <div className="fonticon-right-open faux-header__breadcrumbs-divider"></div>
-  );
-};
-
-function getChildren (crumbs) {
-  const amountDividers = crumbs.length - 1;
-
-  return crumbs.map((c, i) => {
-
-    let res = [<CrumbElement key={i}>{c.name}</CrumbElement>];
-
-    if (c.link) {
-      res = [
-        <CrumbElement key={i}>
-          <a className="faux-header__breadcrumbs-link" href={'#/' + c.link}>{c.name}</a>
-        </CrumbElement>
-      ];
-    }
-
-    if (!c.name) {
-      return res;
-    }
-
-    if (i < amountDividers) {
-      res.push(<Divider key={'divider_' + i}/>);
-    }
-
-    return res;
-  });
-}
diff --git a/app/addons/components/layouts.js b/app/addons/components/layouts.js
deleted file mode 100644
index 81389e5..0000000
--- a/app/addons/components/layouts.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import {JSONLink, DocLink} from './components/apibar';
-import {Breadcrumbs} from './header-breadcrumbs';
-import Helpers from '../../helpers';
-
-export const ApiBarWrapper = ({docURL, endpoint}) => {
-  return (
-    <div className='faux__jsondoc-wrapper'>
-      <JSONLink
-        endpoint={endpoint}
-      />
-      <DocLink
-        docURL={docURL}
-      />
-    </div>
-  );
-};
-
-export const OnePane = ({children}) => {
-  return (
-    <div id='dashboard' className='one-pane '>
-      {children}
-    </div>
-  );
-};
-
-export const OnePaneHeader = ({showApiUrl, docURL, endpoint, crumbs, children}) => {
-  let rightHeaderClass = "right-header-flex";
-  if (Helpers.isIE1X()) {
-    rightHeaderClass += " " + rightHeaderClass + "--ie1X";
-  }
-  return (
-    <header>
-      <div className='flex-layout flex-row'>
-        <div id='breadcrumbs' className='flex-body'>
-          <Breadcrumbs crumbs={crumbs}/>
-        </div>
-        <div id='right-header'>
-          <div className={rightHeaderClass}>
-            {children}
-          </div>
-        </div>
-        {showApiUrl ? <ApiBarWrapper docURL={docURL} endpoint={endpoint} /> : null}
-        <div id='notification-center-btn'>
-          <NotificationCenterButton />
-        </div>
-      </div>
-    </header>
-  );
-};
-
-OnePaneHeader.defaultProps = {
-  showApiUrl: true,
-  crumbs: []
-};
-
-OnePaneHeader.propTypes = {
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  crumbs: PropTypes.array
-};
-
-export const OnePaneContent = ({children}) => {
-  return (
-    <div className='content-area container-fluid'>
-      <div id='tabs'></div>
-      <div id='dashboard-content' className='scrollable'>
-        {children}
-      </div>
-    </div>
-  );
-};
-
-export const OnePaneFooter = ({children}) => {
-  return (
-    <div className='faux__onepane-footer'>
-      {children}
-    </div>
-  );
-};
-
-export const OnePaneSimpleLayout = ({component, docURL, endpoint, crumbs}) => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={crumbs}
-        endpoint={endpoint}
-        docURL={docURL}
-      >
-      </OnePaneHeader>
-      <OnePaneContent>
-        {component}
-      </OnePaneContent>
-      <OnePaneFooter>
-      </OnePaneFooter>
-    </OnePane>
-  );
-};
-
-export const DocEditorContent = ({children}) => {
-  return (
-    <div id="dashboard-content">
-      {children}
-    </div>
-  );
-};
-
-export const DocEditorLayout = ({component, docURL, endpoint, crumbs}) => {
-  return (
-    <div id="dashboard" className="one-pane doc-editor-page">
-      <OnePaneHeader
-        crumbs={crumbs}
-        endpoint={endpoint}
-        docURL={docURL}
-      >
-      </OnePaneHeader>
-      <DocEditorContent>
-        {component}
-      </DocEditorContent>
-    </div>
-  );
-};
diff --git a/app/addons/components/react-components.js b/app/addons/components/react-components.js
deleted file mode 100644
index d5223aa..0000000
--- a/app/addons/components/react-components.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// Licensed 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.
-
-import {Accordion, AccordionItem} from './components/accordion';
-import {Badge, BadgeList} from './components/badge';
-import {ToggleHeaderButton} from './components/toggleheaderbutton';
-import {BulkActionComponent} from './components/bulkaction';
-import {StyledSelect} from './components/styledselect';
-import {StringEditModal} from './components/stringeditmodal';
-import {CodeEditorPanel} from './components/codeeditorpanel';
-import {CodeEditor} from './components/codeeditor';
-import {ZenModeOverlay} from './components/zenmodeoverlay';
-import {Beautify} from './components/beautify';
-import {PaddedBorderedBox} from './components/paddedborderbox';
-import {Document} from './components/document';
-import {LoadLines} from './components/loadlines';
-import {ConfirmButton} from './components/confirmbutton';
-import {MenuDropDown} from './components/menudropdown';
-import {TrayContents, TrayWrapper, connectToStores} from './components/tray';
-import {DeleteDatabaseModal} from './components/deletedatabasemodal';
-import {TabElement, TabElementWrapper} from './components/tabelement';
-import {Polling, RefreshBtn} from './components/polling';
-import {Copy} from './components/copy';
-import {TabWindowWrapper} from './components/tabwindowwrapper';
-import {ThrottledReactSelectAsync} from './components/throttledreacselect';
-
-export default {
-  Accordion,
-  AccordionItem,
-  BadgeList,
-  Badge,
-  BulkActionComponent,
-  ConfirmButton,
-  ToggleHeaderButton,
-  StyledSelect,
-  CodeEditorPanel,
-  CodeEditor,
-  StringEditModal,
-  ZenModeOverlay,
-  Beautify,
-  PaddedBorderedBox,
-  Polling,
-  Document,
-  LoadLines,
-  MenuDropDown,
-  TrayContents,
-  TrayWrapper,
-  connectToStores,
-  DeleteDatabaseModal,
-  TabElement,
-  TabElementWrapper,
-  RefreshBtn,
-  Copy,
-  TabWindowWrapper,
-  ThrottledReactSelectAsync
-};
diff --git a/app/addons/components/stores.js b/app/addons/components/stores.js
deleted file mode 100644
index 96d6dc0..0000000
--- a/app/addons/components/stores.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import app from "../../app";
-import ActionTypes from "./actiontypes";
-var Stores = {};
-
-Stores.DeleteDbModalStore = FauxtonAPI.Store.extend({
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._deleteModal = {showDeleteModal: false, dbId: '', isSystemDatabase: false};
-  },
-
-  setDeleteModal: function (options) {
-    options.isSystemDatabase = app.utils.isSystemDatabase(options.dbId);
-    this._deleteModal = options;
-  },
-
-  getShowDeleteDatabaseModal: function () {
-    return this._deleteModal;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.CMPNTS_DATABASES_SHOWDELETE_MODAL:
-        this.setDeleteModal(action.options);
-        break;
-
-      default:
-        return;
-    }
-
-    this.triggerChange();
-  }
-});
-
-
-
-
-Stores.deleteDbModalStore = new Stores.DeleteDbModalStore();
-Stores.deleteDbModalStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.deleteDbModalStore.dispatch.bind(Stores.deleteDbModalStore));
-
-export default Stores;
diff --git a/app/addons/config/__tests__/actions.test.js b/app/addons/config/__tests__/actions.test.js
deleted file mode 100644
index d9e9649..0000000
--- a/app/addons/config/__tests__/actions.test.js
+++ /dev/null
@@ -1,147 +0,0 @@
-// Licensed 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.
-import testUtils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import * as Actions from '../actions';
-import ActionTypes from '../actiontypes';
-import * as ConfigAPI from '../api';
-import sinon from 'sinon';
-
-const restore = testUtils.restore;
-
-describe('Config Actions', () => {
-  const node = 'test';
-  const option = {
-    sectionName: 'test',
-    optionName: 'test',
-    value: 'test'
-  };
-  const spySaveConfigOption = sinon.stub(ConfigAPI, 'saveConfigOption');
-  const spyDeleteConfigOption = sinon.stub(ConfigAPI, 'deleteConfigOption');
-  const dispatch = sinon.stub();
-
-  describe('addOption', () => {
-
-    afterEach(() => {
-      spySaveConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_ADD_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.addOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_ADD_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_ADD_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.addOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_ADD_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-
-  describe('saveOption', () => {
-    afterEach(() => {
-      spySaveConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_SAVE_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.saveOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_SAVE_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_SAVE_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spySaveConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.saveOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_SAVE_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-
-  describe('deleteOption', () => {
-    afterEach(() => {
-      spyDeleteConfigOption.reset();
-      dispatch.reset();
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('dispatches OPTION_DELETE_SUCCESS and shows notification when option add succeeds', () => {
-      const promise = FauxtonAPI.Promise.resolve();
-      spyDeleteConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.deleteOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_DELETE_SUCCESS,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-
-    it('dispatches OPTION_DELETE_FAILURE and shows notification when option add fails', () => {
-      const promise = FauxtonAPI.Promise.reject(new Error(''));
-      spyDeleteConfigOption.returns(promise);
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-
-      return Actions.deleteOption(node, option)(dispatch)
-        .then(() => {
-          sinon.assert.calledWith(dispatch, {
-            type: ActionTypes.OPTION_DELETE_FAILURE,
-            options: { optionName: "test", sectionName: "test", value: "test" }
-          });
-          sinon.assert.called(spyAddNotification);
-        });
-    });
-  });
-});
-
diff --git a/app/addons/config/__tests__/components.test.js b/app/addons/config/__tests__/components.test.js
deleted file mode 100644
index 1c6110d..0000000
--- a/app/addons/config/__tests__/components.test.js
+++ /dev/null
@@ -1,268 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import AddOptionButton from '../components/AddOptionButton';
-import ConfigOption from '../components/ConfigOption';
-import ConfigOptionValue from '../components/ConfigOptionValue';
-import ConfigOptionTrash from '../components/ConfigOptionTrash';
-import ConfigTableScreen from '../components/ConfigTableScreen';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Config Components', () => {
-  describe('ConfigTableScreen', () => {
-    const options = [
-      {editing: false, header:true, sectionName: 'sec1', optionName: 'opt1', value: 'value1'},
-      {editing: false, header:false, sectionName: 'sec1', optionName: 'opt2', value: 'value2'}
-    ];
-    const node = 'test_node';
-    const defaultProps = {
-      saving: false,
-      loading: false,
-      deleteOption: () => {},
-      saveOption: () => {},
-      editOption: () => {},
-      cancelEdit: () => {},
-      fetchAndEditConfig: () => {},
-      node,
-      options
-    };
-
-    it('deletes options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        deleteOption={spy}/>
-      );
-      wrapper.instance().deleteOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('saves options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        saveOption={spy}/>
-      );
-      wrapper.instance().saveOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('edits options', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        editOption={spy}/>
-      );
-      wrapper.instance().editOption({});
-      sinon.assert.called(spy);
-    });
-
-    it('cancels editing', () => {
-      const spy = sinon.stub();
-      const wrapper = mount(<ConfigTableScreen
-        {...defaultProps}
-        cancelEdit={spy}/>
-      );
-      wrapper.instance().cancelEdit();
-      sinon.assert.called(spy);
-    });
-  });
-
-  describe('ConfigOption', () => {
-    const defaultProps = {
-      option: {},
-      saving: false,
-      onEdit: () => {},
-      onCancelEdit: () => {},
-      onSave: () => {},
-      onDelete: () => {}
-    };
-    it('renders section name if the option is a header', () => {
-      const option = {
-        sectionName: 'test_section',
-        optionName: 'test_option',
-        value: 'test_value',
-        header: true,
-        editing: true
-      };
-
-      const el = mount(<table><tbody><ConfigOption {...defaultProps} option={option}/></tbody></table>);
-      expect(el.find('th').text()).toBe('test_section');
-    });
-  });
-
-  describe('ConfigOptionValue', () => {
-    const defaultProps = {
-      value: '',
-      editing: false,
-      onEdit: () => {},
-      onCancelEdit: () => {},
-      onSave: () => {}
-    };
-
-    it('displays the value prop', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'}/>
-        </tr></tbody></table>
-      );
-
-      expect(el.text()).toBe('test_value');
-    });
-
-    it('starts editing when clicked', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} onEdit={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find(ConfigOptionValue).simulate('click');
-      expect(spy.calledOnce).toBeTruthy();
-    });
-
-    it('displays editing controls if editing', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing/>
-        </tr></tbody></table>
-      );
-
-      expect(el.find('input.config-value-input').length).toBe(1);
-      expect(el.find('button.btn-config-cancel').length).toBe(1);
-      expect(el.find('button.btn-config-save').length).toBe(1);
-    });
-
-    it('disables input when saving is set to true', () => {
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing={true} saving={true}/>
-        </tr></tbody></table>
-      );
-
-      expect(el.find('input.config-value-input').prop('disabled')).toBe(true);
-    });
-
-    it('saves changed value of input when save clicked', () => {
-      var change = { target: { value: 'new_value' } };
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing onSave={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find('input.config-value-input').simulate('change', change);
-      el.find('button.btn-config-save').simulate('click');
-      expect(spy.calledWith('new_value')).toBeTruthy();
-    });
-
-    it('cancels edit if save clicked with unchanged value', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr>
-          <ConfigOptionValue {...defaultProps} value={'test_value'} editing onCancelEdit={spy}/>
-        </tr></tbody></table>
-      );
-
-      el.find('button.btn-config-save').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-  });
-
-  describe('ConfigOptionTrash', () => {
-    const defaultProps = {
-      sectionName: 'test_section',
-      optionName: 'test_option',
-      onDelete: () => {}
-    };
-
-    it('displays delete modal when clicked', () => {
-      const el = mount(
-        <table><tbody><tr><ConfigOptionTrash {...defaultProps}/></tr></tbody></table>
-      );
-
-      el.find('i.icon').simulate('click');
-      expect(el.find('div.confirmation-modal').length).toBe(1);
-    });
-
-    it('calls on delete when confirmation modal Okay button clicked', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <table><tbody><tr><ConfigOptionTrash {...defaultProps} onDelete={spy}/></tr></tbody></table>
-      );
-
-      el.find('i.icon').simulate('click');
-      el.find('div.confirmation-modal .btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-  });
-
-  describe('AddOptionButton', () => {
-    it('displays add option controls when clicked', () => {
-      const el = mount(
-        <AddOptionButton onAdd={() => {}}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      expect(el.find('div#add-option-popover .input-section-name').length).toBe(1);
-      expect(el.find('div#add-option-popover .input-option-name').length).toBe(1);
-      expect(el.find('div#add-option-popover .input-value').length).toBe(1);
-      expect(el.find('div#add-option-popover .btn-create').length).toBe(1);
-    });
-
-    it('does not hide popover if create clicked with invalid input', () => {
-      const el = mount(
-        <AddOptionButton onAdd={() => {}}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      expect(el.find('div#add-option-popover').length).toBe(1);
-    });
-
-    it('does not add option if create clicked with invalid input', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <AddOptionButton onAdd={spy}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      sinon.assert.notCalled(spy);
-    });
-
-    it('adds option when create clicked with valid input', () => {
-      const spy = sinon.spy();
-      const el = mount(
-        <AddOptionButton onAdd={spy}/>
-      );
-
-      el.find('button#add-option-button').simulate('click');
-      el.find('div#add-option-popover .input-section-name').simulate('change', { target: { value: 'test_section' } });
-      el.find('div#add-option-popover .input-option-name').simulate('change', { target: { value: 'test_option' } });
-      el.find('div#add-option-popover .input-value').simulate('change', { target: { value: 'test_value' } });
-      el.find('div#add-option-popover .btn-create').simulate('click');
-      sinon.assert.calledWithMatch(spy, {
-        sectionName: 'test_section',
-        optionName: 'test_option',
-        value: 'test_value'
-      });
-    });
-  });
-});
diff --git a/app/addons/config/__tests__/reducers.test.js b/app/addons/config/__tests__/reducers.test.js
deleted file mode 100644
index e9a0275..0000000
--- a/app/addons/config/__tests__/reducers.test.js
+++ /dev/null
@@ -1,111 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from '../actiontypes';
-import reducer, {options} from '../reducers';
-
-describe('Config Reducer', () => {
-  const editConfigAction = {
-    type: ActionTypes.EDIT_CONFIG,
-    options: {
-      sections: {
-        test: { b: 1, c: 2, a: 3 }
-      }
-    }
-  };
-  describe('fetchConfig', () => {
-    it('sorts options ascending', () => {
-      const newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[0].optionName).toBe('a');
-    });
-
-    it('sets the first option as the header', () => {
-      const newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[0].header).toBe(true);
-    });
-  });
-
-  describe('editOption', () => {
-    it('sets the option that is being edited', () => {
-      let newState = reducer(undefined, editConfigAction);
-      const opts = options(newState);
-      opts.forEach(el => {
-        expect(el.editing).toBe(false);
-      });
-
-      const editOptionAction = {
-        type: ActionTypes.EDIT_OPTION,
-        options: {
-          sectionName: 'test',
-          optionName: 'b'
-        }
-      };
-      newState = reducer(newState, editOptionAction);
-      const opts2 = options(newState);
-      expect(opts2[1].editing).toBe(true);
-    });
-  });
-
-  describe('saveOption', () => {
-    it('sets new option value', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState)[1].value).toBe(1);
-
-      const saveOptionAction = {
-        type: ActionTypes.OPTION_SAVE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'b',
-          value: 'new_value'
-        }
-      };
-      newState = reducer(newState, saveOptionAction);
-      expect(options(newState)[1].value).toBe('new_value');
-    });
-  });
-
-  describe('deleteOption', () => {
-    it('deletes option from section', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState).length).toBe(3);
-
-      const deleteOptionAction = {
-        type: ActionTypes.OPTION_DELETE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'b'
-        }
-      };
-      newState = reducer(newState, deleteOptionAction);
-      expect(options(newState).length).toBe(2);
-    });
-
-    it('deletes section when all options are deleted', () => {
-      let newState = reducer(undefined, editConfigAction);
-      expect(options(newState).length).toBe(3);
-
-      const deleteOptionAction = {
-        type: ActionTypes.OPTION_DELETE_SUCCESS,
-        options: {
-          sectionName: 'test',
-          optionName: 'a'
-        }
-      };
-      newState = reducer(newState, deleteOptionAction);
-      deleteOptionAction.options.optionName = 'b';
-      newState = reducer(newState, deleteOptionAction);
-      deleteOptionAction.options.optionName = 'c';
-      newState = reducer(newState, deleteOptionAction);
-      expect(options(newState).length).toBe(0);
-    });
-  });
-});
diff --git a/app/addons/config/actions.js b/app/addons/config/actions.js
deleted file mode 100644
index ae4a97d..0000000
--- a/app/addons/config/actions.js
+++ /dev/null
@@ -1,131 +0,0 @@
-//  Licensed 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.
-
-import ActionTypes from './actiontypes';
-import FauxtonAPI from '../../core/api';
-import * as ConfigAPI from './api';
-
-export const fetchAndEditConfig = (node) => (dispatch) => {
-  dispatch({ type: ActionTypes.LOADING_CONFIG });
-
-  ConfigAPI.fetchConfig(node).then(res => {
-    dispatch({
-      type: ActionTypes.EDIT_CONFIG,
-      options: {
-        sections: res.sections,
-        node
-      }
-    });
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Failed to load the configuration. ' + err.message,
-      type: 'error',
-      clear: true
-    });
-    dispatch({
-      type: ActionTypes.EDIT_CONFIG,
-      options: {
-        sections: [],
-        node
-      }
-    });
-  });
-};
-
-export const editOption = (options) => (dispatch) => {
-  dispatch({ type: ActionTypes.EDIT_OPTION, options });
-};
-
-export const cancelEdit = (options) => (dispatch) => {
-  dispatch({ type: ActionTypes.CANCEL_EDIT, options });
-};
-
-export const saveOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.SAVING_OPTION, options });
-
-  const { sectionName, optionName, value } = options;
-  return ConfigAPI.saveConfigOption(node, sectionName, optionName, value).then(
-    () => optionSaveSuccess(options, dispatch)
-  ).catch(
-    (err) => optionSaveFailure(options, err.message, dispatch)
-  );
-};
-
-const optionSaveSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_SAVE_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} saved`,
-    type: 'success'
-  });
-};
-
-const optionSaveFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_SAVE_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option save failed: ${error}`,
-    type: 'error'
-  });
-};
-
-export const addOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.ADDING_OPTION });
-
-  const { sectionName, optionName, value } = options;
-  return ConfigAPI.saveConfigOption(node, sectionName, optionName, value).then(
-    () => optionAddSuccess(options, dispatch)
-  ).catch(
-    (err) => optionAddFailure(options, err.message, dispatch)
-  );
-};
-
-const optionAddSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_ADD_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} added`,
-    type: 'success'
-  });
-};
-
-const optionAddFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_ADD_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option add failed: ${error}`,
-    type: 'error'
-  });
-};
-
-export const deleteOption = (node, options) => (dispatch) => {
-  dispatch({ type: ActionTypes.DELETING_OPTION, options });
-
-  const { sectionName, optionName } = options;
-  return ConfigAPI.deleteConfigOption(node, sectionName, optionName).then(
-    () => optionDeleteSuccess(options, dispatch)
-  ).catch(
-    (err) => optionDeleteFailure(options, err.message, dispatch)
-  );
-};
-
-const optionDeleteSuccess = (options, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_DELETE_SUCCESS, options });
-  FauxtonAPI.addNotification({
-    msg: `Option ${options.optionName} deleted`,
-    type: 'success'
-  });
-};
-
-const optionDeleteFailure = (options, error, dispatch) => {
-  dispatch({ type: ActionTypes.OPTION_DELETE_FAILURE, options });
-  FauxtonAPI.addNotification({
-    msg: `Option delete failed: ${error}`,
-    type: 'error'
-  });
-};
diff --git a/app/addons/config/actiontypes.js b/app/addons/config/actiontypes.js
deleted file mode 100644
index 9391ac3..0000000
--- a/app/addons/config/actiontypes.js
+++ /dev/null
@@ -1,27 +0,0 @@
-//  Licensed 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.
-
-export default {
-  EDIT_CONFIG: 'EDIT_CONFIG',
-  LOADING_CONFIG: 'LOADING_CONFIG',
-  EDIT_OPTION: 'EDIT_OPTION',
-  CANCEL_EDIT: 'CANCEL_EDIT',
-  SAVING_OPTION: 'SAVING_OPTION',
-  OPTION_SAVE_SUCCESS: 'OPTION_SAVE_SUCCESS',
-  OPTION_SAVE_FAILURE: 'OPTION_SAVE_FAILURE',
-  DELETING_OPTION: 'DELETING_OPTION',
-  OPTION_DELETE_SUCCESS: 'OPTION_DELETE_SUCCESS',
-  OPTION_DELETE_FAILURE: 'OPTION_DELETE_FAILURE',
-  ADDING_OPTION: 'ADDING_OPTION',
-  OPTION_ADD_SUCCESS: 'OPTION_ADD_SUCCESS',
-  OPTION_ADD_FAILURE: 'OPTION_ADD_FAILURE'
-};
diff --git a/app/addons/config/api.js b/app/addons/config/api.js
deleted file mode 100644
index 5a9f17d..0000000
--- a/app/addons/config/api.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-import { get, put, deleteRequest } from '../../core/ajax';
-import Helpers from "../../helpers";
-
-export const configUrl = (node) => {
-  return Helpers.getServerUrl('/_node/' + node + '/_config');
-};
-
-export const fetchConfig = (node) => {
-  const url = configUrl(node);
-  return get(url).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return { sections: json };
-  });
-};
-
-export const optionUrl = (node, sectionName, optionName) => {
-  const endpointUrl = '/_node/' + node + '/_config/' +
-    encodeURIComponent(sectionName) + '/' + encodeURIComponent(optionName);
-  return Helpers.getServerUrl(endpointUrl);
-};
-
-export const saveConfigOption = (node, sectionName, optionName, value) => {
-  const url = optionUrl(node, sectionName, optionName);
-  return put(url, value).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason || json.error);
-    }
-    return json;
-  });
-};
-
-export const deleteConfigOption = (node, sectionName, optionName) => {
-  const url = optionUrl(node, sectionName, optionName);
-  return deleteRequest(url).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
diff --git a/app/addons/config/assets/less/config.less b/app/addons/config/assets/less/config.less
deleted file mode 100644
index 57c6cf3..0000000
--- a/app/addons/config/assets/less/config.less
+++ /dev/null
@@ -1,208 +0,0 @@
-//  Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.config-item {
-  height: 65px;
-
-  .config-value-form {
-    button {
-      margin-left: 8px;
-    }
-  }
-
-  .config-value-input {
-    width: 80%;
-    margin: 0;
-  }
-
-  .config-show-value,
-  .config-delete-value {
-    cursor: pointer;
-  }
-
-  .text-center {
-    text-align: center;
-  }
-
-  button { width: 7%;}
-  transition: background-color 100ms;
-}
-
-.config-item-trash:hover {
-  color: @dangerRed;
-}
-
-.config-item-deleting {
-  text-decoration: line-through;
-  text-decoration-color: red;
-}
-
-#config-trash {
-  width: 5%;
-}
-
-table.config {
-  thead th {
-    border-left: none;
-    border-bottom: 2px solid #999;
-  }
-  tr {
-    th, td {
-      vertical-align: middle;
-      .btn.btn-small {
-        padding: 10px 3px;
-      }
-    }
-  }
-}
-
-#add-option-button {
-  line-height: 40px;
-  cursor: pointer;
-  border-left: 1px solid #ccc;
-  border-right: none;
-  border-top: none;
-  border-bottom: none;
-  padding: 12px 14px;
-
-  &:hover {
-    transition: none;
-    text-decoration: none;
-    color: @linkColorHover;
-  }
-}
-
-#add-section-button {
-
-}
-
-.add-section-tray {
-  padding: 20px;
-  width: 300px;
-
-  &:before {
-    right: 138px;
-  }
-
-  input {
-    width: 100%;
-  }
-
-  form {
-    margin-bottom: 0px;
-  }
-
-  a.btn {
-    color: white;
-    background-color: @linkColor;
-    line-height: 1.5em;
-    border: 0px;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-    .border-radius(5px);
-
-    &:hover {
-      background-color: #cbcbcb;
-      color: white;
-    }
-  }
-
-  .typeahead {
-    width: 260px;
-    margin-top: 0px;
-
-    a {
-      color: #ffffff;
-    }
-  }
-}
-
-#add-option-popover {
-  background-color: #333;
-  color: white;
-  padding: 20px;
-  border-radius: 0;
-  width: 300px;
-  max-width: none;
-  display: block;
-
-  .popover-content {
-    padding: 0;
-  }
-
-  .popover-title {
-    font-size: 16px;
-    padding: 0;
-    margin: 10px 0;
-    border: none;
-    display: block;
-    text-align: left;
-    color: #fff;
-    text-shadow: none;
-    height: auto;
-    line-height: 1em;
-    background-color: #333;
-  }
-
-  input {
-    width: 100%;
-  }
-
-  a.btn {
-    color: white;
-    background-color: @linkColor;
-    line-height: 1.5em;
-    border: 0;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-    .border-radius(5px);
-
-    &:hover {
-      background-color: #cbcbcb;
-      color: white;
-    }
-  }
-
-  .arrow, .arrow::after {
-    border-bottom-color: #333 !important;
-  }
-
-}
-
-#add-option-popover::before {
-  display: none;
-}
-
-.config-warning-cluster-wrapper {
-  .config-warning-cluster-container {
-    margin-left: -50px;
-  }
-  margin: 40px auto;
-  width: 70%;
-  .fonticon-attention-circled {
-    font-size: 40px;
-  }
-  .config-warning-icon-container {
-    width: 50px;
-    margin-top: -5px;
-  }
-  .config-warning-other-text {
-    margin-left: 50px;
-  }
-}
-
-div.faux__config-breadcrumbs {
-  flex: 0 0 331px !important;
-}
diff --git a/app/addons/config/base.js b/app/addons/config/base.js
deleted file mode 100644
index ffa6cab..0000000
--- a/app/addons/config/base.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../core/api';
-import Config from './routes';
-import reducers from './reducers';
-import './assets/less/config.less';
-
-Config.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Configuration',
-    href: '#/_config',
-    icon: 'fonticon-cog',
-    className: 'config'
-  });
-};
-
-FauxtonAPI.addReducers({
-  config: reducers
-});
-
-export default Config;
diff --git a/app/addons/config/components/AddOptionButton.js b/app/addons/config/components/AddOptionButton.js
deleted file mode 100644
index ddaf479..0000000
--- a/app/addons/config/components/AddOptionButton.js
+++ /dev/null
@@ -1,129 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import {Button, Overlay, Popover} from 'react-bootstrap';
-
-export default class AddOptionButton extends React.Component {
-  static propTypes = {
-    onAdd: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = this.getInitialState();
-  }
-
-  getInitialState () {
-    return {
-      sectionName: '',
-      optionName: '',
-      value: '',
-      show: false
-    };
-  }
-
-  isInputValid () {
-    if (this.state.sectionName !== ''
-      && this.state.optionName !== ''
-      && this.state.value !== '') {
-      return true;
-    }
-
-    return false;
-  }
-
-  updateSectionName (event) {
-    this.setState({ sectionName: event.target.value });
-  }
-
-  updateOptionName (event) {
-    this.setState({ optionName: event.target.value });
-  }
-
-  updateValue (event) {
-    this.setState({ value: event.target.value });
-  }
-
-  reset () {
-    this.setState(this.getInitialState());
-  }
-
-  onAdd () {
-    if (this.isInputValid()) {
-      var option = {
-        sectionName: this.state.sectionName,
-        optionName: this.state.optionName,
-        value: this.state.value
-      };
-
-      this.setState({ show: false });
-      this.props.onAdd(option);
-    }
-  }
-
-  togglePopover () {
-    this.setState({ show: !this.state.show });
-  }
-
-  hidePopover () {
-    this.setState({ show: false });
-  }
-
-  getPopover () {
-    return (
-      <Popover className="tray" id="add-option-popover" title="Add Option">
-        <input
-          className="input-section-name"
-          onChange={this.updateSectionName.bind(this)}
-          type="text" name="section" placeholder="Section" autoComplete="off" autoFocus/>
-        <input
-          className="input-option-name"
-          onChange={this.updateOptionName.bind(this)}
-          type="text" name="name" placeholder="Name"/>
-        <input
-          className="input-value"
-          onChange={this.updateValue.bind(this)}
-          type="text" name="value" placeholder="Value"/>
-        <a
-          className="btn btn-create"
-          onClick={this.onAdd.bind(this)}>
-          Create
-        </a>
-      </Popover>
-    );
-  }
-
-  render () {
-    return (
-      <div id="add-option-panel">
-        <Button
-          id="add-option-button"
-          onClick={this.togglePopover.bind(this)}
-          ref={node => this.target = node}>
-          <i className="icon icon-plus header-icon"></i>
-          Add Option
-        </Button>
-
-        <Overlay
-          show={this.state.show}
-          onHide={this.hidePopover.bind(this)}
-          placement="bottom"
-          rootClose={true}
-          target={() => this.target}>
-          {this.getPopover()}
-        </Overlay>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/config/components/AddOptionButtonContainer.js b/app/addons/config/components/AddOptionButtonContainer.js
deleted file mode 100644
index 331969a..0000000
--- a/app/addons/config/components/AddOptionButtonContainer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Licensed 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.
-
-import { connect } from 'react-redux';
-import * as Actions from '../actions';
-import AddOptionButton from './AddOptionButton';
-
-
-const mapStateToProps = () => {
-  return {};
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    onAdd: (options) => {
-      dispatch(Actions.addOption(ownProps.node, options));
-    }
-  };
-};
-
-const AddOptionButtonContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(AddOptionButton);
-
-export default AddOptionButtonContainer;
diff --git a/app/addons/config/components/ConfigOption.js b/app/addons/config/components/ConfigOption.js
deleted file mode 100644
index 858eeb5..0000000
--- a/app/addons/config/components/ConfigOption.js
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ConfigOptionValue from './ConfigOptionValue';
-import ConfigOptionTrash from './ConfigOptionTrash';
-
-export default class ConfigOption extends React.Component {
-  static propTypes = {
-    option: PropTypes.object.isRequired,
-    saving: PropTypes.bool.isRequired,
-    onSave: PropTypes.func.isRequired,
-    onDelete: PropTypes.func.isRequired,
-    onEdit: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired
-  };
-
-  onSave = (value) => {
-    const option = this.props.option;
-    option.value = value;
-    this.props.onSave(option);
-  };
-
-  onDelete = () => {
-    this.props.onDelete(this.props.option);
-  };
-
-  onEdit = () => {
-    this.props.onEdit(this.props.option);
-  };
-
-  render() {
-    return (
-      <tr className="config-item">
-        <th>{this.props.option.header && this.props.option.sectionName}</th>
-        <td>{this.props.option.optionName}</td>
-        <ConfigOptionValue
-          value={this.props.option.value}
-          editing={this.props.option.editing}
-          saving={this.props.saving}
-          onSave={this.onSave}
-          onEdit={this.onEdit}
-          onCancelEdit={this.props.onCancelEdit}
-        />
-        <ConfigOptionTrash
-          optionName={this.props.option.optionName}
-          sectionName={this.props.option.sectionName}
-          onDelete={this.onDelete}/>
-      </tr>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigOptionTrash.js b/app/addons/config/components/ConfigOptionTrash.js
deleted file mode 100644
index a37f031..0000000
--- a/app/addons/config/components/ConfigOptionTrash.js
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonComponents from '../../fauxton/components';
-
-export default class ConfigOptionTrash extends React.Component {
-  constructor (props) {
-    super(props);
-    this.onDelete = this.onDelete.bind(this);
-    this.showModal = this.showModal.bind(this);
-    this.hideModal = this.hideModal.bind(this);
-    this.state = { show: false };
-  }
-
-  static propTypes = {
-    sectionName: PropTypes.string.isRequired,
-    optionName: PropTypes.string.isRequired,
-    onDelete: PropTypes.func.isRequired
-  };
-
-  onDelete = () => {
-    this.props.onDelete();
-  };
-
-  showModal = () => {
-    this.setState({ show: true });
-  };
-
-  hideModal = () => {
-    this.setState({ show: false });
-  };
-
-  render() {
-    return (
-      <td className="text-center config-item-trash config-delete-value">
-        <i className="icon icon-trash" onClick={this.showModal}></i>
-        <FauxtonComponents.ConfirmationModal
-          text={`Are you sure you want to delete ${this.props.sectionName}/${this.props.optionName}?`}
-          onClose={this.hideModal}
-          onSubmit={this.onDelete}
-          visible={this.state.show}/>
-      </td>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigOptionValue.js b/app/addons/config/components/ConfigOptionValue.js
deleted file mode 100644
index dc46aaf..0000000
--- a/app/addons/config/components/ConfigOptionValue.js
+++ /dev/null
@@ -1,83 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class ConfigOptionValue extends React.Component {
-  static propTypes = {
-    value: PropTypes.string.isRequired,
-    editing: PropTypes.bool.isRequired,
-    onEdit: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired,
-    onSave: PropTypes.func.isRequired
-  };
-
-  state = {
-    value: this.props.value
-  };
-
-  onChange = (event) => {
-    this.setState({ value: event.target.value });
-  };
-
-  onSave = () => {
-    if (this.state.value !== this.props.value) {
-      this.props.onSave(this.state.value);
-    } else {
-      this.props.onCancelEdit();
-    }
-  };
-
-  getButtons = () => {
-    if (this.props.saving) {
-      return null;
-    }
-    return (
-      <span>
-        <button
-          className="btn btn-primary fonticon-ok-circled btn-small btn-config-save"
-          onClick={this.onSave.bind(this)}
-        />
-        <button
-          className="btn fonticon-cancel-circled btn-small btn-config-cancel"
-          onClick={this.props.onCancelEdit}
-        />
-      </span>
-    );
-
-  };
-
-  render() {
-    if (this.props.editing) {
-      return (
-        <td>
-          <div className="config-value-form">
-            <input
-              onChange={this.onChange.bind(this)}
-              defaultValue={this.props.value}
-              disabled={this.props.saving}
-              autoFocus type="text" className="config-value-input"
-            />
-            {this.getButtons()}
-          </div>
-        </td>
-      );
-    }
-    return (
-      <td className="config-show-value" onClick={this.props.onEdit}>
-        {this.props.value}
-      </td>
-    );
-
-  }
-}
diff --git a/app/addons/config/components/ConfigTable.js b/app/addons/config/components/ConfigTable.js
deleted file mode 100644
index 5e7a57d..0000000
--- a/app/addons/config/components/ConfigTable.js
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ConfigOption from './ConfigOption';
-
-export default class ConfigTable extends React.Component {
-  static propTypes = {
-    options: PropTypes.arrayOf(PropTypes.shape({
-      editing: PropTypes.bool.isRequired,
-      header: PropTypes.bool,
-      optionName: PropTypes.string.isRequired,
-      sectionName: PropTypes.string.isRequired,
-      value: PropTypes.string
-    })).isRequired,
-    saving: PropTypes.bool.isRequired,
-    onDeleteOption: PropTypes.func.isRequired,
-    onEditOption: PropTypes.func.isRequired,
-    onSaveOption: PropTypes.func.isRequired,
-    onCancelEdit: PropTypes.func.isRequired
-  };
-
-  createOptions = () => {
-    return _.map(this.props.options, (option) => (
-      <ConfigOption
-        option={option}
-        saving={this.props.saving}
-        onDelete={this.props.onDeleteOption}
-        onSave={this.props.onSaveOption}
-        onEdit={this.props.onEditOption}
-        onCancelEdit={this.props.onCancelEdit}
-        key={`${option.sectionName}/${option.optionName}`}
-      />
-    ));
-  };
-
-  render() {
-    const options = this.createOptions();
-
-    return (
-      <table className="config table table-striped table-bordered">
-        <thead>
-          <tr>
-            <th id="config-section" width="22%">Section</th>
-            <th id="config-option" width="22%">Option</th>
-            <th id="config-value">Value</th>
-            <th id="config-trash"></th>
-          </tr>
-        </thead>
-        <tbody>
-          {options}
-        </tbody>
-      </table>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigTableContainer.js b/app/addons/config/components/ConfigTableContainer.js
deleted file mode 100644
index 34750cf..0000000
--- a/app/addons/config/components/ConfigTableContainer.js
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Licensed 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.
-
-import { connect } from 'react-redux';
-import ConfigTableScreen from './ConfigTableScreen';
-import * as Actions from '../actions';
-import { options } from '../reducers';
-
-const mapStateToProps = ({ config }, ownProps) => {
-  return {
-    node: ownProps.node,
-    options: options(config),
-    loading: config.loading,
-    saving: config.saving,
-    editSectionName: config.editSectionName,
-    editOptionName: config.editOptionName,
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    fetchAndEditConfig: (node) => {
-      dispatch(Actions.fetchAndEditConfig(node));
-    },
-
-    saveOption: (node, options) => {
-      dispatch(Actions.saveOption(node, options));
-    },
-
-    deleteOption: (node, options) => {
-      dispatch(Actions.deleteOption(node, options));
-    },
-
-    editOption: (options) => {
-      dispatch(Actions.editOption(options));
-    },
-
-    cancelEdit: (options) => {
-      dispatch(Actions.cancelEdit(options));
-    }
-  };
-};
-
-const ConfigTableContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ConfigTableScreen);
-
-export default ConfigTableContainer;
diff --git a/app/addons/config/components/ConfigTableScreen.js b/app/addons/config/components/ConfigTableScreen.js
deleted file mode 100644
index de4971e..0000000
--- a/app/addons/config/components/ConfigTableScreen.js
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Components from '../../components/react-components';
-import ConfigTable from './ConfigTable';
-
-export default class ConfigTableScreen extends React.Component {
-  static propTypes = {
-    options: PropTypes.array.isRequired,
-    loading: PropTypes.bool.isRequired,
-    saving: PropTypes.bool.isRequired,
-    saveOption: PropTypes.func.isRequired,
-    deleteOption: PropTypes.func.isRequired,
-    editOption: PropTypes.func.isRequired,
-    cancelEdit: PropTypes.func.isRequired,
-    fetchAndEditConfig: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.props.fetchAndEditConfig(this.props.node);
-  }
-
-  saveOption = (option) => {
-    this.props.saveOption(this.props.node, option);
-  };
-
-  deleteOption = (option) => {
-    this.props.deleteOption(this.props.node, option);
-  };
-
-  editOption = (option) => {
-    this.props.editOption(option);
-  };
-
-  cancelEdit = () => {
-    this.props.cancelEdit();
-  };
-
-  render() {
-    if (this.props.loading) {
-      return (
-        <div className="view">
-          <Components.LoadLines />
-        </div>
-      );
-    }
-    return (
-      <ConfigTable
-        saving={this.props.saving}
-        onDeleteOption={this.deleteOption}
-        onSaveOption={this.saveOption}
-        onEditOption={this.editOption}
-        onCancelEdit={this.cancelEdit}
-        options={this.props.options}/>
-    );
-  }
-}
diff --git a/app/addons/config/components/ConfigTabs.js b/app/addons/config/components/ConfigTabs.js
deleted file mode 100644
index beab5ee..0000000
--- a/app/addons/config/components/ConfigTabs.js
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-const ConfigTabs = ({sidebarItems, selectedTab}) => {
-  const tabItems = sidebarItems.map(item => {
-    return <TabItem
-      key={item.title}
-      active={selectedTab === item.title}
-      title={item.title}
-      link={item.link}
-    />;
-  });
-  return (
-    <nav className="sidenav">
-      <ul className="nav nav-list">
-        {tabItems}
-      </ul>
-    </nav>
-  );
-};
-
-const TabItem = ({active, link, title}) => {
-  return (
-    <li className={active ? 'active' : ''}>
-      <a href={`#${link}`}>
-        {title}
-      </a>
-    </li>
-  );
-};
-
-TabItem.propTypes = {
-  active: PropTypes.bool.isRequired,
-  link: PropTypes.string.isRequired,
-  icon: PropTypes.string,
-  title: PropTypes.string.isRequired
-};
-
-export default ConfigTabs;
diff --git a/app/addons/config/layout.js b/app/addons/config/layout.js
deleted file mode 100644
index 7774e06..0000000
--- a/app/addons/config/layout.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import AddOptionButtonContainer from './components/AddOptionButtonContainer';
-import ConfigTableContainer from './components/ConfigTableContainer';
-import ConfigTabs from './components/ConfigTabs';
-import CORSComponents from '../cors/components';
-import { Breadcrumbs } from '../components/header-breadcrumbs';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import { ApiBarWrapper } from '../components/layouts';
-
-export const ConfigHeader = ({ node, crumbs, docURL, endpoint }) => {
-  return (
-    <header className="two-panel-header">
-      <div className="flex-layout flex-row">
-        <div id='breadcrumbs' className="faux__config-breadcrumbs">
-          <Breadcrumbs crumbs={crumbs} />
-        </div>
-        <div className="right-header-wrapper flex-layout flex-row flex-body">
-          <div id="react-headerbar" className="flex-body"> </div>
-          <div id="right-header" className="flex-fill">
-            <AddOptionButtonContainer node={node} />
-          </div>
-          <ApiBarWrapper docURL={docURL} endpoint={endpoint} />
-          <div id="notification-center-btn" className="flex-fill">
-            <NotificationCenterButton />
-          </div>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-export const ConfigLayout = ({ showCors, docURL, node, endpoint, crumbs }) => {
-  const sidebarItems = [
-    {
-      title: 'Main config',
-      link: '_config/' + node
-    },
-    {
-      title: 'CORS',
-      link: '_config/' + node + '/cors'
-    }
-  ];
-  const selectedTab = showCors ? 'CORS' : 'Main config';
-  const content = showCors ? <CORSComponents.CORSContainer node={node} url={endpoint} /> : <ConfigTableContainer node={node} />;
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <ConfigHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        node={node}
-        crumbs={crumbs}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <ConfigTabs
-            sidebarItems={sidebarItems}
-            selectedTab={selectedTab}
-          />
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <div id="dashboard-upper-content"></div>
-          <div id="dashboard-lower-content" className="flex-body">
-            {content}
-          </div>
-          <div id="footer"></div>
-        </section>
-      </div>
-    </div>
-  );
-};
-
-export default ConfigLayout;
diff --git a/app/addons/config/reducers.js b/app/addons/config/reducers.js
deleted file mode 100644
index 4952fb1..0000000
--- a/app/addons/config/reducers.js
+++ /dev/null
@@ -1,172 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  sections: {},
-  loading: true,
-  editSectionName: null,
-  editOptionName: null,
-  saving: false
-};
-
-function saveOption(state, { sectionName, optionName, value }) {
-  const newSections = {
-    ...state.sections
-  };
-
-  if (!newSections[sectionName]) {
-    newSections[sectionName] = {};
-  }
-
-  newSections[sectionName][optionName] = value || true;
-  return newSections;
-}
-
-function deleteOption(state, { sectionName, optionName }) {
-  const newSections = {
-    ...state.sections
-  };
-
-  if (newSections[sectionName]) {
-    // copy object
-    newSections[sectionName] = {...newSections[sectionName]};
-    delete newSections[sectionName][optionName];
-
-    if (Object.keys(newSections[sectionName]).length == 0) {
-      delete newSections[sectionName];
-    }
-  }
-  return newSections;
-}
-
-export function options(state) {
-  const sections = Object.keys(state.sections).map(sectionName => {
-    return {
-      sectionName,
-      options: mapSection(state, sectionName)
-    };
-  });
-  const sortedSections = sections.sort((a, b) => {
-    if (a.sectionName < b.sectionName) return -1;
-    else if (a.sectionName > b.sectionName) return 1;
-    return 0;
-  });
-  // flatten the list of options
-  return sortedSections.map(s => s.options).reduce((acc, options) => {
-    return acc.concat(options);
-  }, []);
-}
-
-function mapSection(state, sectionName) {
-  const section = state.sections[sectionName];
-  const options = Object.keys(section).map(optionName => {
-    return {
-      editing: isEditing(state, sectionName, optionName),
-      sectionName,
-      optionName,
-      value: section[optionName]
-    };
-  });
-  const sortedOptions = options.sort((a, b) => {
-    if (a.optionName < b.optionName) return -1;
-    else if (a.optionName > b.optionName) return 1;
-    return 0;
-  });
-  if (sortedOptions.length > 0) {
-    sortedOptions[0].header = true;
-  }
-  return sortedOptions;
-}
-
-function isEditing(state, sn, on) {
-  return sn === state.editSectionName && on === state.editOptionName;
-}
-
-export default function config(state = initialState, action) {
-  const { options } = action;
-
-  switch (action.type) {
-    case ActionTypes.EDIT_CONFIG:
-      return {
-        ...state,
-        sections: options.sections,
-        loading: false,
-        editOptionName: null,
-        editSectionName: null
-      };
-
-    case ActionTypes.EDIT_OPTION:
-      return {
-        ...state,
-        editSectionName: options.sectionName,
-        editOptionName: options.optionName
-      };
-
-    case ActionTypes.LOADING_CONFIG:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.CANCEL_EDIT:
-      return {
-        ...state,
-        editOptionName: null,
-        editSectionName: null
-      };
-
-    case ActionTypes.SAVING_OPTION:
-      return {
-        ...state,
-        saving: true
-      };
-
-    case ActionTypes.OPTION_SAVE_SUCCESS:
-      return {
-        ...state,
-        editOptionName: null,
-        editSectionName: null,
-        sections: saveOption(state, options),
-        saving: false
-      };
-
-    case ActionTypes.OPTION_SAVE_FAILURE:
-      return {
-        ...state,
-        saving: false
-      };
-
-    case ActionTypes.OPTION_ADD_SUCCESS:
-      return {
-        ...state,
-        sections: saveOption(state, options),
-        saving: false
-      };
-
-    case ActionTypes.OPTION_ADD_FAILURE:
-      return {
-        ...state,
-        saving: false
-      };
-
-    case ActionTypes.OPTION_DELETE_SUCCESS:
-      return {
-        ...state,
-        sections: deleteOption(state, options)
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/config/routes.js b/app/addons/config/routes.js
deleted file mode 100644
index fbc6220..0000000
--- a/app/addons/config/routes.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import ClusterActions from '../cluster/actions';
-import * as ConfigAPI from './api';
-import Layout from './layout';
-
-const ConfigDisabledRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Configuration',
-
-  routes: {
-    '_config': 'checkNodes',
-  },
-
-  crumbs: [
-    { name: 'Config disabled' }
-  ],
-
-  checkNodes: function () {
-    ClusterActions.navigateToNodeBasedOnNodeCount('/_config/');
-  }
-});
-
-
-const ConfigPerNodeRouteObject = FauxtonAPI.RouteObject.extend({
-  roles: ['_admin'],
-  selectedHeader: 'Configuration',
-
-  routes: {
-    '_config/:node': 'configForNode',
-    '_config/:node/cors': 'configCorsForNode'
-  },
-
-  initialize: function () {
-  },
-
-  configForNode: function (node) {
-    return <Layout
-      node={node}
-      docURL={FauxtonAPI.constants.DOC_URLS.CONFIG}
-      endpoint={ConfigAPI.configUrl(node)}
-      crumbs={[{ name: 'Config' }]}
-      showCors={false}
-    />;
-  },
-
-  configCorsForNode: function (node) {
-    return <Layout
-      node={node}
-      docURL={FauxtonAPI.constants.DOC_URLS.CONFIG}
-      endpoint={ConfigAPI.configUrl(node)}
-      crumbs={[{ name: 'Config' }]}
-      showCors={true}
-    />;
-  }
-});
-
-const Config = FauxtonAPI.addon();
-Config.RouteObjects = [ConfigPerNodeRouteObject, ConfigDisabledRouteObject];
-
-export default Config;
diff --git a/app/addons/cors/__tests__/actions.test.js b/app/addons/cors/__tests__/actions.test.js
deleted file mode 100644
index 1ad1034..0000000
--- a/app/addons/cors/__tests__/actions.test.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed 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.
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from "../../../core/api";
-import Actions from "../actions";
-import * as CorsAPI from "../api";
-import sinon from "sinon";
-
-const restore = utils.restore;
-
-describe('CORS actions', () => {
-
-  describe('save', () => {
-
-    const localNode = 'node2@127.0.0.1';
-    const baseURL = 'http://localhost:8000/#_config/couchdb@localhost/cors';
-    const dispatch = sinon.stub();
-    const spyUpdateEnableCorsToHttpd = sinon.stub(CorsAPI, 'updateEnableCorsToHttpd');
-    const spyUpdateCorsOrigins = sinon.stub(CorsAPI, 'updateCorsOrigins');
-    const spyUpdateCorsCredentials = sinon.stub(CorsAPI, 'updateCorsCredentials');
-    const spyUpdateCorsHeaders = sinon.stub(CorsAPI, 'updateCorsHeaders');
-    const spyUpdateCorsMethods = sinon.stub(CorsAPI, 'updateCorsMethods');
-
-    afterEach(() => {
-      restore(FauxtonAPI.Promise.all);
-      restore(FauxtonAPI.addNotification);
-
-      spyUpdateEnableCorsToHttpd.reset();
-      spyUpdateCorsOrigins.reset();
-      spyUpdateCorsCredentials.reset();
-      spyUpdateCorsHeaders.reset();
-      spyUpdateCorsMethods.reset();
-    });
-
-    it('should save enable_cors to httpd', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: false,
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateEnableCorsToHttpd.calledWith(baseURL, localNode, false)).toBeTruthy();
-    });
-
-    it('does not save CORS origins if CORS is not enabled', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: false,
-        origins: ['*'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsOrigins.called).toBeFalsy();
-    });
-
-    it('saves CORS origins', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: true,
-        origins: ['*'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsOrigins.calledWith(baseURL, localNode, '*')).toBeTruthy();
-    });
-
-    it('saves CORS credentials, headers and methods', () => {
-      Actions.saveCors(baseURL, {
-        corsEnabled: true,
-        origins: ['https://testdomain.com'],
-        node: localNode
-      })(dispatch);
-
-      expect(spyUpdateCorsCredentials.calledOnce).toBeTruthy();
-      expect(spyUpdateCorsHeaders.calledOnce).toBeTruthy();
-      expect(spyUpdateCorsMethods.calledOnce).toBeTruthy();
-    });
-
-    it('shows notification on successful save', () => {
-      const stub = sinon.stub(FauxtonAPI.Promise, 'all');
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-      const promise = FauxtonAPI.Promise.resolve();
-      stub.returns(promise);
-
-      return Actions.saveCors(baseURL, {
-        enableCors: true,
-        origins: ['https://testdomain.com'],
-        node: localNode
-      })(dispatch).then(() => {
-        expect(spyAddNotification.called).toBeTruthy();
-      });
-    });
-  });
-
-  describe('Sanitize origins', () => {
-
-    it('joins array into string', () => {
-      var origins = ['https://hello.com', 'https://hello2.com'];
-
-      expect(Actions.sanitizeOrigins(origins)).toEqual(origins.join(','));
-    });
-
-    it('returns empty string for no origins', () => {
-      var origins = [];
-
-      expect(Actions.sanitizeOrigins(origins)).toEqual('');
-    });
-  });
-});
diff --git a/app/addons/cors/__tests__/components.test.js b/app/addons/cors/__tests__/components.test.js
deleted file mode 100644
index b26368c..0000000
--- a/app/addons/cors/__tests__/components.test.js
+++ /dev/null
@@ -1,266 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from "../../../core/api";
-import * as Helpers from "../helpers";
-import Views from "../components";
-import utils from "../../../../test/mocha/testUtils";
-import React from "react";
-import sinon from "sinon";
-import { shallow, mount } from 'enzyme';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-const { restore } = utils;
-
-describe('CORS Components', () => {
-
-  describe('CORSContainer tests', () => {
-
-    afterEach(() => {
-      restore(window.confirm);
-    });
-
-    it('confirms user change from restricted origin to disabled cors', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = shallow(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={['https://localhost']}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      wrapper.find('.enable-disable.btn').simulate('click');
-      sinon.assert.calledOnce(spy);
-    });
-
-    it('does not confirm user change to disable cors when restricted origins are empty', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = shallow(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={true}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('.enable-disable.btn').simulate('click');
-      sinon.assert.notCalled(spy);
-    });
-
-    it('confirms user change when moving from selected origins to all origins', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = mount(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={['http://localhost']}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('input').at(0).simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spy.calledOnce).toBeTruthy();
-    });
-
-    it('does not confirm all origins change if selected origins are emtpy', () => {
-      const spy = sinon.stub(window, 'confirm');
-      spy.returns(false);
-
-      const wrapper = mount(<Views.CORSScreen
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-      wrapper.find('input').at(0).simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spy.calledOnce).toBeFalsy();
-    });
-
-    it('shows loading bars', () => {
-      const wrapper = mount(<Views.CORSScreen
-        isLoading={true}
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      expect(wrapper.find('.loading-lines').exists()).toBeTruthy();
-    });
-
-    it('hides loading bars', () => {
-      const wrapper = mount(<Views.CORSScreen
-        isLoading={false}
-        corsEnabled={true}
-        isAllOrigins={false}
-        origins={[]}
-        saveCORS={sinon.stub()}
-        showDeleteDomainConfirmation={sinon.stub()}
-        fetchAndLoadCORSOptions={sinon.stub()}
-        hideDeleteDomainConfirmation={sinon.stub()}
-      />);
-
-      expect(wrapper.find('.loading-lines').exists()).toBe(false);
-    });
-  });
-
-  describe('OriginInput', () => {
-    const newOrigin = 'http://new-site.com';
-
-    it('calls validates each domain', () => {
-      const spyValidateDomain = sinon.spy(Helpers, 'validateDomain');
-      const wrapper = shallow(<Views.OriginInput isVisible={true} addOrigin={sinon.stub()} />);
-
-      wrapper.find('input').simulate('change', { target: { value: newOrigin } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyValidateDomain.called).toBeTruthy();
-    });
-
-    it('calls addOrigin on add click with valid domain', () => {
-      const addOriginSpy = sinon.spy();
-      const wrapper = mount(<Views.OriginInput isVisible={true} addOrigin={addOriginSpy} />);
-
-      wrapper.find('input').simulate('change', { target: { value: newOrigin } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(addOriginSpy.calledWith(newOrigin)).toBeTruthy();
-    });
-
-    it('shows notification if origin is not valid', () => {
-      const spyAddNotification = sinon.spy(FauxtonAPI, 'addNotification');
-      const wrapper = shallow(<Views.OriginInput isVisible={true} addOrigin={sinon.stub()} />);
-
-      wrapper.find('input').simulate('change', { target: { value: 'badOrigin' } });
-      wrapper.find('.btn').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyAddNotification.calledOnce).toBeTruthy();
-    });
-  });
-
-  describe('Origins', () => {
-    const spyChangeOrigin = sinon.spy();
-
-    afterEach(() => {
-      spyChangeOrigin.resetHistory();
-    });
-
-    it('calls changeOrigin() when you switch from "Select List of Origins" to "Allow All Origins"', () => {
-      const wrapper = shallow(<Views.Origins corsEnabled={true} isAllOrigins={false} originChange={spyChangeOrigin} />);
-
-      wrapper.find('input[value="all"]').simulate('change', { target: { checked: true, value: 'all' } });
-      expect(spyChangeOrigin.calledWith(true)).toBeTruthy();
-    });
-
-    it('calls changeOrigin() when you switch from "Allow All Origins" to "Select List of Origins"', () => {
-      const wrapper = shallow(<Views.Origins corsEnabled={true} isAllOrigins={true} originChange={spyChangeOrigin} />);
-
-      wrapper.find('input[value="selected"]').simulate('change', { target: { checked: true, value: 'selected' } });
-      expect(spyChangeOrigin.calledWith(false)).toBeTruthy();
-    });
-  });
-
-  describe('OriginRow', () => {
-    const spyUpdateOrigin = sinon.spy();
-    const spyDeleteOrigin = sinon.spy();
-    let origin;
-
-    beforeEach(() => {
-      origin = 'https://hello.com';
-    });
-
-    afterEach(() => {
-      spyUpdateOrigin.resetHistory();
-      spyDeleteOrigin.resetHistory();
-    });
-
-    it('should call deleteOrigin on delete', () => {
-      const wrapper = mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={[origin]} />);
-
-      wrapper.find('.fonticon-trash').simulate('click', { preventDefault: sinon.stub() });
-      expect(spyDeleteOrigin.calledOnce).toBeTruthy();
-    });
-
-    it('does not throw error if origins is undefined', () => {
-      mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={undefined} />);
-    });
-
-    it('should change origin to input on edit click, then hide input on 2nd click', () => {
-      const wrapper = mount(<Views.OriginTable
-        updateOrigin={spyUpdateOrigin}
-        deleteOrigin={spyDeleteOrigin}
-        isVisible={true}
-        origins={[origin]} />);
-
-      // Text input appears after clicking Edit
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      expect(wrapper.find('input').exists()).toBeTruthy();
-
-      // Text input is hidden after clicking Edit for the 2nd time
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      expect(wrapper.find('input').exists()).toBe(false);
-    });
-
-    it('should update origin on update clicked', () => {
-      const updatedOrigin = 'https://updated-origin.com';
-      const wrapper = mount(
-        <Views.OriginTable
-          updateOrigin={spyUpdateOrigin}
-          deleteOrigin={spyDeleteOrigin}
-          isVisible={true}
-          origins={[origin]} />
-      );
-
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      wrapper.find('input').simulate('change', { target: { value: updatedOrigin } });
-      wrapper.find('.btn').at(0).simulate('click', { preventDefault: sinon.stub() });
-      expect(spyUpdateOrigin.calledWith(updatedOrigin)).toBeTruthy();
-    });
-
-    it('should not update origin on update clicked with bad origin', () => {
-      const updatedOrigin = 'updated-origin';
-      const wrapper = mount(
-        <Views.OriginTable
-          updateOrigin={spyUpdateOrigin}
-          deleteOrigin={spyDeleteOrigin}
-          isVisible={true}
-          origins={[origin]} />
-      );
-      wrapper.find('.fonticon-pencil').simulate('click', { preventDefault: sinon.stub() });
-      wrapper.find('input').simulate('change', { target: { value: updatedOrigin } });
-      wrapper.find('.btn').at(0).simulate('click', { preventDefault: sinon.stub() });
-      expect(spyUpdateOrigin.calledWith(updatedOrigin)).toBe(false);
-    });
-
-  });
-
-});
diff --git a/app/addons/cors/__tests__/helpers.test.js b/app/addons/cors/__tests__/helpers.test.js
deleted file mode 100644
index b436879..0000000
--- a/app/addons/cors/__tests__/helpers.test.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-import * as Helpers from "../helpers";
-
-describe('CORS helper functions', () => {
-
-  it('allows valid domains', () => {
-    const urls = [
-      'http://something.com',
-      'https://a.ca',
-      'https://something.com:8000',
-      'https://www.some-valid-domain.com:80',
-      'http://localhost',
-      'https://localhost',
-      'http://192.168.1.113',
-      'http://192.168.1.113:1337'
-    ];
-
-    urls.forEach((url) => {
-      expect(Helpers.validateCORSDomain(url)).toBe(true);
-    });
-  });
-
-  it('fails on non http/https domains', () => {
-    const urls = [
-      'whoahnellythisaintright',
-      'ftp://site.com',
-      'https://',
-      'http://'
-    ];
-    _.each(urls, (url) => {
-      expect(Helpers.validateCORSDomain(url)).toBe(false);
-    });
-  });
-
-  it('normalizes common cases, like accidentally added subfolders', () => {
-    expect('https://foo.com').toBe(Helpers.normalizeUrls('https://foo.com/blerg'));
-    expect('https://192.168.1.113').toBe(Helpers.normalizeUrls('https://192.168.1.113/blerg'));
-    expect('https://foo.com:1337').toBe(Helpers.normalizeUrls('https://foo.com:1337/blerg'));
-    expect('https://foo.com').toBe(Helpers.normalizeUrls('https://foo.com'));
-  });
-});
diff --git a/app/addons/cors/actions.js b/app/addons/cors/actions.js
deleted file mode 100644
index 6fa4b00..0000000
--- a/app/addons/cors/actions.js
+++ /dev/null
@@ -1,129 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import ActionTypes from "./actiontypes";
-import * as CorsAPI from "./api";
-
-const fetchAndLoadCORSOptions = (url, node) => (dispatch) => {
-  const fetchCors = CorsAPI.fetchCORSConfig(url);
-  const fetchHttp = CorsAPI.fetchHttpdConfig(url);
-
-  FauxtonAPI.Promise.join(fetchCors, fetchHttp, (corsConfig, httpdConfig) => {
-    const loadOptions = loadCORSOptions({
-      origins: corsConfig.origins,
-      corsEnabled: httpdConfig.enable_cors === 'true',
-      node: node
-    });
-    dispatch(loadOptions);
-  }).catch((error) => {
-    FauxtonAPI.addNotification({
-      msg: 'Could not load CORS settings.  ' + errorReason(error),
-      type: 'error'
-    });
-  });
-};
-
-const showLoadingBars = () => {
-  return {
-    type: ActionTypes.CORS_SET_IS_LOADING,
-    isLoading: true
-  };
-};
-
-const hideLoadingBars = () => {
-  return {
-    type: ActionTypes.CORS_SET_IS_LOADING,
-    isLoading: false
-  };
-};
-
-const loadCORSOptions = (options) => {
-  return {
-    type: ActionTypes.EDIT_CORS,
-    options: options,
-    isLoading: false
-  };
-};
-
-const showDomainDeleteConfirmation = (domain) => {
-  return {
-    type: ActionTypes.CORS_SHOW_DELETE_DOMAIN_MODAL,
-    domainToDelete: domain
-  };
-};
-
-const hideDomainDeleteConfirmation = () => {
-  return {
-    type: ActionTypes.CORS_HIDE_DELETE_DOMAIN_MODAL
-  };
-};
-
-const saveCors = (url, options) => (dispatch) => {
-  const promises = [];
-
-  promises.push(CorsAPI.updateEnableCorsToHttpd(url, options.node, options.corsEnabled));
-  if (options.corsEnabled) {
-    promises.push(CorsAPI.updateCorsOrigins(url, options.node, sanitizeOrigins(options.origins)));
-    promises.push(CorsAPI.updateCorsCredentials(url, options.node));
-    promises.push(CorsAPI.updateCorsHeaders(url, options.node));
-    promises.push(CorsAPI.updateCorsMethods(url, options.node));
-  }
-
-  return FauxtonAPI.Promise.all(promises).then(() => {
-    FauxtonAPI.addNotification({
-      msg: 'CORS settings updated.',
-      type: 'success',
-      clear: true
-    });
-    dispatch(loadCORSOptions(options));
-  }).catch((error) => {
-    FauxtonAPI.addNotification({
-      msg: 'Error! Could not save your CORS settings. Please try again. ' + errorReason(error),
-      type: 'error',
-      clear: true
-    });
-    dispatch(hideDomainDeleteConfirmation());
-    dispatch(hideLoadingBars());
-  });
-};
-
-const errorReason = (error) => {
-  return 'Reason: ' + ((error && error.message) || 'n/a');
-};
-
-const sanitizeOrigins = (origins) => {
-  if (_.isEmpty(origins)) {
-    return '';
-  }
-
-  return origins.join(',');
-};
-
-const Actions = {
-  fetchAndLoadCORSOptions,
-  showLoadingBars,
-  hideLoadingBars,
-  showDomainDeleteConfirmation,
-  hideDomainDeleteConfirmation,
-  loadCORSOptions,
-  sanitizeOrigins,
-  saveCors,
-  overrideFetchAndLoadCORSOptions: (newFn) => {
-    Actions.fetchAndLoadCORSOptions = newFn;
-  },
-  overrideSaveCors: (newFn) => {
-    Actions.saveCors = newFn;
-  }
-};
-
-export default Actions;
diff --git a/app/addons/cors/actiontypes.js b/app/addons/cors/actiontypes.js
deleted file mode 100644
index 63a58e4..0000000
--- a/app/addons/cors/actiontypes.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed 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.
-
-export default {
-  EDIT_CORS: 'EDIT_CORS',
-  CORS_SET_IS_LOADING: 'CORS_SET_IS_LOADING',
-  CORS_SHOW_DELETE_DOMAIN_MODAL: 'CORS_SHOW_DELETE_DOMAIN_MODAL',
-  CORS_HIDE_DELETE_DOMAIN_MODAL: 'CORS_HIDE_DELETE_DOMAIN_MODAL'
-};
diff --git a/app/addons/cors/api.js b/app/addons/cors/api.js
deleted file mode 100644
index 3d04c60..0000000
--- a/app/addons/cors/api.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed 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.
-
-import {get, put} from '../../core/ajax';
-
-export const fetchCORSConfig = (baseURL) => {
-  const configURL = baseURL + '/cors';
-  return get(configURL).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-
-    const origins = !json.origins ? [] : json.origins.split(',');
-    return {
-      origins: origins,
-      methods: json.methods,
-      credentials: json.credentials,
-      headers: json.headers
-    };
-  });
-};
-
-export const fetchHttpdConfig = (baseURL) => {
-  const configURL = baseURL + '/httpd';
-  return get(configURL).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
-
-export const updateEnableCorsToHttpd = (baseURL, node, enableCors) => {
-  if (!node) {
-    throw new Error('node not set');
-  }
-  const configURL = baseURL + '/httpd/enable_cors';
-  return put(configURL, enableCors.toString())    .then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
-
-export const updateCorsOrigins = (baseURL, node, origins) => {
-  return updateCorsProperty(baseURL, node, 'origins', origins);
-};
-
-export const updateCorsCredentials = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'credentials', 'true');
-};
-
-export const updateCorsHeaders = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'headers', 'accept, authorization, content-type, origin, referer');
-};
-
-export const updateCorsMethods = (baseURL, node) => {
-  return updateCorsProperty(baseURL, node, 'methods', 'GET, PUT, POST, HEAD, DELETE');
-};
-
-const updateCorsProperty = (baseURL, node, propName, propValue) => {
-  if (!node) {
-    throw new Error('node not set');
-  }
-  const configURL = baseURL + '/cors/' + propName;
-  return put(configURL, propValue).then((json) => {
-    if (json.error) {
-      throw new Error(json.reason);
-    }
-    return json;
-  });
-};
diff --git a/app/addons/cors/assets/less/cors.less b/app/addons/cors/assets/less/cors.less
deleted file mode 100644
index c9aaf45..0000000
--- a/app/addons/cors/assets/less/cors.less
+++ /dev/null
@@ -1,146 +0,0 @@
-//  Licensed 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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.cors-page {
-  .loading-lines {
-    margin-top: 20px;
-  }
-  .enable-disable.btn {
-    margin-top: 10px;
-  }
-
-}
-
-
-
-#cors-header {
-  margin: 18px 30px 0 30px;
-}
-
-#corsForm {
-  margin: 0;
-
-  .checkbox {
-    font-size: 16px;
-
-    input[type='checkbox'] {
-      margin-top: 4px;
-    }
-  }
-  .radio {
-    font-size: 16px;
-
-    input[type='radio'] {
-      margin-top: 4px;
-    }
-  }
-
-  .cors-enable {
-    padding: 10px 30px 18px 30px;
-    border-bottom: 1px solid #ccc;
-  }
-  #origin-domains-container {
-    button.add-domain {
-      height: 46px;
-    }
-  }
-  #collapsing-container {
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #ccc;
-    padding: 18px 30px;
-  }
-  .origin-domains {
-    margin: 0;
-    padding: 18px 0px;
-
-    p {
-      line-height: 36px;
-    }
-    .controls {
-      margin-top: 18px;
-    }
-  }
-  .localhost-tip {
-    padding: 18px 30px;
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #ccc;
-  }
-  .form-actions {
-    padding: 18px 30px;
-    margin-top: 0;
-    border-top: 1px solid #fff;
-  }
-
-  .input-append {
-      width: 80%;
-  }
-
-  input[type='text'] {
-    width: 100%;
-  }
-
-  .input-append.edit-domain-section {
-    width : 100%;
-    margin-bottom: 0px;
-
-    input {
-      width: calc(100% ~"-" 82px);
-      /*
-        the 'update' button is 76 px wide,
-        so 82px gives it a little room
-        compatible browsers: http://caniuse.com/#feat=calc
-      */
-    }
-  }
-}
-
-#origin-domain-table {
-  td {
-    padding: 8px 2px;
-  }
-  span {
-    cursor: pointer;
-    color: @brandHighlight;
-    display: inline-block;
-    padding-top: 9px;
-  }
-
-  tr a {
-    text-decoration: none;
-    color: @subListGray;
-  }
-
-  tr a:hover {
-    color: @hoverHighlight;
-  }
-
-  .edit-domain-section {
-    .btn {
-      height: 46px;
-    }
-  }
-  .url-display {
-    padding: 10px;
-  }
-
-  .update-domain-btn {
-    position: absolute;
-    right: -2px;
-    top: 0;
-    padding: 9px;
-    border-radius: 0 6px 6px 0;
-  }
-}
diff --git a/app/addons/cors/base.js b/app/addons/cors/base.js
deleted file mode 100644
index f9c475f..0000000
--- a/app/addons/cors/base.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import "./assets/less/cors.less";
-import reducers from "./reducers";
-
-const CORS = FauxtonAPI.addon();
-
-CORS.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  cors: reducers
-});
-
-export default CORS;
diff --git a/app/addons/cors/components.js b/app/addons/cors/components.js
deleted file mode 100644
index 71d0bbc..0000000
--- a/app/addons/cors/components.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import CORSContainer from "./components/CORSContainer";
-import CORSScreen from "./components/CORSScreen";
-import OriginInput from "./components/OriginInput";
-import Origins from "./components/Origins";
-import OriginTable from "./components/OriginTable";
-import OriginRow from "./components/OriginRow";
-
-export default {
-  CORSContainer,
-  CORSScreen,
-  OriginInput,
-  Origins,
-  OriginTable,
-  OriginRow
-};
-
-
-
-
-
-
-
-
-
-
diff --git a/app/addons/cors/components/CORSContainer.js b/app/addons/cors/components/CORSContainer.js
deleted file mode 100644
index 4e5de7d..0000000
--- a/app/addons/cors/components/CORSContainer.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { connect } from 'react-redux';
-import CORSScreen from './CORSScreen';
-import Actions from '../actions';
-
-const mapStateToProps = ({ cors }) => {
-  return {
-    node: cors.node,
-    corsEnabled: cors.corsEnabled,
-    isAllOrigins: cors.isAllOrigins,
-    isLoading: cors.isLoading,
-    origins: cors.origins,
-    deleteDomainModalVisible: cors.deleteDomainModalVisible,
-    domainToDelete: cors.domainToDelete
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    saveCORS: (options) => {
-      dispatch(Actions.showLoadingBars());
-      dispatch(Actions.saveCors(ownProps.url, options));
-    },
-
-    fetchAndLoadCORSOptions: () => {
-      dispatch(Actions.fetchAndLoadCORSOptions(ownProps.url, ownProps.node));
-    },
-
-    showDeleteDomainConfirmation: (domain) => {
-      dispatch(Actions.showDomainDeleteConfirmation(domain));
-    },
-
-    hideDeleteDomainConfirmation: () => {
-      dispatch(Actions.hideDomainDeleteConfirmation());
-    }
-  };
-};
-
-const CORSContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(CORSScreen);
-
-export default CORSContainer;
diff --git a/app/addons/cors/components/CORSScreen.js b/app/addons/cors/components/CORSScreen.js
deleted file mode 100644
index e5d76b8..0000000
--- a/app/addons/cors/components/CORSScreen.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import React, { Component } from "react";
-import app from "../../../app";
-import ReactComponents from "../../components/react-components";
-import FauxtonComponents from "../../fauxton/components";
-import Origins from "./Origins";
-import OriginInput from "./OriginInput";
-import OriginTable from "./OriginTable";
-
-const LoadLines = ReactComponents.LoadLines;
-const ConfirmationModal = FauxtonComponents.ConfirmationModal;
-
-export default class CORSScreen extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    this.props.fetchAndLoadCORSOptions();
-  }
-
-  enableCorsChange() {
-    const { corsEnabled, origins, node } = this.props;
-    if (corsEnabled && !_.isEmpty(origins)) {
-      const result = window.confirm(app.i18n.en_US['cors-disable-cors-prompt']);
-      if (!result) { return; }
-    }
-    this.props.saveCORS({
-      corsEnabled: !corsEnabled,
-      origins: origins,
-      node: node
-    });
-  }
-
-  save() {
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: this.props.origins,
-      node: this.props.node
-    });
-  }
-
-  originChange(isAllOrigins) {
-    if (isAllOrigins && !_.isEmpty(this.props.origins)) {
-      const result = window.confirm('Are you sure? Switching to all origin domains will overwrite your specific origin domains.');
-      if (!result) { return; }
-    }
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: isAllOrigins ? ['*'] : [],
-      node: this.props.node
-    });
-  }
-
-  addOrigin(origin) {
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: this.props.origins.concat(origin),
-      node: this.props.node
-    });
-  }
-
-  updateOrigin(updatedOrigin, originalOrigin) {
-    const newOrigins = this.props.origins.slice();
-    const index = _.indexOf(newOrigins, originalOrigin);
-    if (index === -1) { return; }
-    newOrigins[index] = updatedOrigin;
-
-    this.props.saveCORS({
-      corsEnabled: this.props.corsEnabled,
-      origins: newOrigins,
-      node: this.props.node
-    });
-  }
-
-  deleteOrigin() {
-    const { corsEnabled, origins, node, domainToDelete } = this.props;
-    const index = this.props.origins.indexOf(domainToDelete);
-    if (index === -1) { return; }
-    const newOrigins = [
-      ...origins.slice(0, index),
-      ...origins.slice(index + 1)
-    ];
-
-    this.props.saveCORS({
-      corsEnabled: corsEnabled,
-      origins: newOrigins,
-      node: node
-    });
-  }
-
-  render() {
-    const isVisible = [this.props.corsEnabled, !this.props.isAllOrigins].every((elem) => elem === true);
-
-    let originSettings = (
-      <div id={this.props.corsEnabled ? 'collapsing-container' : ''}>
-        <Origins
-          corsEnabled={this.props.corsEnabled}
-          originChange={this.originChange.bind(this)}
-          isAllOrigins={this.props.isAllOrigins} />
-        <OriginTable
-          updateOrigin={this.updateOrigin.bind(this)}
-          deleteOrigin={this.props.showDeleteDomainConfirmation}
-          isVisible={isVisible}
-          origins={this.props.origins} />
-        <OriginInput
-          addOrigin={this.addOrigin.bind(this)}
-          isVisible={isVisible} />
-      </div>
-    );
-
-    if (this.props.isLoading) {
-      originSettings = (<LoadLines />);
-    }
-    const deleteMsg = <span>Are you sure you want to delete <code>{_.escape(this.props.domainToDelete)}</code>?</span>;
-
-    return (
-      <div className="cors-page flex-body">
-        <header id="cors-header">
-          <p>{app.i18n.en_US['cors-notice']}</p>
-        </header>
-
-        <form id="corsForm" onSubmit={this.save.bind(this)}>
-          <div className="cors-enable">
-            {this.props.corsEnabled ? 'CORS is currently enabled.' : 'CORS is currently disabled.'}
-            <br />
-            <button
-              type="button"
-              className="enable-disable btn btn-secondary"
-              onClick={this.enableCorsChange.bind(this)}
-              disabled={this.props.isLoading ? 'disabled' : null}
-            >
-              {this.props.corsEnabled ? 'Disable CORS' : 'Enable CORS'}
-            </button>
-          </div>
-          {originSettings}
-        </form>
-
-        <ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.deleteDomainModalVisible}
-          text={deleteMsg}
-          buttonClass="btn-danger"
-          onClose={this.props.hideDeleteDomainConfirmation}
-          onSubmit={this.deleteOrigin.bind(this)}
-          successButtonLabel="Delete Domain" />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/cors/components/OriginInput.js b/app/addons/cors/components/OriginInput.js
deleted file mode 100644
index 6ef352c..0000000
--- a/app/addons/cors/components/OriginInput.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import { validateDomain, normalizeUrls } from "../helpers";
-
-export default class OriginInput extends Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      origin: ''
-    };
-  }
-
-  onInputChange(e) {
-    this.setState({ origin: e.target.value });
-  }
-
-  addOrigin(event) {
-    event.preventDefault();
-    if (!validateDomain(this.state.origin)) {
-      return false;
-    }
-
-    const url = normalizeUrls(this.state.origin);
-
-    this.props.addOrigin(url);
-    this.setState({ origin: '' });
-  }
-
-  onKeyUp(e) {
-    if (e.keyCode == 13) {   //enter key
-      return this.addOrigin(e);
-    }
-  }
-
-  render() {
-    if (!this.props.isVisible) {
-      return null;
-    }
-
-    return (
-      <div id="origin-domains-container">
-        <div className="origin-domains">
-          <div className="input-append">
-            <input type="text" name="new_origin_domain" placeholder="https://example.com"
-              onChange={this.onInputChange.bind(this)} value={this.state.origin} />
-            <button onClick={this.addOrigin.bind(this)} className="btn btn-secondary add-domain">
-              <i className="icon fonticon-ok-circled"></i> Add Domain
-            </button>
-          </div>
-        </div>
-      </div>
-    );
-  }
-
-}
-
-OriginInput.propTypes = {
-  isVisible: PropTypes.bool.isRequired,
-  addOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/OriginRow.js b/app/addons/cors/components/OriginRow.js
deleted file mode 100644
index 0e72c5b..0000000
--- a/app/addons/cors/components/OriginRow.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import { validateDomain } from "../helpers";
-
-
-export default class OriginRow extends Component {
-
-  constructor (props) {
-    super(props);
-    this.state = {
-      edit: false,
-      updatedOrigin: this.props.origin
-    };
-  }
-
-  editOrigin(e) {
-    e.preventDefault();
-    this.setState({ edit: !this.state.edit });
-  }
-
-  updateOrigin (e) {
-    e.preventDefault();
-    if (!validateDomain(this.state.updatedOrigin)) {
-      return;
-    }
-
-    if (this.state.updatedOrigin && this.props.origin !== this.state.updatedOrigin) {
-      this.props.updateOrigin(this.state.updatedOrigin, this.props.origin);
-    }
-    this.setState({ edit: false });
-  }
-
-  deleteOrigin (e) {
-    e.preventDefault();
-    this.props.deleteOrigin(this.props.origin);
-  }
-
-  onInputChange (event) {
-    this.setState({ updatedOrigin: event.target.value });
-  }
-
-  onKeyUp (e) {
-    if (e.keyCode === 13) {   //enter key
-      return this.updateOrigin(e);
-    }
-  }
-
-  createOriginDisplay () {
-    if (this.state.edit) {
-      return (
-        <div className="input-append edit-domain-section">
-          <input type="text" name="update_origin_domain" onChange={ this.onInputChange.bind(this) } onKeyUp={ this.onKeyUp.bind(this) } value={this.state.updatedOrigin} />
-          <button onClick={ this.updateOrigin.bind(this) } className="btn btn-primary update-origin"> Update </button>
-        </div>
-      );
-    }
-    return <div className="js-url url-display">{this.props.origin}</div>;
-  }
-
-  render () {
-    const display = this.createOriginDisplay();
-    return (
-      <tr>
-        <td>
-          {display}
-        </td>
-        <td width="30">
-          <span>
-            <a className="fonticon-pencil" onClick={ this.editOrigin.bind(this) } title="Edit domain." />
-          </span>
-        </td>
-        <td width="30">
-          <span>
-            <a href="#" data-bypass="true" className="fonticon-trash" onClick={ this.deleteOrigin.bind(this) } title="Delete domain." />
-          </span>
-        </td>
-      </tr>
-    );
-  }
-
-}
-
-OriginRow.propTypes = {
-  origin: PropTypes.string.isRequired,
-  updateOrigin: PropTypes.func.isRequired,
-  deleteOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/OriginTable.js b/app/addons/cors/components/OriginTable.js
deleted file mode 100644
index be9f30d..0000000
--- a/app/addons/cors/components/OriginTable.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-import OriginRow from "./OriginRow";
-
-export default class OriginTable extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  createRows () {
-    return this.props.origins.map((origin, i) => {
-      return <OriginRow
-        updateOrigin={this.props.updateOrigin}
-        deleteOrigin={this.props.deleteOrigin}
-        key={i} origin={origin} />;
-    });
-  }
-
-  render () {
-    const {origins, isVisible} = this.props;
-
-    if (!origins) {
-      return null;
-    }
-
-    if (!isVisible || origins.length === 0) {
-      return null;
-    }
-
-    const originRows = this.createRows();
-
-    return (
-      <table id="origin-domain-table" className="table table-striped">
-        <tbody>
-          {originRows}
-        </tbody>
-      </table>
-    );
-  }
-
-}
-
-OriginTable.propTypes = {
-  isVisible: PropTypes.bool.isRequired,
-  origins: PropTypes.arrayOf(PropTypes.string),
-  updateOrigin: PropTypes.func.isRequired,
-  deleteOrigin: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/components/Origins.js b/app/addons/cors/components/Origins.js
deleted file mode 100644
index e64bf24..0000000
--- a/app/addons/cors/components/Origins.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Component } from "react";
-
-export default class Origins extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  onOriginChange (event) {
-    if (event.target.value === 'all' && this.props.isAllOrigins) {
-      return;   // do nothing if all origins is already selected
-    }
-    if (event.target.value === 'selected' && !this.props.isAllOrigins) {
-      return;   // do nothing if specific origins is already selected
-    }
-
-    this.props.originChange(event.target.value === 'all');
-  }
-
-  render () {
-
-    if (!this.props.corsEnabled) {
-      return null;
-    }
-
-    return (
-      <div>
-        <p><strong> Origin Domains </strong> </p>
-        <p>Databases will accept requests from these domains: </p>
-        <label className="radio">
-          <input type="radio" checked={this.props.isAllOrigins} value="all" onChange={ this.onOriginChange.bind(this) } name="all-domains"/> All domains ( * )
-        </label>
-        <label className="radio">
-          <input type="radio" checked={!this.props.isAllOrigins} value="selected" onChange={ this.onOriginChange.bind(this) } name="selected-domains"/> Restrict to specific domains
-        </label>
-      </div>
-    );
-  }
-}
-
-Origins.propTypes = {
-  corsEnabled: PropTypes.bool,
-  isAllOrigins: PropTypes.bool,
-  originChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/cors/helpers.js b/app/addons/cors/helpers.js
deleted file mode 100644
index 3ecf4f0..0000000
--- a/app/addons/cors/helpers.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-
-export const validateDomain = (domain) => {
-  if (!validateCORSDomain(domain)) {
-    FauxtonAPI.addNotification({
-      msg: 'Please enter a valid domain, starting with http/https.',
-      type: 'error',
-      clear: true
-    });
-    return false;
-  }
-  return true;
-};
-
-export const validateCORSDomain = (domain) => {
-  return (/^https?:\/\/(.+)(:\d{2,5})?$/).test(domain);
-};
-
-export const normalizeUrls = (url) => {
-  const el = document.createElement('a');
-  el.href = url;
-
-  if (/:/.test(url)) {
-    return el.protocol + '//' + el.host;
-  }
-
-  return el.protocol + '//' + el.hostname;
-};
-
-
-
-
diff --git a/app/addons/cors/reducers.js b/app/addons/cors/reducers.js
deleted file mode 100644
index 81ede61..0000000
--- a/app/addons/cors/reducers.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from "./actiontypes";
-import _ from "lodash";
-
-const initialState = {
-  corsEnabled: false,
-  origins: [],
-  isAllOrigins: false,
-  configChanged: false,
-  shouldSaveChange: false,
-  node: '',
-  isLoading: true,
-  deleteDomainModalVisible: false,
-  domainToDelete: ''
-};
-
-export default function cors (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.EDIT_CORS:
-      const corsOptions = action.options;
-      return {
-        ...state,
-        isLoading: false,
-        node: corsOptions.node,
-        corsEnabled: corsOptions.corsEnabled,
-        isAllOrigins: _.includes(corsOptions.origins, '*'),
-        origins: corsOptions.origins,
-        deleteDomainModalVisible: false,
-        domainToDelete: ''
-      };
-
-    case ActionTypes.CORS_SHOW_DELETE_DOMAIN_MODAL:
-      return {
-        ...state,
-        deleteDomainModalVisible: true,
-        domainToDelete: action.domainToDelete
-      };
-
-    case ActionTypes.CORS_HIDE_DELETE_DOMAIN_MODAL:
-      return {
-        ...state,
-        deleteDomainModalVisible: false,
-        domainToDelete: ''
-      };
-
-    case ActionTypes.CORS_SET_IS_LOADING:
-      return {
-        ...state,
-        isLoading: action.isLoading
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/databases/__tests__/components.test.js b/app/addons/databases/__tests__/components.test.js
deleted file mode 100644
index 6522e5d..0000000
--- a/app/addons/databases/__tests__/components.test.js
+++ /dev/null
@@ -1,266 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from "../../../core/api";
-import Actions from "../actions";
-import Stores from "../stores";
-import utils from "../../../../test/mocha/testUtils";
-import React from "react";
-import { mount } from 'enzyme';
-import sinon from 'sinon';
-import Views from "../components";
-
-const store = Stores.databasesStore;
-
-describe('AddDatabaseWidget', () => {
-
-  beforeEach(() => {
-    sinon.stub(Actions, 'createNewDatabase');
-  });
-
-  afterEach(() => {
-    Actions.createNewDatabase.restore();
-  });
-
-  it("creates a database with given name", () => {
-    const el = mount(<Views.AddDatabaseWidget />);
-    el.setState({databaseName: 'my-db'});
-    el.instance().onAddDatabase();
-    sinon.assert.calledWith(Actions.createNewDatabase, 'my-db');
-  });
-
-  it('creates a partitioned database', () => {
-    const el = mount(<Views.AddDatabaseWidget showPartitionedOption={true}/>);
-    el.setState({databaseName: 'my-db', partitionedSelected: true});
-    el.instance().onAddDatabase();
-    sinon.assert.calledWith(Actions.createNewDatabase, 'my-db', true);
-  });
-});
-
-
-describe('DatabasePagination', () => {
-
-  beforeEach(() => {
-    store.reset();
-  });
-
-  afterEach(() => {
-    sinon.restore();
-  });
-
-  it('uses custom URL prefix on the navigation if passed through props', () => {
-    const mockNavigate = sinon.stub(FauxtonAPI, 'navigate');
-    const pagination = mount(<Views.DatabasePagination linkPath="_custom_path" />);
-    const links = pagination.find('a');
-
-    expect(links.length).toBe(3);
-    links.forEach(link => {
-      link.simulate('click', { preventDefault: () => {}});
-      sinon.assert.calledWithMatch(mockNavigate, '_custom_path');
-      mockNavigate.reset();
-    });
-  });
-
-  it('sets the correct page and perPage values', () => {
-    const mockNavigate = sinon.stub(FauxtonAPI, 'navigate');
-    store._fullDbList = ['db1', 'db2', 'db3', 'db4'];
-    store._page = 2;
-    store._limit = 2;
-    const pagination = mount(<Views.DatabasePagination />);
-    const links = pagination.find('a');
-    // "<<" link
-    links.at(0).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=1&limit=2');
-    mockNavigate.reset();
-
-    // page "2" link
-    links.at(2).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=2&limit=2');
-    mockNavigate.reset();
-
-    // ">>" link
-    links.at(3).simulate('click', { preventDefault: () => {}});
-    sinon.assert.calledWithMatch(mockNavigate, 'page=2&limit=2');
-  });
-
-  it('renders the database count and range', () => {
-    const controller = mount(<Views.DatabasePagination linkPath="_custom_path" />);
-    const dbList = [];
-
-    for (let i = 0; i < 30; i++) {
-      dbList.push(`db-${i}`);
-    }
-
-    Actions.updateDatabases({
-      dbList: dbList.slice(0, 10),
-      databaseDetails: [],
-      failedDbs: [],
-      fullDbList: dbList
-    });
-
-    expect(controller.find('.all-db-footer__range').text()).toBe('1–20');
-    expect(controller.find('.all-db-footer__total-db-count').text()).toBe('30');
-  });
-
-});
-
-describe('DatabaseTable', () => {
-  beforeEach(() => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: ['db1'],
-      fullDbList: ['db1']
-    });
-    // To avoid console.error() in app/core/api.js
-    sinon.stub(FauxtonAPI, 'urls').returns('/fake/url');
-  });
-
-  afterEach(() => {
-    utils.restore(FauxtonAPI.urls);
-  });
-
-  it('adds multiple extra columns if extended', () => {
-    class ColHeader1 extends React.Component {
-      render() { return <th>EXTRA COL 1</th>; }
-    }
-
-    class ColHeader2 extends React.Component {
-      render() { return <th>EXTRA COL 2</th>; }
-    }
-
-    class ColHeader3 extends React.Component {
-      render() { return <th>EXTRA COL 3</th>; }
-    }
-
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader1);
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader2);
-    FauxtonAPI.registerExtension('DatabaseTable:head', ColHeader3);
-
-    var table = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} loading={false} dbList={[]} showPartitionedColumn={false}/>
-    );
-    var cols = table.find('th');
-
-    // (default # of rows is 4)
-    expect(cols.length).toBe(7);
-
-    FauxtonAPI.unRegisterExtension('DatabaseTable:head');
-  });
-
-  it('adds multiple extra column in DatabaseRow if extended', () => {
-    class Cell extends React.Component {
-      render() { return <td>EXTRA CELL</td>; }
-    }
-
-    FauxtonAPI.registerExtension('DatabaseTable:databaseRow', Cell);
-
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    var links = databaseRow.find('td');
-
-    // (default # of rows is 4)
-    expect(links.length).toBe(5);
-
-    FauxtonAPI.unRegisterExtension('DatabaseTable:databaseRow');
-
-    Stores.databasesStore.reset();
-  });
-
-  it('shows error message if row marked as failed to load', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: ['db1'],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    expect(databaseRow.find('.database-load-fail').length).toBe(1);
-  });
-
-  it('shows no error if row marked as loaded', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes: {}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    var databaseRow = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-
-    expect(databaseRow.find('.database-load-fail').length).toBe(0);
-  });
-
-  it('shows Partitioned column only when prop is set to true', () => {
-    Actions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0, sizes:{}, props: {partitioned: true}}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const list = store.getDbList();
-
-    const withPartColumn = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={true}/>
-    );
-    const colHeaders = withPartColumn.find('th');
-    expect(colHeaders.length).toBe(5);
-    expect(colHeaders.get(3).props.children).toBe('Partitioned');
-
-    const withoutPartColumn = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={false}/>
-    );
-    expect(withoutPartColumn.find('th').length).toBe(4);
-  });
-
-  it('shows correct values in the Partitioned column', () => {
-    Actions.updateDatabases({
-      dbList: ['db1', 'db2'],
-      databaseDetails: [
-        {db_name: 'db1', doc_count: 1, doc_del_count: 0, sizes: {}, props: {partitioned: true}},
-        {db_name: 'db2', doc_count: 2, doc_del_count: 0, sizes: {}, props: {partitioned: false}}
-      ],
-      failedDbs: [],
-      fullDbList: ['db1', 'db2']
-    });
-
-    const list = store.getDbList();
-
-    const dbTable = mount(
-      <Views.DatabaseTable showDeleteDatabaseModal={{showModal: false}} dbList={list} loading={false} showPartitionedColumn={true}/>
-    );
-    const colCells = dbTable.find('td');
-    // 2 rows with 5 cells each
-    expect(colCells.length).toBe(10);
-    expect(colCells.get(3).props.children).toBe('Yes');
-    expect(colCells.get(8).props.children).toBe('No');
-  });
-});
diff --git a/app/addons/databases/__tests__/databasepagination.test.js b/app/addons/databases/__tests__/databasepagination.test.js
deleted file mode 100644
index f29c84d..0000000
--- a/app/addons/databases/__tests__/databasepagination.test.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-import Stores from "../stores";
-import React from 'react';
-import ReactDOM from 'react-dom';
-import "../../documents/base";
-import DatabaseActions from "../actions";
-import {mount} from 'enzyme';
-import DatabaseComponents from "../components";
-
-const store = Stores.databasesStore;
-
-describe('Database Pagination', function () {
-
-  it('renders correct pagination upon store change', () => {
-    DatabaseActions.updateDatabases({
-      dbList: ['db1'],
-      databaseDetails: [{db_name: 'db1', doc_count: 0, doc_del_count: 0}],
-      failedDbs: [],
-      fullDbList: ['db1']
-    });
-
-    const tempStore = {
-      getTotalAmountOfDatabases: () => { return 10; },
-      getPage: () => { return 1; },
-      getLimit: () => { return 20; },
-      on: () => {},
-      off: () => {}
-    };
-
-    const pagination = mount(<DatabaseComponents.DatabasePagination store={tempStore} />);
-    expect(pagination.find('.all-db-footer__total-db-count').text()).toMatch('10');
-
-    // switch stores
-    pagination.setProps({store: store});
-    expect(pagination.find('.all-db-footer__total-db-count').text()).toMatch('1');
-  });
-
-});
diff --git a/app/addons/databases/__tests__/reducers.test.js b/app/addons/databases/__tests__/reducers.test.js
deleted file mode 100644
index 4f57bab..0000000
--- a/app/addons/databases/__tests__/reducers.test.js
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed 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.
-
-import databases from '../reducers';
-import ActionTypes from '../actiontypes';
-
-describe('Databases Reducer', () => {
-
-  it('sets if partioned database feature is available', () => {
-    const action = {
-      type: ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE,
-      options: { available: true }
-    };
-    let newState = databases(undefined, { type: 'DO_NOTHIN'});
-    expect(newState.partitionedDatabasesAvailable).toBe(false);
-
-    newState = databases(newState, action);
-    expect(newState.partitionedDatabasesAvailable).toBe(true);
-  });
-
-  it('sets isPartitioned to false when props is not present', () => {
-    const action = {
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-      options: {
-        metadata: { name: 'dummy_db' }
-      }
-    };
-    const newState = databases(undefined, action);
-    expect(newState.isDbPartitioned).toBe(false);
-    expect(newState.dbInfo).toBeDefined();
-    expect(newState.dbInfo.name).toBe('dummy_db');
-  });
-
-  it('sets isPartitioned based on db metadata', () => {
-    const action = {
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-      options: {
-        metadata: {
-          name: 'dummy_db',
-          props: { partitioned: true }
-        }
-      }
-    };
-    const newState = databases(undefined, action);
-    expect(newState.isDbPartitioned).toBe(true);
-
-    action.options.metadata.props.partitioned = false;
-    const newState2 = databases(undefined, action);
-    expect(newState2.isDbPartitioned).toBe(false);
-  });
-
-});
diff --git a/app/addons/databases/__tests__/stores.test.js b/app/addons/databases/__tests__/stores.test.js
deleted file mode 100644
index 0e94b11..0000000
--- a/app/addons/databases/__tests__/stores.test.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed 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.
-
-import Stores from "../stores";
-import "../../documents/base";
-
-import DatabaseActions from "../actions";
-
-const store = Stores.databasesStore;
-describe('Databases Store', function () {
-
-  describe('database list storage', function () {
-
-    beforeEach(() => {
-      store.reset();
-    });
-
-    it('marks failed detail fetches as failed dbs', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1', 'db2'],
-        databaseDetails: [{db_name: 'db1', sizes: {}}, {db_name: 'db2', sizes: {}}],
-        failedDbs: ['db1']
-      });
-
-      const list = store.getDbList();
-
-      expect(list[0].failed).toBeTruthy();
-    });
-
-    it('unions details', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1'],
-        databaseDetails: [{db_name: 'db1', doc_count: 5, doc_del_count: 3, sizes: {}}],
-        failedDbs: []
-      });
-
-      const list = store.getDbList();
-
-      expect(list[0].docCount).toBe(5);
-      expect(list[0].docDelCount).toBe(3);
-    });
-
-    it('determines database availability', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1', 'db2'],
-        databaseDetails: [],
-        failedDbs: []
-      });
-
-      expect(store.doesDatabaseExist('db1')).toBeTruthy();
-      expect(!store.doesDatabaseExist('db3')).toBeTruthy();
-    });
-
-    it('uses the sizes.active prop', () => {
-      DatabaseActions.updateDatabases({
-        dbList: ['db1'],
-        databaseDetails: [{
-          db_name: 'db1',
-          doc_count: 5,
-          doc_del_count: 3,
-          sizes: {
-            active: 1337,
-            external: 0,
-            file: 0,
-          }
-        }],
-        failedDbs: []
-      });
-
-      const dbList = store.getDbList();
-
-      expect(dbList[0].dataSize).toBe('1.3 KB');
-    });
-
-  });
-
-});
diff --git a/app/addons/databases/actions.js b/app/addons/databases/actions.js
deleted file mode 100644
index d576c7e..0000000
--- a/app/addons/databases/actions.js
+++ /dev/null
@@ -1,256 +0,0 @@
-// Licensed 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.
-import app from '../../app';
-import Helpers from '../../helpers';
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-import DatabasesBase from '../databases/base';
-import Stores from './stores';
-import ActionTypes from './actiontypes';
-import * as API from './api';
-
-function getDatabaseDetails (dbList, fullDbList) {
-  const databaseDetails = [];
-  const failedDbs = [];
-  let seen = 0;
-
-  dbList.forEach((db) => {
-    const url = FauxtonAPI.urls('databaseBaseURL', 'server', db);
-
-    fetch(url)
-      .then((res) => {
-        databaseDetails.push(res);
-      }).catch(() => {
-        failedDbs.push(db);
-      }).then(() => {
-        seen++;
-        if (seen !== dbList.length) {
-          return;
-        }
-        updateDatabases({
-          dbList: dbList,
-          databaseDetails: databaseDetails,
-          failedDbs: failedDbs,
-          fullDbList: fullDbList
-        });
-      });
-  });
-}
-
-function fetch (url) {
-  return get(url).then(res => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    return res;
-  });
-}
-
-function getDatabaseList () {
-  const url = FauxtonAPI.urls('allDBs', 'server');
-
-  return fetch(url);
-}
-
-function paginate (list, page, perPage) {
-  const start = (page - 1) * perPage;
-  const end = page * perPage;
-  return list.slice(start, end);
-}
-
-function updateDatabases (options) {
-  FauxtonAPI.dispatch({
-    type: ActionTypes.DATABASES_UPDATE,
-    options: options
-  });
-}
-
-export default {
-  getDatabaseList,
-  paginate,
-  getDatabaseDetails,
-  fetch,
-  updateDatabases,
-
-  init({page, limit}) {
-    this.setStartLoading();
-    this.setPage(page);
-    if (limit) {
-      this.setLimit(limit);
-    }
-
-    getDatabaseList(limit, page)
-      .then((fullDbList) => {
-        const paginatedDbList = paginate(fullDbList, page, limit);
-
-        this.updateDatabases({
-          dbList: paginatedDbList,
-          databaseDetails: [],
-          failedDbs: [],
-          fullDbList: fullDbList
-        });
-
-        getDatabaseDetails(paginatedDbList, fullDbList);
-      });
-  },
-
-  setPage(page) {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SETPAGE,
-      options: {
-        page
-      }
-    });
-  },
-
-  setLimit(limit) {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SETLIMIT,
-      options: {
-        limit
-      }
-    });
-  },
-
-  setStartLoading() {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_STARTLOADING
-    });
-  },
-
-  setLoadComplete() {
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_LOADCOMPLETE
-    });
-  },
-
-  createNewDatabase(databaseName, partitioned) {
-    if (_.isNull(databaseName) || databaseName.trim().length === 0) {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter a valid database name',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-    databaseName = databaseName.trim();
-    // name accepted, make sure prompt can be removed
-    FauxtonAPI.dispatch({
-      type: ActionTypes.DATABASES_SET_PROMPT_VISIBLE,
-      options: {
-        visible: false
-      }
-    });
-
-    const db = Stores.databasesStore.obtainNewDatabaseModel(databaseName, partitioned);
-    FauxtonAPI.addNotification({ msg: 'Creating database.' });
-    db.save().done(() => {
-      FauxtonAPI.addNotification({
-        msg: 'Database created successfully',
-        type: 'success',
-        clear: true
-      });
-      const route = FauxtonAPI.urls('allDocs', 'app', app.utils.safeURLName(databaseName));
-      app.router.navigate(route, { trigger: true });
-    }
-    ).fail((xhr) => {
-      const responseText = JSON.parse(xhr.responseText).reason;
-      FauxtonAPI.addNotification({
-        msg: 'Create database failed: ' + responseText,
-        type: 'error',
-        clear: true
-      });
-    }
-    );
-  },
-
-  jumpToDatabase(databaseName) {
-    if (_.isNull(databaseName) || databaseName.trim().length === 0) {
-      return;
-    }
-
-    databaseName = databaseName.trim();
-
-    const url = FauxtonAPI.urls('allDocs', 'app', app.utils.safeURLName(databaseName), '');
-    // use the next cpu tick to allow react-select to unmount prorperly
-    return setTimeout(() => { FauxtonAPI.navigate(url); });
-  },
-
-  fetchAllDbsWithKey(id, callback) {
-    const query = '?' + app.utils.queryParams({
-      startkey: JSON.stringify(id),
-      endkey: JSON.stringify(id + '\u9999'),
-      limit: 30
-    });
-
-    const url = Helpers.getServerUrl(`/_all_dbs${query}`);
-    get(url).then((dbs) => {
-      const options = dbs.map(db => {
-        return {
-          value: db,
-          label: db
-        };
-      });
-      callback(null, { options: options });
-    });
-  },
-
-  setPartitionedDatabasesAvailable(available) {
-    const action = {
-      type: ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE,
-      options: {
-        available
-      }
-    };
-    FauxtonAPI.dispatch(action);
-    FauxtonAPI.reduxDispatch(action);
-  },
-
-  checkPartitionedQueriesIsAvailable() {
-    const exts = FauxtonAPI.getExtensions(DatabasesBase.PARTITONED_DB_CHECK_EXTENSION);
-    let promises = exts.map(checkFunction => {
-      return checkFunction();
-    });
-    FauxtonAPI.Promise.all(promises).then(results => {
-      const isAvailable = results.every(check => check === true);
-      this.setPartitionedDatabasesAvailable(isAvailable);
-    }).catch(() => {
-      // ignore as the default is false
-    });
-  },
-
-  // Fetches and sets metadata info for the selected database, which is defined by the current URL
-  // This function is intended to be called by the routers if needed by the components in the page.
-  fetchSelectedDatabaseInfo(databaseName) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA
-    });
-    API.fetchDatabaseInfo(databaseName).then(res => {
-      if (!res.db_name) {
-        const details = res.reason ? res.reason : '';
-        throw new Error('Failed to fetch database info. ' + details);
-      }
-      FauxtonAPI.reduxDispatch({
-        type: ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS,
-        options: {
-          metadata: res
-        }
-      });
-    }).catch(err => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error',
-        clear: true
-      });
-    });
-  }
-};
diff --git a/app/addons/databases/actiontypes.js b/app/addons/databases/actiontypes.js
deleted file mode 100644
index 20f83a5..0000000
--- a/app/addons/databases/actiontypes.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed 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.
-export default {
-  DATABASES_SETPAGE: 'DATABASES_SETPAGE',
-  DATABASES_SETLIMIT: 'DATABASES_SETLIMIT',
-  DATABASES_SET_PROMPT_VISIBLE: 'DATABASES_SET_PROMPT_VISIBLE',
-  DATABASES_STARTLOADING: 'DATABASES_STARTLOADING',
-  DATABASES_LOADCOMPLETE: 'DATABASES_LOADCOMPLETE',
-  DATABASES_UPDATE: 'DATABASES_UPDATE',
-  DATABASES_PARTITIONED_DB_AVAILABLE: 'DATABASES_PARTITIONED_DB_AVAILABLE',
-  DATABASES_FETCH_SELECTED_DB_METADATA: 'DATABASES_FETCH_SELECTED_DB_METADATA',
-  DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS: 'DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS'
-};
diff --git a/app/addons/databases/api.js b/app/addons/databases/api.js
deleted file mode 100644
index a5f4d43..0000000
--- a/app/addons/databases/api.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-
-export const fetchDatabaseInfo = (databaseName) => {
-  const url = FauxtonAPI.urls('databaseBaseURL', 'server', databaseName);
-  return get(url);
-};
diff --git a/app/addons/databases/assets/less/databases.less b/app/addons/databases/assets/less/databases.less
deleted file mode 100644
index 70b23b5..0000000
--- a/app/addons/databases/assets/less/databases.less
+++ /dev/null
@@ -1,137 +0,0 @@
-//  Licensed 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.
-
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.tools .nav {
-  margin-bottom: 10px;
-}
-
-.new-database-tray {
-
-  &:before {
-    right: 250px;
-  }
-
-  input.input-xxlarge {
-    margin-bottom: 0px;
-    width: 100%;
-  }
-
-  a.btn {
-    margin-left: 0;
-    line-height: 1.5em;
-    border: 0px;
-    padding: 10px 10px 9px;
-    font-size: 14px;
-
-    &.btn-cancel {
-      background-color: transparent;
-      border-color: @background;
-      border-width: 1px;
-      border-style: solid;
-      color: @buttonText;
-      &:hover {
-        background-color: @background;
-        color: @hoverHighlight;
-      }
-    }
-  }
-
-  .tray-contents {
-    display: flex;
-    flex-direction: column;
-    height: 100%;
-    width: 352px;
-    overflow-y: scroll;
-  }
-
-  .tray-header {
-    padding-right: 20px;
-    padding-left: 20px;
-    padding-top: 10px;
-  }
-  .tray-body {
-    flex: 1;
-    padding-right: 20px;
-    padding-left: 20px;
-  }
-  .tray-footer {
-    display: flex;
-    justify-content: space-between;
-    padding: 20px;
-    a.btn {
-      min-width: 140px;
-    }
-  }
-
-  .db-name-label {
-    font-weight: bold;
-  }
-
-  .partitioned-db-section {
-    flex: 1;
-  }
-  .partitioned-db-label {
-    font-weight: bold;
-    padding-top: 1rem;
-  }
-  .partitioned-db-options {
-    display: flex;
-    align-items: baseline;
-    input {
-      margin: 0px 10px 0px 0px;
-    }
-  }
-  .partitioned-db-help {
-    padding-top: 1rem;
-    font-size: 0.875rem;
-    border-bottom: 2px solid rgba(255, 255, 255, 0.1);
-  }
-}
-
-.new-database-tray--expanded {
-  height: calc(100% - 64px);
-}
-
-#database-pagination {
-  float: right;
-}
-
-.database-load-fail {
-  color: #999999;
-  height: 49px;
-}
-
-.database-actions > * {
-  margin-right: 10px;
-}
-
-@media screen and (max-width: 768px) {
-  .add-new-database-btn span{
-    display: none;
-  }
-  .new-database-tray:before {
-    right: 185px;
-  }
-}
-
-@media screen and (max-width: 1120px) {
-  // Left nav menuy is closed
-  .new-database-tray {
-    .tray-contents {
-      width: 332px;
-    }
-  }
-}
diff --git a/app/addons/databases/base.js b/app/addons/databases/base.js
deleted file mode 100644
index 8cfd0d3..0000000
--- a/app/addons/databases/base.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import { get } from "../../core/ajax";
-import FauxtonAPI from "../../core/api";
-import Databases from "./routes";
-import Actions from "./actions";
-import reducers from './reducers';
-import "./assets/less/databases.less";
-
-Databases.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    href:"#/_all_dbs",
-    title:"Databases",
-    icon: "fonticon-database",
-    className: 'databases'
-  });
-  Actions.checkPartitionedQueriesIsAvailable();
-};
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? `/_partition/${partitionKey}` : '';
-}
-
-function checkPartitionedDatabaseFeature () {
-  // Checks if the CouchDB server supports Partitioned Databases
-  return get(Helpers.getServerUrl("/")).then((couchdb) => {
-    if (couchdb.features && couchdb.features.includes('partitioned')) {
-      return true;
-    }
-    // Check if it's enabled as an experimental feature
-    if (couchdb.features_flags && couchdb.features_flags.includes('partitioned')) {
-      return true;
-    }
-    return false;
-  }).catch(() => {
-    return false;
-  });
-}
-
-// This extension can be used by addons to add extra checks when
-// deciding if the partitioned database feature should be enabled.
-// The registered element should be a function that returns a
-// Promise resolving to either true or false.
-Databases.PARTITONED_DB_CHECK_EXTENSION = 'Databases:PartitionedDbCheck';
-FauxtonAPI.registerExtension(Databases.PARTITONED_DB_CHECK_EXTENSION, checkPartitionedDatabaseFeature);
-
-FauxtonAPI.addReducers({
-  databases: reducers
-});
-
-// Utility functions
-Databases.databaseUrl = function (database) {
-  var name = _.isObject(database) ? database.id : database,
-      dbname = app.utils.safeURLName(name);
-
-  return ['/database/', dbname, '/_all_docs?limit=' + Databases.DocLimit].join('');
-};
-
-FauxtonAPI.registerUrls('changes', {
-  server: function (id, query) {
-    return Helpers.getServerUrl('/' + id + '/_changes' + query);
-  },
-
-  app: function (id, partitionKey, query) {
-    return '/database/' + id + partitionUrlComponent(partitionKey) + '/_changes' + query;
-  },
-
-  apiurl: function (id, query) {
-    return Helpers.getApiUrl('/' + id + '/_changes' + query);
-  }
-});
-
-FauxtonAPI.registerUrls('allDBs', {
-  server: function (query = '') {
-    return Helpers.getServerUrl(`/_all_dbs${query}`);
-  },
-
-  app: function () {
-    return '_all_dbs';
-  },
-
-  apiurl: function () {
-    return Helpers.getApiUrl('/_all_dbs');
-  }
-});
-
-FauxtonAPI.registerUrls('databaseBaseURL', {
-  server: function (database) {
-    return Helpers.getServerUrl('/' + app.utils.safeURLName(database));
-  },
-  apiurl: function(database) {
-    return Helpers.getApiUrl('/' + app.utils.safeURLName(database));
-  },
-  app: function (database) {
-    return '/database/' + database;
-  }
-});
-
-FauxtonAPI.registerUrls('permissions', {
-  server: function (db) {
-    return Helpers.getServerUrl('/' + db + '/_security');
-  },
-
-  app: function (db, partitionKey) {
-    return '/database/' + db + partitionUrlComponent(partitionKey) + '/permissions';
-  },
-
-  apiurl: function (db) {
-    return Helpers.getApiUrl('/' + db + '/_security');
-  }
-});
-
-export default Databases;
diff --git a/app/addons/databases/components.js b/app/addons/databases/components.js
deleted file mode 100644
index 3e260f0..0000000
--- a/app/addons/databases/components.js
+++ /dev/null
@@ -1,581 +0,0 @@
-import FauxtonAPI from "../../core/api";
-
-// Licensed 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from "react";
-import Components from "../components/react-components";
-import ComponentsStore from "../components/stores";
-import ComponentsActions from "../components/actions";
-import PerPageSelector from '../documents/index-results/components/pagination/PerPageSelector';
-import FauxtonComponentsReact from "..//fauxton/components";
-import Stores from "./stores";
-import Actions from "./actions";
-
-import { Tooltip, OverlayTrigger } from 'react-bootstrap';
-
-const databasesStore = Stores.databasesStore;
-const deleteDbModalStore = ComponentsStore.deleteDbModalStore;
-
-const { Accordion, AccordionItem, DeleteDatabaseModal, ToggleHeaderButton, TrayContents } = Components;
-
-
-class DatabasesController extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.reloadAfterDatabaseDeleted = this.reloadAfterDatabaseDeleted.bind(this);
-  }
-
-  getStoreState = () => {
-    return {
-      dbList: databasesStore.getDbList(),
-      loading: databasesStore.isLoading(),
-      showDeleteDatabaseModal: deleteDbModalStore.getShowDeleteDatabaseModal(),
-      showPartitionedColumn: databasesStore.isPartitionedDatabasesAvailable(),
-      page: databasesStore.getPage(),
-      limit: databasesStore.getLimit()
-    };
-  };
-
-  componentDidMount() {
-    databasesStore.on('change', this.onChange, this);
-    deleteDbModalStore.on('change', this.onChange, this);
-    this.loadData();
-  }
-
-  componentDidUpdate(_, prevState) {
-    if (prevState.page !== this.state.page || prevState.limit !== this.state.limit) {
-      this.loadData();
-    }
-  }
-
-  loadData() {
-    Actions.init({
-      page: this.state.page,
-      limit: this.state.limit
-    });
-  }
-
-  componentWillUnmount() {
-    databasesStore.off('change', this.onChange, this);
-    deleteDbModalStore.off('change', this.onChange, this);
-  }
-
-  onChange = () => {
-    this.setState(this.getStoreState());
-  };
-
-  reloadAfterDatabaseDeleted() {
-    let page = this.state.page;
-    if (page > 1 && this.state.dbList.length === 1) {
-      //show previous page if the db deleted was the only one in the page
-      page = page - 1;
-    }
-    Actions.init({
-      page,
-      limit: this.state.limit
-    });
-  }
-
-  state = this.getStoreState();
-
-  render() {
-    const { loading, dbList } = this.state;
-
-    return (
-      <DatabaseTable
-        showDeleteDatabaseModal={this.state.showDeleteDatabaseModal}
-        dbList={dbList}
-        loading={loading}
-        showPartitionedColumn={this.state.showPartitionedColumn}
-        onDatabaseDeleted={this.reloadAfterDatabaseDeleted} />
-    );
-  }
-}
-
-class DatabaseTable extends React.Component {
-  static propTypes = {
-    dbList: PropTypes.array.isRequired,
-    showDeleteDatabaseModal: PropTypes.object.isRequired,
-    loading: PropTypes.bool.isRequired,
-    showPartitionedColumn: PropTypes.bool.isRequired,
-    onDatabaseDeleted: PropTypes.func
-  };
-
-  createRows = (dbList) => {
-    return dbList.map((item, k) => {
-      return (
-        <DatabaseRow item={item} key={k} showPartitionedColumn={this.props.showPartitionedColumn} />
-      );
-    });
-  };
-
-  getExtensionColumns = () => {
-    var cols = FauxtonAPI.getExtensions('DatabaseTable:head');
-    return _.map(cols, (Item, index) => {
-      return <Item key={index} />;
-    });
-  };
-
-  showDeleteDatabaseModal = () => {
-    ComponentsActions.showDeleteDatabaseModal({
-      showDeleteModal: !this.props.showDeleteDatabaseModal.showDeleteModal
-    });
-  };
-
-  render() {
-    if (this.props.loading) {
-      return (
-        <div className="view">
-          <Components.LoadLines />
-        </div>
-      );
-    }
-
-    const rows = this.createRows(this.props.dbList);
-    return (
-      <div className="view">
-        <DeleteDatabaseModal
-          showHide={this.showDeleteDatabaseModal}
-          modalProps={this.props.showDeleteDatabaseModal}
-          onSuccess={this.props.onDatabaseDeleted} />
-        <table className="table table-striped fauxton-table-list databases">
-          <thead>
-            <tr>
-              <th>Name</th>
-              <th>Size</th>
-              <th># of Docs</th>
-              {this.props.showPartitionedColumn ? (<th>Partitioned</th>) : null}
-              {this.getExtensionColumns()}
-              <th>Actions</th>
-            </tr>
-          </thead>
-          <tbody>
-            {rows}
-          </tbody>
-        </table>
-      </div>
-    );
-  }
-}
-
-class DatabaseRow extends React.Component {
-  static propTypes = {
-    item: PropTypes.shape({
-      id: PropTypes.string.isRequired,
-      encodedId: PropTypes.string.isRequired,
-      url: PropTypes.string.isRequired,
-      failed: PropTypes.bool.isRequired,
-      dataSize: PropTypes.string,
-      docCount: PropTypes.number,
-      docDelCount: PropTypes.number,
-      isPartitioned: PropTypes.bool,
-      showTombstoneWarning: PropTypes.bool
-    }).isRequired,
-    showPartitionedColumn: PropTypes.bool.isRequired
-  };
-
-  getExtensionColumns = (row) => {
-    var cols = FauxtonAPI.getExtensions('DatabaseTable:databaseRow');
-    return _.map(cols, (Item, index) => {
-      return <Item row={row} key={index} />;
-    });
-  };
-
-  showDeleteDatabaseModal = (name) => {
-    ComponentsActions.showDeleteDatabaseModal({ showDeleteModal: true, dbId: name });
-  };
-
-  render() {
-    const {
-      item
-    } = this.props;
-
-    const { encodedId, id, url, dataSize, docCount, docDelCount, showTombstoneWarning, failed, isPartitioned } = item;
-    const tombStoneWarning = showTombstoneWarning ?
-      (<GraveyardInfo docCount={docCount} docDelCount={docDelCount} />) : null;
-
-    // if the row status failed to load, inform the user
-    if (failed) {
-      return (
-        <tr>
-          <td data-name="database-load-fail-name">{id}</td>
-          <td colSpan="4" className="database-load-fail">This database failed to load.</td>
-        </tr>
-      );
-    }
-    const partitionedCol = this.props.showPartitionedColumn ?
-      (<td>{isPartitioned ? 'Yes' : 'No'}</td>) :
-      null;
-    return (
-      <tr>
-        <td>
-          <a href={url}>{id}</a>
-        </td>
-        <td>{dataSize}</td>
-        <td>{docCount} {tombStoneWarning}</td>
-        {partitionedCol}
-        {this.getExtensionColumns(item)}
-
-        <td className="database-actions">
-          <a className="db-actions btn fonticon-replicate set-replication-start"
-            aria-label={`Replicate ${id}`}
-            title={"Replicate " + name}
-            href={"#/replication/_create/" + encodedId} />
-          <a
-            aria-label={`Set permissions for ${id}`}
-            className="db-actions btn icon-lock set-permissions"
-            title={"Set permissions for " + name} href={"#/database/" + encodedId + "/permissions"} />
-          <a
-            aria-label={`Delete ${id}`}
-            className="db-actions btn icon-trash"
-            onClick={this.showDeleteDatabaseModal.bind(this, id, encodedId)}
-            title={'Delete ' + id} data-bypass="true" />
-        </td>
-      </tr>
-    );
-  }
-}
-
-const GraveyardInfo = ({ docCount, docDelCount }) => {
-  const graveyardTitle = `This database has just ${docCount} docs and ${docDelCount} deleted docs`;
-  const tooltip = <Tooltip id="graveyard-tooltip">{graveyardTitle}</Tooltip>;
-
-  return (
-    <OverlayTrigger placement="top" overlay={tooltip}>
-      <i className="js-db-graveyard icon icon-exclamation-sign" title={graveyardTitle}></i>
-    </OverlayTrigger>
-  );
-};
-
-class RightDatabasesHeader extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = this.getStoreState();
-  }
-
-  getStoreState() {
-    return {
-      showPartitionedOption: databasesStore.isPartitionedDatabasesAvailable()
-    };
-  }
-
-  componentDidMount() {
-    databasesStore.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    databasesStore.off('change', this.onChange, this);
-  }
-
-  onChange() {
-    this.setState(this.getStoreState());
-  }
-
-  render() {
-    return (
-      <div className="header-right right-db-header flex-layout flex-row">
-        <JumpToDatabaseWidget loadOptions={Actions.fetchAllDbsWithKey} />
-        <AddDatabaseWidget
-          showPartitionedOption={this.state.showPartitionedOption}
-          partitionedDbHelpText={this.props.partitionedDbHelpText} />
-      </div>
-    );
-  }
-}
-
-class AddDatabaseWidget extends React.Component {
-  static defaultProps = {
-    showPartitionedOption: false
-  };
-
-  static propTypes = {
-    showPartitionedOption: PropTypes.bool.isRequired,
-    partitionedDbHelpText: PropTypes.string
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      isPromptVisible: false,
-      databaseName: '',
-      partitionedSelected: undefined
-    };
-
-    this.onTrayToggle = this.onTrayToggle.bind(this);
-    this.closeTray = this.closeTray.bind(this);
-    this.focusInput = this.focusInput.bind(this);
-    this.onKeyUpInInput = this.onKeyUpInInput.bind(this);
-    this.onChange = this.onChange.bind(this);
-    this.onAddDatabase = this.onAddDatabase.bind(this);
-    this.onSetPartitioned = this.onSetPartitioned.bind(this);
-    this.onSetNotPartitioned = this.onSetNotPartitioned.bind(this);
-  }
-
-  getI18nText(key) {
-    if (this.props.i18n) {
-      return this.props.i18n[key];
-    }
-    return '';
-  }
-
-  onTrayToggle() {
-    this.setState({ isPromptVisible: !this.state.isPromptVisible });
-  }
-
-  closeTray() {
-    this.setState({ isPromptVisible: false });
-  }
-
-  focusInput() {
-    this.newDbName.focus();
-  }
-
-  onKeyUpInInput(e) {
-    if (e.which === 13) {
-      this.onAddDatabase();
-    }
-  }
-
-  onChange(e) {
-    this.setState({ databaseName: e.target.value });
-  }
-
-  onAddDatabase() {
-    if (this.props.showPartitionedOption && this.state.partitionedSelected === undefined) {
-      FauxtonAPI.addNotification({
-        type: 'error',
-        msg: 'Please select either Partitioned or Non-partitioned',
-        clear: true
-      });
-      return;
-    }
-    const partitioned = this.props.showPartitionedOption ?
-      this.state.partitionedSelected :
-      undefined;
-
-    Actions.createNewDatabase(
-      this.state.databaseName,
-      partitioned
-    );
-  }
-
-  onSetNotPartitioned() {
-    this.setState({ partitionedSelected: false });
-  }
-
-  onSetPartitioned() {
-    this.setState({ partitionedSelected: true });
-  }
-
-  partitionedOption() {
-    if (!this.props.showPartitionedOption) {
-      return null;
-    }
-    const partitionedDbHelp = this.props.partitionedDbHelpText ? (
-      <Accordion className='partitioned-db-help'>
-        <AccordionItem title='What is a Partitioned Database?'>
-          <p dangerouslySetInnerHTML={{__html: this.props.partitionedDbHelpText}} />
-        </AccordionItem>
-      </Accordion>
-    ) : null;
-    return (
-      <div className='partitioned-db-section' >
-        <label htmlFor="partitioned-db" className='partitioned-db-label'>
-          Partitioning
-        </label>
-        <div className='partitioned-db-options'>
-          <input
-            id="partitioned-db"
-            type="radio"
-            checked={this.state.partitionedSelected === true}
-            onChange={this.onSetPartitioned} />
-          <label htmlFor="partitioned-db">Partitioned</label>
-          <input
-            id="non-partitioned-db"
-            type="radio"
-            checked={this.state.partitionedSelected === false}
-            onChange={this.onSetNotPartitioned} />
-          <label htmlFor="non-partitioned-db">Non-partitioned</label>
-        </div>
-        {partitionedDbHelp}
-      </div>
-    );
-  }
-
-  render() {
-    const classNames = classnames('new-database-tray', {
-      'new-database-tray--expanded': this.props.showPartitionedOption
-    });
-
-    return (
-      <div>
-        <ToggleHeaderButton
-          selected={this.state.isPromptVisible}
-          toggleCallback={this.onTrayToggle}
-          containerClasses='header-control-box add-new-database-btn'
-          title="Create Database"
-          fonticon="fonticon-new-database"
-          text="Create Database" />
-        <TrayContents
-          className={classNames}
-          contentVisible={this.state.isPromptVisible}
-          closeTray={this.closeTray}
-          onEnter={this.focusInput} >
-          <div className='tray-contents'>
-            <div className='tray-header'>
-              <h3>Create Database</h3>
-            </div>
-            <div className='tray-body'>
-              <label htmlFor="js-new-database-name" className='db-name-label'>
-                Database name
-              </label>
-              <input
-                id="js-new-database-name"
-                ref={node => this.newDbName = node}
-                type="text"
-                value={this.state.databaseName}
-                onChange={this.onChange} onKeyUp={this.onKeyUpInInput}
-                className="input-xxlarge"
-                placeholder="database-name"
-              />
-              {this.partitionedOption()}
-            </div>
-            <div className='tray-footer'>
-              <a className="btn btn-cancel" id="js-cancel-create-database" onClick={this.closeTray}>
-                Cancel
-              </a>
-              <a className="btn btn-primary" id="js-create-database" onClick={this.onAddDatabase}>
-                Create
-              </a>
-            </div>
-          </div>
-        </TrayContents>
-      </div>
-    );
-  }
-}
-
-
-const JumpToDatabaseWidget = ({ loadOptions }) => {
-  return (
-    <div data-name="jump-to-db" className="faux-header__searchboxwrapper">
-      <div className="faux-header__searchboxcontainer">
-
-        <Components.ThrottledReactSelectAsync
-          placeholder="Database name"
-          loadOptions={loadOptions}
-          clearable={false}
-          onChange={({ value: databaseName }) => {
-            Actions.jumpToDatabase(databaseName);
-          }} />
-
-      </div>
-    </div>
-  );
-};
-JumpToDatabaseWidget.propTypes = {
-  loadOptions: PropTypes.func.isRequired
-};
-
-class DatabasePagination extends React.Component {
-  static defaultProps = {
-    linkPath: '_all_dbs',
-    store: databasesStore
-  };
-
-  getStoreState = (props) => {
-    const { store } = props;
-
-    return {
-      totalAmountOfDatabases: store.getTotalAmountOfDatabases(),
-      page: store.getPage(),
-      limit: store.getLimit()
-    };
-  };
-
-  componentDidMount() {
-    const { store } = this.props;
-
-    store.on('change', this.onChange, this);
-  }
-
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    this.setState(this.getStoreState(nextProps));
-    if (this.props.store) {
-      this.props.store.off('change', this.onChange, this);
-    }
-    const { store } = nextProps;
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    const { store } = this.props;
-    store.off('change', this.onChange, this);
-  }
-
-  onChange = () => {
-    this.setState(this.getStoreState(this.props));
-  };
-
-  state = this.getStoreState(this.props);
-
-  onPageLinkClick(pageNumber) {
-    const url = `#/${this.props.linkPath}?page=${pageNumber}&limit=${this.state.limit}`;
-    FauxtonAPI.navigate(url);
-  }
-
-  onPerPageSelected(perPage) {
-    const url = `#/${this.props.linkPath}?page=${this.state.page}&limit=${perPage}`;
-    FauxtonAPI.navigate(url);
-  }
-
-  render() {
-    const { limit, page, totalAmountOfDatabases } = this.state;
-    const start = 1 + (page - 1) * limit;
-    const end = Math.min(totalAmountOfDatabases, page * limit);
-
-    return (
-      <footer className="all-db-footer pagination-footer">
-        <div id="database-pagination">
-          <FauxtonComponentsReact.Pagination
-            page={page}
-            total={totalAmountOfDatabases}
-            perPage={limit}
-            onClick={this.onPageLinkClick.bind(this)}
-          />
-        </div>
-        <PerPageSelector label="Databases per page" perPage={limit} perPageChange={this.onPerPageSelected.bind(this)} />
-        <div className="current-databases">
-          Showing <span className="all-db-footer__range">{start}&ndash;{end}</span>
-          &nbsp;of&nbsp;<span className="all-db-footer__total-db-count">{totalAmountOfDatabases}</span>
-          &nbsp;databases.
-        </div>
-      </footer>
-    );
-  }
-}
-
-export default {
-  DatabasesController: DatabasesController,
-  DatabaseTable: DatabaseTable,
-  DatabaseRow: DatabaseRow,
-  RightDatabasesHeader: RightDatabasesHeader,
-  GraveyardInfo: GraveyardInfo,
-  AddDatabaseWidget: AddDatabaseWidget,
-  JumpToDatabaseWidget: JumpToDatabaseWidget,
-  DatabasePagination: DatabasePagination
-};
diff --git a/app/addons/databases/layout.js b/app/addons/databases/layout.js
deleted file mode 100644
index 8fe25e0..0000000
--- a/app/addons/databases/layout.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed 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.
-
-import app from '../../app';
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import {OnePane, OnePaneHeader, OnePaneContent, OnePaneFooter} from '../components/layouts';
-import Components from "./components";
-const {RightDatabasesHeader, DatabasesController, DatabasePagination} = Components;
-
-export const Layout = () => {
-  return (
-    <OnePane>
-      <OnePaneHeader
-        crumbs={[{"name": "Databases"}]}
-        endpoint={FauxtonAPI.urls('allDBs', 'apiurl')}
-        docURL={FauxtonAPI.constants.DOC_URLS.ALL_DBS}
-      >
-        <RightDatabasesHeader partitionedDbHelpText={app.i18n.en_US['create-db-partitioned-help']}/>
-      </OnePaneHeader>
-      <OnePaneContent>
-        <DatabasesController />
-      </OnePaneContent>
-      <OnePaneFooter>
-        <DatabasePagination />
-      </OnePaneFooter>
-    </OnePane>
-  );
-};
-export default Layout;
diff --git a/app/addons/databases/reducers.js b/app/addons/databases/reducers.js
deleted file mode 100644
index 2c0c260..0000000
--- a/app/addons/databases/reducers.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-const initialState = {
-  partitionedDatabasesAvailable: false,
-  isLoadingDbInfo: true,
-  dbInfo: undefined,
-  isDbPartitioned: false
-};
-
-export function isPartitioned(metadata) {
-  if (metadata && metadata.props && metadata.props.partitioned === true) {
-    return true;
-  }
-  return false;
-}
-
-export default function databases(state = initialState, action) {
-  switch (action.type) {
-    case ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE:
-      return {
-        ...state,
-        partitionedDatabasesAvailable: action.options.available
-      };
-    case ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA:
-      return {
-        ...state,
-        isLoadingDbInfo: true,
-        dbInfo: undefined,
-        isDbPartitioned: false
-      };
-    case ActionTypes.DATABASES_FETCH_SELECTED_DB_METADATA_SUCCESS:
-      return {
-        ...state,
-        isLoadingDbInfo: false,
-        dbInfo: action.options.metadata,
-        isDbPartitioned: isPartitioned(action.options.metadata)
-      };
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/databases/resources.js b/app/addons/databases/resources.js
deleted file mode 100644
index cd3af48..0000000
--- a/app/addons/databases/resources.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import Documents from "../documents/resources";
-var Databases = FauxtonAPI.addon();
-
-Databases.DocLimit = 100;
-
-Databases.Model = FauxtonAPI.Model.extend({
-
-  partitioned: false,
-
-  setPartitioned: function (partitioned) {
-    this.partitioned = partitioned;
-  },
-
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.ALL_DBS;
-  },
-
-  buildAllDocs: function (params) {
-    this.allDocs = new Documents.AllDocs(null, {
-      database: this,
-      params: params
-    });
-
-    return this.allDocs;
-  },
-
-  isNew: function () {
-    // Databases are never new, to make Backbone do a PUT
-    return false;
-  },
-
-  isSystemDatabase: function () {
-    return app.utils.isSystemDatabase(this.id);
-  },
-
-  url: function (context) {
-    if (context === "index") {
-      return "/database/" + this.safeID() + "/_all_docs";
-    } else if (context === "web-index") {
-      return "#/database/" + this.safeID() + "/_all_docs?limit=" + Databases.DocLimit;
-    } else if (context === "apiurl") {
-      return Helpers.getApiUrl("/database/" + this.safeID() + "/_all_docs");
-    } else if (context === "changes") {
-      return FauxtonAPI.urls('changes', 'app', this.safeID(), '', '?descending=true&limit=100&include_docs=true');
-    } else if (context === "changes-apiurl") {
-      return FauxtonAPI.urls('changes', 'apiurl', this.safeID(), '?descending=true&limit=100&include_docs=true');
-    } else if (context === "app") {
-      return "/database/" + this.safeID();
-    }
-    if (this.partitioned) {
-      return Helpers.getServerUrl("/" + this.safeID()) + '?partitioned=true';
-    }
-    return Helpers.getServerUrl("/" + this.safeID());
-
-  },
-
-  safeID: function () {
-    return app.utils.safeURLName(this.id);
-  },
-  buildChanges: function (params) {
-    if (!params.limit) {
-      params.limit = 100;
-    }
-
-    this.changes = new Databases.Changes({
-      database: this,
-      params: params
-    });
-
-    return this.changes;
-  }
-});
-
-Databases.Changes = FauxtonAPI.Collection.extend({
-
-  initialize: function (options) {
-    this.database = options.database;
-    this.params = options.params;
-  },
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.CHANGES;
-  },
-  url: function (context) {
-    var query = "";
-    if (this.params) {
-      query = "?" + app.utils.queryParams(this.params);
-    }
-
-    if (!context) { context = 'server';}
-
-    return FauxtonAPI.urls('changes', context, this.database.safeID(), query);
-  },
-
-  parse: function (resp) {
-    this.last_seq = resp.last_seq;
-    return resp.results;
-  }
-});
-
-export default Databases;
diff --git a/app/addons/databases/routes.js b/app/addons/databases/routes.js
deleted file mode 100644
index 584993d..0000000
--- a/app/addons/databases/routes.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed 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.
-
-import app from '../../app';
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import Actions from "./actions";
-import Databases from "./resources";
-import Layout from './layout';
-
-const AllDbsRouteObject = FauxtonAPI.RouteObject.extend({
-  hideApiBar: true,
-  hideNotificationCenter: true,
-
-  routes: {
-    "": "allDatabases",
-    "index.html": "allDatabases",
-    "_all_dbs(:extra)": "allDatabases"
-  },
-
-  roles: ['fx_loggedIn'],
-
-  selectedHeader: "Databases",
-
-  allDatabases: function (_, params) {
-    const {page, limit} = this.createParams(params);
-    Actions.setPage(page);
-    if (limit) {
-      Actions.setLimit(limit);
-    }
-    return <Layout />;
-  },
-
-  createParams: function (options) {
-    let page = 1;
-    let limit = undefined;
-    if (options) {
-      const urlParams = app.getParams(options);
-      if (isFinite(parseInt(urlParams.page))) {
-        page = parseInt(urlParams.page);
-      }
-      if (isFinite(parseInt(urlParams.limit))) {
-        limit = parseInt(urlParams.limit);
-      }
-    }
-    return {
-      page,
-      limit
-    };
-  }
-});
-Databases.RouteObjects = [AllDbsRouteObject];
-
-export default Databases;
diff --git a/app/addons/databases/stores.js b/app/addons/databases/stores.js
deleted file mode 100644
index 06c1757..0000000
--- a/app/addons/databases/stores.js
+++ /dev/null
@@ -1,179 +0,0 @@
-// Licensed 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.
-
-import app from '../../app';
-import FauxtonAPI from "../../core/api";
-import ActionTypes from "./actiontypes";
-import Resources from "./resources";
-import Helpers from "../../helpers";
-
-function loadDatabasesPerPage() {
-  let dbsPerPage = app.utils.localStorageGet('fauxton:dbs_per_page');
-  if (!dbsPerPage) {
-    dbsPerPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
-  }
-  return dbsPerPage;
-}
-
-const Database = Resources.Model;
-
-const DatabasesStoreConstructor = FauxtonAPI.Store.extend({
-
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._loading = false;
-    this._promptVisible = false;
-    this._page = 1;
-    this._limit = loadDatabasesPerPage();
-
-    this._dbList = [];
-    this._databaseDetails = [];
-    this._failedDbs = [];
-    this._fullDbList = [];
-
-    this._partitionedDatabasesAvailable = false;
-  },
-
-  getPage: function () {
-    return this._page;
-  },
-
-  getLimit: function () {
-    return this._limit;
-  },
-
-  setLimit: function (limit) {
-    this._limit = limit;
-    app.utils.localStorageSet('fauxton:dbs_per_page', limit);
-  },
-
-  isLoading: function () {
-    return this._loading;
-  },
-
-  setLoading: function (loading) {
-    this._loading = loading;
-  },
-
-  isPromptVisible: function () {
-    return this._promptVisible;
-  },
-
-  setPromptVisible: function (promptVisible) {
-    this._promptVisible = promptVisible;
-  },
-
-  obtainNewDatabaseModel: function (databaseName, partitioned) {
-    const dbModel = new Database({
-      id: databaseName,
-      name: databaseName
-    });
-    dbModel.setPartitioned(partitioned);
-    return dbModel;
-  },
-
-  doesDatabaseExist: function (databaseName) {
-    return this._dbList.indexOf(databaseName) !== -1;
-  },
-
-  getTotalAmountOfDatabases: function () {
-    return this._fullDbList.length;
-  },
-
-  getDbList: function () {
-    return this._dbList.map((db) => {
-
-      const allDetails = this._databaseDetails.filter((el) => { return el.db_name === db; });
-      const data = {
-        id: db,
-        encodedId: encodeURIComponent(db),
-        url: FauxtonAPI.urls('allDocsSanitized', 'app', db),
-        failed: this._failedDbs.indexOf(db) !== -1
-      };
-
-      const res = Object.assign({}, data, this._getDetails(allDetails[0]));
-      return res;
-    });
-  },
-
-  _getDetails: function (details) {
-    if (!details) {
-      return {};
-    }
-    const {sizes} = details;
-    const dataSize = (sizes && sizes.active) || (sizes && sizes.external) || details.data_size || 0;
-
-    return {
-      dataSize: Helpers.formatSize(dataSize),
-      docCount: details.doc_count,
-      docDelCount: details.doc_del_count,
-      showTombstoneWarning: details.doc_del_count > details.doc_count,
-      isPartitioned: details.props && details.props.partitioned === true
-    };
-  },
-
-  isPartitionedDatabasesAvailable: function () {
-    return this._partitionedDatabasesAvailable;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.DATABASES_SETPAGE:
-        this._page = action.options.page;
-        break;
-
-      case ActionTypes.DATABASES_SETLIMIT:
-        this.setLimit(action.options.limit);
-        break;
-
-      case ActionTypes.DATABASES_SET_PROMPT_VISIBLE:
-        this.setPromptVisible(action.options.visible);
-        break;
-
-      case ActionTypes.DATABASES_STARTLOADING:
-        this.setLoading(true);
-        break;
-
-      case ActionTypes.DATABASES_LOADCOMPLETE:
-        this.setLoading(false);
-        break;
-
-      case ActionTypes.DATABASES_UPDATE:
-        this._fullDbList = action.options.fullDbList;
-        this._dbList = action.options.dbList;
-        this._databaseDetails = action.options.databaseDetails;
-        this._failedDbs = action.options.failedDbs;
-        this.setLoading(false);
-        break;
-
-      case ActionTypes.DATABASES_PARTITIONED_DB_AVAILABLE:
-        this._partitionedDatabasesAvailable = action.options.available;
-        break;
-
-      default:
-        return;
-    }
-
-    this.triggerChange();
-  }
-});
-
-const databasesStore = new DatabasesStoreConstructor();
-databasesStore.dispatchToken = FauxtonAPI.dispatcher.register(databasesStore.dispatch.bind(databasesStore));
-
-export default {
-  databasesStore: databasesStore,
-  DatabasesStoreConstructor: DatabasesStoreConstructor
-};
diff --git a/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js b/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js
deleted file mode 100644
index 5da4cb2..0000000
--- a/app/addons/databases/tests/nightwatch/checkDatabaseTooltip.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Check the tooltip icon for DB with deleted items appears': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'TemporaryDoc';
-
-    client
-      // use nano to quickly set up a DB with a single doc
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .createDocument(newDocumentName, newDatabaseName)
-
-      .loginToGUI()
-
-      // delete the document manually. This'll ensure the database page has at least one "!" icon
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .click('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      //this opens the alternative header
-      .clickWhenVisible('.tableview-checkbox-cell input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .checkForStringPresent(newDatabaseName, '"doc_del_count":1')
-
-      .clickWhenVisible('#primary-navbar a[href="#/_all_dbs"]')
-      // now let's look at the actual UI to confirm the tooltip appears
-      .waitForElementPresent('.js-db-graveyard', waitTime, false)
-      .moveToElement('.js-db-graveyard', 1, 1)
-
-      // confirm the tooltip element has been inserted
-      .waitForElementPresent('.tooltip.fade.top.in', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/createsDatabase.js b/app/addons/databases/tests/nightwatch/createsDatabase.js
deleted file mode 100644
index 1a6da87..0000000
--- a/app/addons/databases/tests/nightwatch/createsDatabase.js
+++ /dev/null
@@ -1,96 +0,0 @@
-// Licensed 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.
-
-
-
-var newDatabaseName = 'fauxton-selenium-tests-db-create';
-var invalidDatabaseName = 'fauxton-selenium-tests-#####';
-var helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-  '@tags': ['nonpartitioned'],
-
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      console.warn(`Could not delete ${newDatabaseName} db`);
-      done();
-    });
-  },
-
-  'Creates a Database' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .url(baseUrl)
-
-      // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [newDatabaseName])
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementNotPresent('.new-database-tray', waitTime, false)
-      .checkForDatabaseCreated(newDatabaseName, waitTime)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(newDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent > 0,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  },
-
-  'Creates a Database with invalid name' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(invalidDatabaseName, waitTime)
-      .url(baseUrl)
-
-    // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [invalidDatabaseName])
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(invalidDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent === -1,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js b/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js
deleted file mode 100644
index 60d9896..0000000
--- a/app/addons/databases/tests/nightwatch/createsDatabasePartitioned.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed 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.
-
-
-
-var newDatabaseName = 'fauxton-selenium-tests-db-create';
-var invalidDatabaseName = 'fauxton-selenium-tests-#####';
-var helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-  '@tags': ['partitioned'],
-
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(newDatabaseName).then(() => {
-      done();
-    }).catch(()  => {
-      console.warn(`Could not delete ${newDatabaseName} db`);
-      done();
-    });
-  },
-
-  'Creates a Database' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .url(baseUrl)
-
-      // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [newDatabaseName])
-      .clickWhenVisible('#non-partitioned-db', waitTime, false)
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementNotPresent('.new-database-tray', waitTime, false)
-      .checkForDatabaseCreated(newDatabaseName, waitTime)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(newDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent > 0,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  },
-
-  'Creates a Database with invalid name' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .checkForDatabaseDeleted(invalidDatabaseName, waitTime)
-      .url(baseUrl)
-
-    // ensure the page has fully loaded
-      .waitForElementPresent('.databases.table', waitTime, false)
-      .clickWhenVisible('.add-new-database-btn')
-      .waitForElementVisible('#js-new-database-name', waitTime, false)
-      .setValue('#js-new-database-name', [invalidDatabaseName])
-      .clickWhenVisible('#non-partitioned-db', waitTime, false)
-      .clickWhenVisible('#js-create-database', waitTime, false)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .url(baseUrl + '/_all_dbs')
-      .waitForElementVisible('html', waitTime, false)
-      .getText('html', function (result) {
-        var data = result.value,
-            createdDatabaseIsPresent = data.indexOf(invalidDatabaseName);
-
-        this.verify.ok(createdDatabaseIsPresent === -1,
-          'Checking if new database shows up in _all_dbs.');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/deletesDatabase.js b/app/addons/databases/tests/nightwatch/deletesDatabase.js
deleted file mode 100644
index 9c6926d..0000000
--- a/app/addons/databases/tests/nightwatch/deletesDatabase.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Deletes a database': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .end();
-  },
-
-  'Deletes a database from the list': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/_all_dbs/')
-
-      .waitForElementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .assert.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-      .clickWhenVisible('[title="Delete ' + newDatabaseName + '"]', waitTime, false)
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .closeNotifications()
-      .waitForElementPresent('.fauxton-table-list', waitTime, false)
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .assert.not.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js b/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js
deleted file mode 100644
index 363dadd..0000000
--- a/app/addons/databases/tests/nightwatch/deletesDatabaseSpecialChars.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-const newDatabaseName = 'one/two-three/_four';
-
-module.exports = {
-  'Deletes a database with special chars': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-
-      .end();
-  },
-
-  'Deletes a database from the list with special chars': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/_all_dbs/')
-
-      .waitForElementPresent('a[href="database/' + encodeURIComponent(newDatabaseName) + '/_all_docs"]', waitTime, false)
-      .assert.elementPresent('a[href="database/' + encodeURIComponent(newDatabaseName) + '/_all_docs"]')
-      .clickWhenVisible('[title="Delete ' + newDatabaseName + '"]', waitTime, false)
-      .waitForElementPresent('.delete-db-modal', waitTime, false)
-      .clickWhenVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .setValue('.delete-db-modal input[type="text"]', [newDatabaseName, client.Keys.ENTER])
-      .closeNotifications()
-      .waitForElementPresent('.fauxton-table-list', waitTime, false)
-      .checkForDatabaseDeleted(newDatabaseName, waitTime)
-      .assert.not.elementPresent('a[href="database/' + newDatabaseName + '/_all_docs"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/permissionsDbTable.js b/app/addons/databases/tests/nightwatch/permissionsDbTable.js
deleted file mode 100644
index 1c3b8d7..0000000
--- a/app/addons/databases/tests/nightwatch/permissionsDbTable.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-
-  '@tags': ['couchdb-v2-only'],
-
-  'lists databases with a 401' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    const userDoc = {
-      "_id": "org.couchdb.user:furbie",
-      "name": "furbie",
-      "type": "user",
-      "roles": [],
-      "password": "furbie"
-    };
-
-    client
-      .createDocument('org.couchdb.user:furbie', '_users', userDoc)
-      .loginToGUI('furbie', 'furbie')
-
-      .waitForElementVisible('.database-load-fail', waitTime, false)
-      .waitForElementVisible('[data-name="database-load-fail-name"]', waitTime, false)
-      .assert.containsText('[data-name="database-load-fail-name"]', '_global_changes')
-
-      .end();
-  }
-};
diff --git a/app/addons/databases/tests/nightwatch/specialCharListLinks.js b/app/addons/databases/tests/nightwatch/specialCharListLinks.js
deleted file mode 100644
index 2cb3c57..0000000
--- a/app/addons/databases/tests/nightwatch/specialCharListLinks.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed 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.
-
-
-const testDatabases = [
-  't/t',
-  't/t-/t_f',
-  't/t/_f',
-  't/t-//t_f'
-];
-
-const tests = testDatabases.reduce((tests, db) => {
-  tests[`Db List works with special chars ${db}`] = createTest(db);
-  return tests;
-}, {});
-
-module.exports = tests;
-
-function createTest (db) {
-  return (client) => {
-
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(db)
-      .loginToGUI()
-
-      .url(baseUrl + '#/_all_dbs')
-      .clickWhenVisible(`.fauxton-table-list a[href="database/${encodeURIComponent(db)}/_all_docs"]`)
-
-      .waitForElementVisible('.faux-header__doc-header-title', waitTime, false)
-      .waitForElementVisible('.no-results-screen', waitTime, false)
-
-      .assert.containsText('.no-results-screen', 'No Documents Found')
-      .assert.containsText('.faux-header__doc-header-title', db)
-      .end();
-  };
-}
diff --git a/app/addons/databases/tests/nightwatch/switchDatabase.js b/app/addons/databases/tests/nightwatch/switchDatabase.js
deleted file mode 100644
index 488d84c..0000000
--- a/app/addons/databases/tests/nightwatch/switchDatabase.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Confirm selecting database via typeahead redirects properly': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the footer bar to appear (not strictly necessary, but ensures it shows up)
-      .waitForElementPresent('.faux__onepane-footer .pagination-footer', waitTime, false)
-      .getCssProperty('.faux__onepane-footer', 'bottom', function (result) {
-        this.assert.equal(result.value, '0px');
-      })
-      // wait for the DB name typeahead field to appear in the header
-      .waitForElementPresent('[data-name="jump-to-db"]', waitTime, false)
-      .waitForElementPresent('#dashboard-content table.databases', waitTime, false)
-      .clickWhenVisible('[data-name="jump-to-db"] .Select-placeholder')
-      .setValue('[data-name="jump-to-db"] input', [newDatabaseName])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys([client.Keys.ENTER])
-      .waitForElementPresent('.index-pagination', waitTime, false)
-      // now check we've redirected and the URL ends with /_all_docs
-      .url((result) => {
-        const urlEndsWithAllDocs = /all_docs$/.test(result.value);
-        client.assert.ok(urlEndsWithAllDocs, 'Redirected properly');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documentation/assets/less/documentation.less b/app/addons/documentation/assets/less/documentation.less
deleted file mode 100644
index cd56858..0000000
--- a/app/addons/documentation/assets/less/documentation.less
+++ /dev/null
@@ -1,72 +0,0 @@
-/*// Licensed 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.*/
-
-#documentation-page {
-
-  table{
-    margin: 50px;
-
-    .icons-container {
-      width: 80px;
-      height: 80px;
-      max-width: 200px;
-      max-height: 100px;
-      padding-right: 20px;
-    }
-
-    .couchdb-icon {
-      background: transparent url('../../../../../assets/img/couchdb-logo.png') no-repeat 50% 50%;
-      height: 60px;
-      width: 60px;
-      background-size: 60px auto;
-    }
-
-    .github-icon {
-      background: transparent url('../../../../../assets/img/github.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .asf-feather-icon {
-      background: transparent url('../../../../../assets/img/asf-feather-logo.png') no-repeat 50% 50%;
-      height: 70px;
-      width: 100px;
-      background-size: 70px;
-    }
-
-    .linkedin-icon {
-      background: transparent url('../../../../../assets/img/linkedin.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .google-plus-icon {
-      background: transparent url('../../../../../assets/img/googleplus.png') no-repeat 50% 50%;
-      height: 40px;
-      width: 40px;
-      background-size: 40px auto;
-    }
-
-    .twitter-icon {
-      background: transparent url('../../../../../assets/img/twitter.png') no-repeat 50% 50%;
-      height: 50px;
-      width: 50px;
-      background-size: 60px;
-    }
-
-    .icon {
-      margin: auto;
-    }
-  }
-}
diff --git a/app/addons/documentation/base.js b/app/addons/documentation/base.js
deleted file mode 100644
index 28e68d6..0000000
--- a/app/addons/documentation/base.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import Documentation from "./routes";
-import "./assets/less/documentation.less";
-
-Documentation.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    id: 'Documentation',
-    title: 'Documentation',
-    icon: 'fonticon-bookmark',
-    href: '#/documentation',
-    bottomNav: true,
-    top: true
-  });
-};
-
-export default Documentation;
diff --git a/app/addons/documentation/components.js b/app/addons/documentation/components.js
deleted file mode 100644
index f6cbdd8..0000000
--- a/app/addons/documentation/components.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-
-const docLinks = [
-  {
-    title: 'CouchDB Official Documentation — Online',
-    link: 'http://docs.couchdb.org/en/latest/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Official Documentation — Offline',
-    link: './docs/index.html',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Weekly News',
-    link: 'http://blog.couchdb.org/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB Homepage',
-    link: 'https://couchdb.apache.org/',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'CouchDB on GitHub',
-    link: 'https://github.com/apache/couchdb',
-    iconClassName: 'github-icon'
-  },
-  {
-    title: 'Fauxton on GitHub',
-    link: 'https://github.com/apache/couchdb-fauxton',
-    iconClassName: 'github-icon'
-  },
-  {
-    title: 'Fauxton Visual Guide',
-    link: 'https://couchdb.apache.org/fauxton-visual-guide/index.html',
-    iconClassName: 'couchdb-icon'
-  },
-  {
-    title: 'The Apache Software Foundation',
-    link: 'http://www.apache.org/',
-    iconClassName: 'asf-feather-icon'
-  },
-  {
-    title: 'Follow CouchDB on Twitter',
-    link: 'https://twitter.com/couchdb',
-    iconClassName: 'twitter-icon'
-  },
-  {
-    title: 'Follow CouchDB on Google Plus',
-    link: 'https://plus.google.com/+CouchDB',
-    iconClassName: 'google-plus-icon'
-  },
-  {
-    title: 'Follow CouchDB on LinkedIn',
-    link: 'https://www.linkedin.com/company/apache-couchdb',
-    iconClassName: 'linkedin-icon'
-  }
-];
-
-const DocumentationPage = ({links = docLinks}) => {
-
-  function createLinkRows (linkList) {
-    return linkList.map(function (linkObject) {
-      return (
-        <tr key={linkObject.title}>
-          <td className="icons-container">
-            <div className={"icon " + linkObject.iconClassName}> </div>
-          </td>
-          <td>
-            <a href={linkObject.link} target="_blank" rel="noopener noreferrer" data-bypass="true">{linkObject.title}</a>
-          </td>
-        </tr>
-      );
-    });
-  }
-
-  return (
-    <div id="documentation-page" className="scrollable">
-      <div className="links">
-        <table>
-          <tbody>
-            {createLinkRows(links)}
-          </tbody>
-        </table>
-      </div>
-    </div>
-  );
-};
-
-export default {
-  DocumentationPage: DocumentationPage
-};
diff --git a/app/addons/documentation/routes.js b/app/addons/documentation/routes.js
deleted file mode 100644
index 1d828ca..0000000
--- a/app/addons/documentation/routes.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import DocumentationComponents from "./components";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-var DocumentationRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Documentation',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'documentation': 'documentation'
-  },
-  roles: ['fx_loggedIn'],
-  documentation: function () {
-    return <OnePaneSimpleLayout
-      component={<DocumentationComponents.DocumentationPage/>}
-      crumbs={[
-        {'name': 'Documentation'}
-      ]}
-    />;
-  }
-});
-DocumentationRouteObject.RouteObjects = [DocumentationRouteObject];
-
-export default DocumentationRouteObject;
diff --git a/app/addons/documentation/tests/nightwatch/checksDocsPage.js b/app/addons/documentation/tests/nightwatch/checksDocsPage.js
deleted file mode 100644
index 0fc5baa..0000000
--- a/app/addons/documentation/tests/nightwatch/checksDocsPage.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Check the documentation page exists': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    client
-      .loginToGUI()
-      .clickWhenVisible('a[href="#/documentation"]')
-      .waitForElementVisible('a[href="http://docs.couchdb.org/en/latest/"]', waitTime, false)
-      .waitForElementVisible('a[href="./docs/index.html"]', waitTime, false)
-      .waitForElementVisible('a[href="http://blog.couchdb.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://couchdb.apache.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://github.com/apache/couchdb"]', waitTime, false)
-      .waitForElementVisible('a[href="https://github.com/apache/couchdb-fauxton"]', waitTime, false)
-      .waitForElementVisible('a[href="https://couchdb.apache.org/fauxton-visual-guide/index.html"]', waitTime, false)
-      .waitForElementVisible('a[href="http://www.apache.org/"]', waitTime, false)
-      .waitForElementVisible('a[href="https://twitter.com/couchdb"]', waitTime, false)
-      .waitForElementVisible('a[href="https://plus.google.com/+CouchDB"]', waitTime, false)
-      .waitForElementVisible('a[href="https://www.linkedin.com/company/apache-couchdb"]', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/__tests__/additional-params.test.js b/app/addons/documents/__tests__/additional-params.test.js
deleted file mode 100644
index 1231e3a..0000000
--- a/app/addons/documents/__tests__/additional-params.test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import AdditionalParams from '../index-results/components/queryoptions/AdditionalParams';
-import sinon from 'sinon';
-
-describe('AdditionalParams', () => {
-  it('updateSkip is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      updateSkip={spy}
-    />);
-
-    wrapper.find('#qoSkip').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('updateLimit is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      updateLimit={spy}
-    />);
-
-    wrapper.find('#qoLimit').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('toggleDescending is called after change', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<AdditionalParams
-      limit={10}
-      descending={false}
-      skip={0}
-      toggleDescending={spy}
-    />);
-
-    wrapper.find('#qoDescending').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/base-actions.test.js b/app/addons/documents/__tests__/base-actions.test.js
deleted file mode 100644
index 608e738..0000000
--- a/app/addons/documents/__tests__/base-actions.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-// Licensed 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.
-
-import {
-  nowLoading,
-  resetState,
-  newResultsAvailable,
-  newSelectedDocs,
-  selectDoc,
-  bulkCheckOrUncheck,
-  changeLayout,
-  changeTableHeaderAttribute
-} from '../index-results/actions/base';
-import ActionTypes from '../index-results/actiontypes';
-import Constants from '../constants';
-
-describe('Docs Base API', () => {
-  let docs;
-  beforeEach(() => {
-    docs = [
-      {
-        _id: 'test1',
-        _rev: 'foo'
-      },
-      {
-        _id: 'test2',
-        _rev: 'bar'
-      }
-    ];
-  });
-
-  it('nowLoading returns the proper event to dispatch', () => {
-    expect(nowLoading()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-    });
-  });
-
-  it('resetState returns the proper event to dispatch', () => {
-    expect(resetState()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-    });
-  });
-
-  it('newResultsAvailable returns the proper event to dispatch', () => {
-    const params = {
-      skip: 0,
-      limit: 21
-    };
-    const canShowNext = true;
-    const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-
-    expect(newResultsAvailable(docs, params, canShowNext, docType)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-      docs: docs,
-      params: params,
-      canShowNext: canShowNext,
-      docType: docType
-    });
-  });
-
-  it('newSelectedDocs returns the proper event to dispatch', () => {
-    const selectedDocs = [
-      {
-        _id: 'test1',
-        _rev: 'foo',
-        _deleted: true
-      }
-    ];
-
-    expect(newSelectedDocs(selectedDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: selectedDocs
-    });
-  });
-
-  it('selectDoc returns the proper event to dispatch', () => {
-    const doc = {
-      _id: 'apple',
-      _rev: 'pie',
-      _deleted: true
-    };
-
-    const selectedDocs = [
-      {
-        _id: 'test1',
-        _rev: 'foo',
-        _deleted: true
-      }
-    ];
-
-    expect(selectDoc(doc, selectedDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [
-        {
-          _id: 'test1',
-          _rev: 'foo',
-          _deleted: true
-        },
-        {
-          _id: 'apple',
-          _rev: 'pie',
-          _deleted: true
-        }
-      ]
-    });
-  });
-
-  describe('bulkCheckOrUncheck', () => {
-    it('returns the proper event to dispatch when allDocumentsSelected false', () => {
-      const selectedDocs = [];
-      const allDocumentsSelected = false;
-      expect(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected, Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY)).toEqual({
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [
-          {
-            _id: 'test1',
-            _rev: 'foo',
-            _deleted: true
-          },
-          {
-            _id: 'test2',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ]
-      });
-    });
-
-    it('returns the proper event to dispatch when allDocumentsSelected true', () => {
-      const selectedDocs = [
-        {
-          _id: 'test1',
-          _rev: 'foo',
-          _deleted: true
-        },
-        {
-          _id: 'test2',
-          _rev: 'bar',
-          _deleted: true
-        }
-      ];
-      const allDocumentsSelected = true;
-      expect(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected)).toEqual({
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: []
-      });
-    });
-  });
-
-  it('changeLayout returns the proper event to dispatch', () => {
-    expect(changeLayout(Constants.LAYOUT_ORIENTATION.JSON)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-      layout: Constants.LAYOUT_ORIENTATION.JSON
-    });
-  });
-
-  it('changeTableHeaderAttribute returns the proper event to dispatch', () => {
-    const selectedFields = ['_id', '_rev', 'foo'];
-    const newField = {
-      index: 1,
-      newSelectedRow: 'bar'
-    };
-    expect(changeTableHeaderAttribute(newField, selectedFields)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE,
-      selectedFieldsTableView: ['_id', 'bar', 'foo']
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/changes-reducers.test.js b/app/addons/documents/__tests__/changes-reducers.test.js
deleted file mode 100644
index 5931a72..0000000
--- a/app/addons/documents/__tests__/changes-reducers.test.js
+++ /dev/null
@@ -1,142 +0,0 @@
-
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from '../changes/actiontypes';
-import reducer from '../changes/reducers';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Changes Reducer', () => {
-
-  const changesList = [
-    { id: 'doc_1', seq: 4, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_2', seq: 1, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_3', seq: 6, deleted: true, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_4', seq: 7, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_5', seq: 1, deleted: true, changes: { code: 'here' }, isNew: false }
-  ];
-
-  it('adds new filter to state', () => {
-    const filter = 'My filter';
-    const action = {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter
-    };
-    const newState = reducer(undefined, action);
-
-    expect(newState.filters.length).toBe(1);
-    expect(newState.filters[0]).toBe(filter);
-  });
-
-  it('removes filter from state', () => {
-    const filter1 = 'My filter 1';
-    const filter2 = 'My filter 2';
-    let newState = reducer(undefined, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: filter1
-    });
-    newState = reducer(newState, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: filter2
-    });
-    newState = reducer(newState, {
-      type: ActionTypes.REMOVE_CHANGES_FILTER_ITEM,
-      filter: filter1
-    });
-
-    expect(newState.filters.length).toBe(1);
-    expect(newState.filters[0]).toBe(filter2);
-  });
-
-  it('number of items is capped by maxChangesListed', () => {
-
-    // to keep the test speedy, we override the default max value
-    const maxChanges = 10;
-    const changes = [];
-    for (let i = 0; i < maxChanges + 10; i++) {
-      changes.push({ id: 'doc_' + i, seq: 1, changes: {}});
-    }
-    let state = reducer(undefined, {type: 'DO_NOTHING'});
-    state.maxChangesListed = maxChanges;
-
-    const seqNum = 123;
-    state = reducer(state, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum,
-      changes
-    });
-    expect(state.changes.length).toBe(changes.length);
-    expect(state.filteredChanges.length).toBe(maxChanges);
-  });
-
-  it('tracks last sequence number', () => {
-    let state = reducer(undefined, {type: 'DO_NOTHING'});
-    expect(state.lastSequenceNum).toBeNull();
-
-    const seqNum = 123;
-    state = reducer(state, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum,
-      changes: []
-    });
-
-    // confirm it's been stored
-    expect(state.lastSequenceNum).toBe(seqNum);
-  });
-
-  it('"true" filter should apply to change deleted status', () => {
-    let state = reducer(undefined, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum: 123,
-      changes: changesList
-    });
-
-    // add a filter
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: 'true'
-    });
-
-    // confirm only the two deleted items are part of filtered results
-    expect(state.filteredChanges.length).toBe(2);
-    state.filteredChanges.forEach(el => {
-      expect(el.deleted).toBe(true);
-    });
-  });
-
-  // confirms that if there are multiple filters, ALL are applied to return the subset of results that match
-  // all filters
-  it('multiple filters should all be applied to results', () => {
-    let state = reducer(undefined, {
-      type: ActionTypes.UPDATE_CHANGES,
-      seqNum: 123,
-      changes: changesList
-    });
-
-    // add the filters
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: 'true'
-    });
-    state = reducer(state, {
-      type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-      filter: '1'
-    });
-
-    // confirm only doc_5 matches both filters
-    expect(state.filteredChanges.length).toBe(1);
-    expect(state.filteredChanges[0].id).toBe('doc_5');
-  });
-
-});
diff --git a/app/addons/documents/__tests__/changes.test.js b/app/addons/documents/__tests__/changes.test.js
deleted file mode 100644
index 6723f3c..0000000
--- a/app/addons/documents/__tests__/changes.test.js
+++ /dev/null
@@ -1,186 +0,0 @@
-
-// Licensed 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.
-
-import React from "react";
-import ReactDOM from "react-dom";
-import ChangeRow from '../changes/components/ChangeRow';
-import ChangesScreen from '../changes/components/ChangesScreen';
-import ChangesTabContent from "../changes/components/ChangesTabContent";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-import '../base';
-
-
-describe('ChangesTabContent', () => {
-  const defaultProps = {
-    filters: [],
-    addFilter: () => {},
-    removeFilter: () => {}
-  };
-
-  it('should add filter badges', () => {
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      filters={['I wandered lonely as a filter', 'A second filter']}
-    />);
-
-    expect(el.find('.remove-filter').length).toBe(2);
-  });
-
-  it('should call addFilter action on click', () => {
-    const addFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={addFilterStub}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    addItemField.simulate('change', {target: {value: 'I wandered lonely as a filter'}});
-    submitBtn.simulate('submit');
-
-    expect(addFilterStub.calledOnce).toBeTruthy();
-  });
-
-  it('should call removeFilter action on click', () => {
-    const removeFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      filters={['I wandered lonely as a filter']}
-      removeFilter={removeFilterStub}
-    />);
-    el.find('.remove-filter').simulate('click');
-
-    expect(removeFilterStub.calledOnce).toBeTruthy();
-  });
-
-  it('should not add empty filters', () => {
-    const addFilterStub = sinon.stub();
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={addFilterStub}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    addItemField.simulate('change', {target: {value: ''}});
-    submitBtn.simulate('submit');
-
-    expect(addFilterStub.notCalled).toBeTruthy();
-  });
-
-  it('should not add badges by default', () => {
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-    />);
-    expect(el.find('.remove-filter').length).toBe(0);
-  });
-
-  it('should not add the same filter twice', () => {
-    const filters = [];
-    let callCount = 0;
-    const el = mount(<ChangesTabContent
-      {...defaultProps}
-      addFilter={(f) => {filters.push(f); callCount++;}}
-      filters={filters}
-    />);
-    const submitBtn = el.find('[type="submit"]'),
-          addItemField = el.find('.js-changes-filter-field');
-
-    const filter = 'I am unique in the whole wide world';
-    addItemField.simulate('change', {target: {value: filter}});
-    submitBtn.simulate('submit');
-
-    addItemField.simulate('change', {target: {value: filter}});
-    submitBtn.simulate('submit');
-
-    expect(callCount).toBe(1);
-  });
-});
-
-
-describe('ChangesScreen', () => {
-  const changesList = [
-    { id: 'doc_1', seq: 4, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_2', seq: 1, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_3', seq: 6, deleted: true, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_4', seq: 7, deleted: false, changes: { code: 'here' }, isNew: false },
-    { id: 'doc_5', seq: 1, deleted: true, changes: { code: 'here' }, isNew: false }
-  ];
-
-  const defaultProps = {
-    changes: [],
-    loaded: true,
-    databaseName: 'my_db',
-    isShowingSubset: false,
-    loadChanges: () => {}
-  };
-
-  it('should list the right number of changes', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-      changes={changesList}
-    />);
-
-    expect(changesEl.find('.change-box').length).toBe(changesList.length);
-  });
-
-  it('shows a No Docs Found message if no docs', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-    />);
-    expect(changesEl.html()).toMatch(/There\sare\sno\sdocument\schanges/);
-  });
-
-  it('should show a message if the results are truncated', () => {
-    const changesEl = mount(<ChangesScreen
-      {...defaultProps}
-      changes={changesList}
-      isShowingSubset={true}
-    />);
-    expect(changesEl.find('.changes-result-limit').length).toBe(1);
-  });
-});
-
-
-describe('ChangeRow', () => {
-  const change = {
-    id: '123',
-    seq: 5,
-    deleted: false,
-    changes: { code: 'here' }
-  };
-
-  it('clicking the toggle-json button shows the code section', function () {
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-
-    // confirm it's hidden by default
-    expect(changeRow.find('.prettyprint').length).toBe(0);
-
-    // confirm clicking it shows the element
-    changeRow.find('button.btn').simulate('click');
-    expect(changeRow.find('.prettyprint').length).toBe(1);
-  });
-
-  it('deleted docs should not be clickable', () => {
-    change.deleted = true;
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-    expect(changeRow.find('a.js-doc-link').length).toBe(0);
-  });
-
-  it('non-deleted docs should be clickable', () => {
-    change.deleted = false;
-    const changeRow = mount(<ChangeRow change={change} databaseName="testDatabase" />);
-    expect(changeRow.find('a.js-doc-link').length).toBe(1);
-  });
-});
diff --git a/app/addons/documents/__tests__/designdocinfo-action.test.js b/app/addons/documents/__tests__/designdocinfo-action.test.js
deleted file mode 100644
index 2b0c523..0000000
--- a/app/addons/documents/__tests__/designdocinfo-action.test.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed 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.
-
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import testUtils from '../../../../test/mocha/testUtils';
-import Actions from '../designdocinfo/actions';
-
-const {restore} = testUtils;
-
-describe('DesignDocInfo Actions', () => {
-
-  describe('fetchDesignDocInfo', () => {
-
-    afterEach(() => {
-      restore(window.setInterval);
-      testUtils.restore(FauxtonAPI.addNotification);
-    });
-
-    it('schedules regular updates on successful fetch', () => {
-      const promise = FauxtonAPI.Deferred();
-      promise.resolve();
-      const fakeDesignDocInfo = {
-        fetch: () => {
-          return promise;
-        }
-      };
-
-      const spy = sinon.spy(window, 'setInterval');
-      const dispatch = sinon.stub();
-
-      return Actions.fetchDesignDocInfo({
-        ddocName: 'test-designdoc-info',
-        designDocInfo: fakeDesignDocInfo
-      })(dispatch).then(() => {
-        expect(spy.calledOnce).toBeTruthy();
-      });
-    });
-
-    it('shows error message in case of failure', () => {
-      const promise = FauxtonAPI.Deferred();
-      promise.reject();
-      const fakeDesignDocInfo = {
-        fetch: () => {
-          return promise;
-        }
-      };
-
-      const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-      const dispatch = sinon.stub();
-
-      return Actions.fetchDesignDocInfo({
-        ddocName: 'test-designdoc-info',
-        designDocInfo: fakeDesignDocInfo
-      })(dispatch).then(() => {
-        sinon.assert.calledOnce(notificationSpy);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/fetch-actions.test.js b/app/addons/documents/__tests__/fetch-actions.test.js
deleted file mode 100644
index 7940487..0000000
--- a/app/addons/documents/__tests__/fetch-actions.test.js
+++ /dev/null
@@ -1,386 +0,0 @@
-// Licensed 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.
-
-import {
-  mergeParams,
-  removeOverflowDocsAndCalculateHasNext,
-  validateBulkDelete,
-  processBulkDeleteResponse
-} from '../index-results/actions/fetch';
-import {queryAllDocs, postToBulkDocs} from '../index-results/api';
-import fetchMock from 'fetch-mock';
-import app from '../../../app';
-import sinon from 'sinon';
-import SidebarActions from '../sidebar/actions';
-import FauxtonAPI from '../../../core/api';
-import '../base';
-import Constants from '../constants';
-
-describe('Docs Fetch API', () => {
-  describe('mergeParams', () => {
-    let fetchParams, queryOptionsParams;
-    beforeEach(() => {
-      fetchParams = {
-        skip: 0,
-        limit: 21
-      };
-      queryOptionsParams = {};
-    });
-
-    it('supports default fetch and queryOptions params', () => {
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-
-    it('supports a manual skip in queryOptionsParams', () => {
-      queryOptionsParams.skip = 5;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 5,
-          limit: 21
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-
-    it('manual limit in queryOptionsParams does not affect merge limit', () => {
-      queryOptionsParams.limit = 50;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21
-        },
-        totalDocsRemaining: 50
-      });
-    });
-
-    it('totalDocsRemaining is determined by queryOptions limit and skip on first page', () => {
-      queryOptionsParams.skip = 10;
-      queryOptionsParams.limit = 200;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 10,
-          limit: 21
-        },
-        totalDocsRemaining: 200
-      });
-    });
-
-    it('totalDocsRemaining is determined by queryOptions limit and fetch skip on later pages', () => {
-      queryOptionsParams.skip = 10;
-      queryOptionsParams.limit = 200;
-      fetchParams.skip = 30;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 30,
-          limit: 21
-        },
-        totalDocsRemaining: 180
-      });
-    });
-
-    it('include conflicts if requested in fetchParams', () => {
-      fetchParams.conflicts = true;
-      expect(mergeParams(fetchParams, queryOptionsParams)).toEqual({
-        params: {
-          skip: 0,
-          limit: 21,
-          conflicts: true
-        },
-        totalDocsRemaining: NaN
-      });
-    });
-  });
-
-  describe('removeOverflowDocsAndCalculateHasNext', () => {
-    let docs;
-    beforeEach(() => {
-      docs = [
-        {
-          _id: 'foo',
-          _rev: 'bar'
-        },
-        {
-          _id: 'xyz',
-          _rev: 'abc'
-        },
-        {
-          _id: 'test',
-          _rev: 'value'
-        }
-      ];
-    });
-
-    it('truncates last doc and has next if length equal to fetch limit', () => {
-      const totalDocsRemaining = NaN;
-      const fetchLimit = 3;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          },
-          {
-            _id: 'xyz',
-            _rev: 'abc'
-          }
-        ],
-        canShowNext: true
-      });
-    });
-
-    it('does not truncate and does not have next if length less than fetch limit', () => {
-      const totalDocsRemaining = NaN;
-      const fetchLimit = 4;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          },
-          {
-            _id: 'xyz',
-            _rev: 'abc'
-          },
-          {
-            _id: 'test',
-            _rev: 'value'
-          }
-        ],
-        canShowNext: false
-      });
-    });
-
-    it('truncates all extra docs if length is greater than totalDocsRemaining', () => {
-      const totalDocsRemaining = 1;
-      const fetchLimit = 3;
-      expect(removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, fetchLimit)).toEqual({
-        finalDocList: [
-          {
-            _id: 'foo',
-            _rev: 'bar'
-          }
-        ],
-        canShowNext: false
-      });
-    });
-  });
-
-  describe('queryAllDocs', () => {
-    const docs = {
-      "total_rows": 2,
-      "offset": 0,
-      "rows": [
-        {
-          "id": "foo",
-          "key": "foo",
-          "value": {
-            "rev": "1-1390740c4877979dbe8998382876556c"
-          }
-        },
-        {
-          "id": "foo2",
-          "key": "foo2",
-          "value": {
-            "rev": "2-1390740c4877979dbe8998382876556c"
-          }
-        }
-      ]
-    };
-
-    it('queries _all_docs with default params', () => {
-      const params = {
-        limit: 21,
-        skip: 0
-      };
-      const fetchUrl = '/testdb/_all_docs';
-      const query = app.utils.queryString(params);
-      const url = `${fetchUrl}?${query}`;
-      fetchMock.getOnce(url, docs);
-
-      return queryAllDocs(fetchUrl, '', params).then((res) => {
-        expect(res).toEqual({
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-          docs: [
-            {
-              id: "foo",
-              key: "foo",
-              value: {
-                rev: "1-1390740c4877979dbe8998382876556c"
-              }
-            },
-            {
-              id: "foo2",
-              key: "foo2",
-              value: {
-                rev: "2-1390740c4877979dbe8998382876556c"
-              }
-            }]
-        });
-      });
-    });
-
-    it('queries _all_docs with a partition key', () => {
-      const partitionKey = 'key1';
-      const params = {
-        limit: 21,
-        skip: 0,
-        inclusive_end: false,
-        start_key: `"${partitionKey}:"`,
-        end_key: `"${partitionKey}:\ufff0"`
-      };
-      const fetchUrl = '/testdb/_all_docs';
-      const query = app.utils.queryString(params);
-      const url = `${fetchUrl}?${query}`;
-      fetchMock.getOnce(url, docs);
-
-      return queryAllDocs(fetchUrl, partitionKey, params).then((res) => {
-        expect(res).toEqual({
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-          docs: [
-            {
-              id: "foo",
-              key: "foo",
-              value: {
-                rev: "1-1390740c4877979dbe8998382876556c"
-              }
-            },
-            {
-              id: "foo2",
-              key: "foo2",
-              value: {
-                rev: "2-1390740c4877979dbe8998382876556c"
-              }
-            }]
-        });
-      });
-    });
-  });
-
-  describe('Bulk Delete', () => {
-    describe('validation', () => {
-      let selectedDocs;
-      beforeEach(() => {
-        selectedDocs = [
-          {
-            _id: 'foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-      });
-
-      it('validation fails if no docs selected', () => {
-        selectedDocs = [];
-        expect(validateBulkDelete(selectedDocs)).toBe(false);
-      });
-
-      it('validation fails if user does not wish to continue', () => {
-        global.confirm = () => false;
-        expect(validateBulkDelete(selectedDocs)).toBe(false);
-      });
-
-      it('validation succeeds otherwise', () => {
-        global.confirm = () => true;
-        expect(validateBulkDelete(selectedDocs)).toBe(true);
-      });
-    });
-
-    describe('postToBulkDocs', () => {
-      it('deletes list of docs', () => {
-        const payload = {
-          docs: [
-            {
-              _id: 'foo',
-              _rev: 'bar',
-              _deleted: true
-            }
-          ]
-        };
-        const res = [
-          {
-            "ok": true,
-            "id":"foo",
-            "rev":"2-fe3a51be430401d97872d14a40f590dd"
-          }
-        ];
-        const databaseName = 'testdb';
-
-        fetchMock.postOnce(FauxtonAPI.urls('bulk_docs', 'server', databaseName), res);
-        return postToBulkDocs(databaseName, payload).then((json) => {
-          expect(json).toEqual(res);
-        });
-      });
-    });
-
-    describe('processBulkDeleteResponse', () => {
-      let notificationSpy, sidebarSpy;
-
-      beforeEach(() => {
-        notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-        sidebarSpy = sinon.stub(SidebarActions, 'dispatchUpdateDesignDocs');
-      });
-
-      afterEach(() => {
-        notificationSpy.restore();
-        sidebarSpy.restore();
-      });
-
-      it('creates two notifications when number of failed docs is positive', () => {
-        const res = [
-          {
-            id: 'foo',
-            error: 'conflict',
-            reason: 'Document update conflict'
-          }
-        ];
-        const originalDocs = [
-          {
-            _id: 'foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-        const designDocs = [];
-        processBulkDeleteResponse(res, originalDocs, designDocs);
-        expect(notificationSpy.calledTwice).toBe(true);
-        expect(sidebarSpy.calledOnce).toBe(false);
-      });
-
-      it('calls dispatchUpdateDesignDocs when one of the deleted docs is a ddoc', () => {
-        const res = [
-          {
-            id: '_design/foo',
-            rev: 'bar',
-            ok: true
-          }
-        ];
-        const originalDocs = [
-          {
-            _id: '_design/foo',
-            _rev: 'bar',
-            _deleted: true
-          }
-        ];
-        const designDocs = ['_design/foo'];
-        processBulkDeleteResponse(res, originalDocs, designDocs);
-        expect(notificationSpy.calledOnce).toBe(true);
-        expect(sidebarSpy.calledOnce).toBe(true);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/helpers.test.js b/app/addons/documents/__tests__/helpers.test.js
deleted file mode 100644
index d586f34..0000000
--- a/app/addons/documents/__tests__/helpers.test.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-import Helpers from "../helpers";
-
-describe('Helpers', () => {
-
-  describe('parseJSON', () => {
-    it('replaces "\\n" with actual newlines', () => {
-      var string = 'I am a string\\nwith\\nfour\\nlinebreaks\\nin';
-      var result = Helpers.parseJSON(string);
-      expect(result.match(/\n/g).length).toBe(4);
-    });
-  });
-
-  describe('truncateDoc', () => {
-    var sevenLineDoc = '{\n"line2": 2,\n"line3": 3,\n"line4": 4,\n"line5": 5,\n"line6": 6\n}';
-
-    it('does no truncation if maxRows set higher than doc', () => {
-      var result = Helpers.truncateDoc(sevenLineDoc, 10);
-      expect(result.isTruncated).toBe(false);
-      expect(result.content).toBe(result.content);
-    });
-
-    it('truncates by specified line count', () => {
-      var result = Helpers.truncateDoc(sevenLineDoc, 5);
-      expect(result.isTruncated).toBe(true);
-      expect(result.content).toBe('{\n"line2": 2,\n"line3": 3,\n"line4": 4,\n"line5": 5,');
-
-      var result2 = Helpers.truncateDoc(sevenLineDoc, 2);
-      expect(result2.isTruncated).toBe(true);
-      expect(result2.content).toBe('{\n"line2": 2,');
-    });
-
-  });
-
-  describe('selectedItemIsPartitionedView', () => {
-    const ddocs = {
-      find: () => { return {_id: '_design/ddoc1' }; }
-    };
-    const selectedView = {
-      navItem: 'designDoc',
-      designDocSection: 'Views',
-      indexName: 'view1'
-    };
-    const selectedAllDocs = {
-      navItem: 'all-docs'
-    };
-
-    it('returns false if no item is selected', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, null, true);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns false if selected item is not a view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedAllDocs, true);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns false if selected item is a global view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedView, false);
-      expect(isPartitionedView).toBe(false);
-    });
-
-    it('returns true if selected item is a partitioned view', () => {
-      const isPartitionedView = Helpers.selectedItemIsPartitionedView(ddocs, selectedView, true);
-      expect(isPartitionedView).toBe(true);
-    });
-
-  });
-
-  describe('isDDocPartitioned', () => {
-    const ddocNoOptions = {
-      _id: '_design/ddoc1'
-    };
-    const ddocPartitionedTrue = {
-      _id: '_design/ddoc1',
-      options: {
-        partitioned: true
-      }
-    };
-    const ddocPartitionedFalse = {
-      _id: '_design/ddoc1',
-      options: {
-        partitioned: false
-      }
-    };
-
-    it('returns false if database is not partitioned', () => {
-      let isPartitionedDdoc = Helpers.isDDocPartitioned(ddocNoOptions, false);
-      expect(isPartitionedDdoc).toBe(false);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedFalse, false);
-      expect(isPartitionedDdoc).toBe(false);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedTrue, false);
-      expect(isPartitionedDdoc).toBe(false);
-    });
-
-    it('returns true if database is partitioned and ddoc partitioned option is not set to false', () => {
-      let isPartitionedDdoc = Helpers.isDDocPartitioned(ddocNoOptions, true);
-      expect(isPartitionedDdoc).toBe(true);
-
-      isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedTrue, true);
-      expect(isPartitionedDdoc).toBe(true);
-    });
-
-    it('returns false if database is partitioned but ddoc is set as non-partitioned', () => {
-      const isPartitionedDdoc = Helpers.isDDocPartitioned(ddocPartitionedFalse, true);
-      expect(isPartitionedDdoc).toBe(false);
-    });
-
-  });
-
-});
diff --git a/app/addons/documents/__tests__/index-results.test.js b/app/addons/documents/__tests__/index-results.test.js
deleted file mode 100644
index 72ac69d..0000000
--- a/app/addons/documents/__tests__/index-results.test.js
+++ /dev/null
@@ -1,170 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { shallow } from 'enzyme';
-import IndexResults from '../index-results/components/results/IndexResults';
-import sinon from 'sinon';
-
-describe('IndexResults', () => {
-  it('calls fetchDocs on mount only when fetchAtStartup is set to true', () => {
-    const spy = sinon.spy();
-    shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={spy}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(spy.calledOnce).toBe(true);
-
-    spy.resetHistory();
-    const wrapperDontFetch = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={spy}
-      results={[]}
-      fetchAtStartup={false}
-    />);
-
-    wrapperDontFetch.instance().componentDidMount();
-    expect(spy.notCalled).toBe(true);
-  });
-
-  it('calls fetchDocs on update if ddocsOnly switches', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      resetState={() => { }}
-      results={[]}
-      ddocsOnly={false}
-      fetchAtStartup={true}
-      fetchUrl={''}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillUpdate({
-      ddocsOnly: true,
-      fetchParams: {},
-      queryOptionsParams: {},
-      fetchDocs: spy,
-      resetState: () => { },
-    });
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls fetchDocs on update if fetchUrl switches', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      resetState={() => { }}
-      results={[]}
-      ddocsOnly={false}
-      fetchAtStartup={true}
-      fetchUrl={'view1'}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillUpdate({
-      fetchParams: {},
-      queryOptionsParams: {},
-      fetchDocs: spy,
-      resetState: () => { },
-      fetchUrl: 'view2'
-    });
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('deleteSelectedDocs calls bulkDeleteDocs', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      bulkDeleteDocs={spy}
-      fetchParams={{}}
-      selectedDocs={[]}
-      queryOptionsParams={{}}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().deleteSelectedDocs();
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('isSelected returns true when id is in selectedDocs', () => {
-    const selectedDocs = [{
-      _id: 'foo'
-    }];
-    const wrapper = shallow(<IndexResults
-      selectedDocs={selectedDocs}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(wrapper.instance().isSelected('foo')).toBe(true);
-  });
-
-  it('isSelected returns false when id is not in selectedDocs', () => {
-    const selectedDocs = [{
-      _id: 'bar'
-    }];
-    const wrapper = shallow(<IndexResults
-      selectedDocs={selectedDocs}
-      fetchDocs={() => { }}
-      results={[]}
-      fetchAtStartup={true}
-    />);
-
-    expect(wrapper.instance().isSelected('foo')).toBe(false);
-  });
-
-  it('docChecked calls selectDoc', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      selectedDocs={[]}
-      fetchDocs={() => { }}
-      results={[]}
-      selectDoc={spy}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().docChecked('foo', '1-123324345');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('toggleSelectAll calls bulkCheckOrUncheck', () => {
-    const spy = sinon.spy();
-    const wrapper = shallow(<IndexResults
-      selectedDocs={[]}
-      fetchDocs={() => { }}
-      results={[]}
-      docs={[]}
-      allDocumentsSelected={false}
-      bulkCheckOrUncheck={spy}
-      fetchAtStartup={true}
-    />);
-
-    wrapper.instance().toggleSelectAll();
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/json-view.test.js b/app/addons/documents/__tests__/json-view.test.js
deleted file mode 100644
index 6384bb5..0000000
--- a/app/addons/documents/__tests__/json-view.test.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed 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.
-
-import { getJsonViewData } from '../index-results/helpers/json-view';
-import { getDocUrl } from '../index-results/helpers/shared-helpers';
-import '../base';
-import Constants from '../constants';
-
-describe('Docs JSON View', () => {
-  const databaseName = 'testdb';
-  let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-  const docs = [
-    {
-      id: "aardvark",
-      key: "aardvark",
-      value: {
-        rev: "5-717f5e88689af3ad191b47321de10c95"
-      },
-      doc: {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95",
-        min_weight: 40,
-        max_weight: 65,
-        min_length: 1,
-        max_length: 2.2,
-        latin_name: "Orycteropus afer",
-        wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    },
-    {
-      id: "badger",
-      key: "badger",
-      value: {
-        rev: "8-db03387de9cbd5c2814523b043566dfe"
-      },
-      doc: {
-        _id: "badger",
-        _rev: "8-db03387de9cbd5c2814523b043566dfe",
-        wiki_page: "http://en.wikipedia.org/wiki/Badger",
-        min_weight: 7,
-        max_weight: 30,
-        min_length: 0.6,
-        max_length: 0.9,
-        latin_name: "Meles meles",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    }
-  ];
-  const mangoIndexes = [
-    {ddoc: null, name: "_all_docs", type: "special", def: {fields: [{_id: "asc"}]}},
-    {ddoc: "_design/34223ecd7b6bcdc4dcdbc1a09bd63db365dd5f69", name: "idx1", type: "json", def: {fields: [{host3: "asc"}]}}
-  ];
-  let testDocs;
-
-  beforeEach(() => {
-    testDocs = docs;
-    docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-  });
-
-  it('getJsonViewData returns proper meta object with vanilla inputs', () => {
-    expect(getJsonViewData(testDocs, {databaseName, docType})).toEqual({
-      displayedFields: null,
-      hasBulkDeletableDoc: true,
-      results: [
-        {
-          content: JSON.stringify(testDocs[0], null, ' '),
-          id: testDocs[0].id,
-          _rev: testDocs[0].value.rev,
-          header: testDocs[0].id,
-          keylabel: 'id',
-          url: getDocUrl('app', testDocs[0].id, databaseName),
-          isDeletable: true,
-          isEditable: true
-        },
-        {
-          content: JSON.stringify(testDocs[1], null, ' '),
-          id: testDocs[1].id,
-          _rev: testDocs[1].value.rev,
-          header: testDocs[1].id,
-          keylabel: 'id',
-          url: getDocUrl('app', testDocs[1].id, databaseName),
-          isDeletable: true,
-          isEditable: true
-        }
-      ]
-    });
-  });
-
-  it('getJsonViewData false hasBulkDeletableDoc when all special mango docs', () => {
-    docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-    testDocs = mangoIndexes;
-    testDocs[0].type = 'special';
-    testDocs[1].type = 'special';
-
-    const idx0 = { ...testDocs[0] };
-    delete idx0.ddoc;
-    delete idx0.name;
-    const idx1 = { ...testDocs[1] };
-    delete idx1.ddoc;
-    delete idx1.name;
-
-    expect(getJsonViewData(testDocs, {databaseName, docType})).toEqual({
-      displayedFields: null,
-      hasBulkDeletableDoc: false,
-      results: [
-        {
-          content: JSON.stringify(idx0, null, ' '),
-          id: mangoIndexes[0].name,
-          _rev: undefined,
-          header: 'special: _id',
-          keylabel: '',
-          url: null,
-          isDeletable: false,
-          isEditable: false
-        },
-        {
-          content: JSON.stringify(idx1, null, ' '),
-          id: '_all_docs',
-          _rev: undefined,
-          header: 'special: host3',
-          keylabel: '',
-          url: null,
-          isDeletable: false,
-          isEditable: false
-        }
-      ]
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/key-search-fields.test.js b/app/addons/documents/__tests__/key-search-fields.test.js
deleted file mode 100644
index d337ab1..0000000
--- a/app/addons/documents/__tests__/key-search-fields.test.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import KeySearchFields from '../index-results/components/queryoptions/KeySearchFields';
-import sinon from 'sinon';
-
-describe('KeySearchFields', () => {
-  const betweenKeys = {
-    startkey: 'foo',
-    endKey: 'bar',
-    include: true
-  };
-
-  it('keysGroupClass contains \'hide\' when showByKeys and showBetweenKeys are false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('.js-query-keys-wrapper').hasClass('hide')).toBe(true);
-  });
-
-  it('byKeysClass contains \'hide\' and byKeysButtonClass contains \'active\' when showByKeys is false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('#js-showKeys').hasClass('hide')).toBe(true);
-    expect(wrapper.find('#betweenKeys').hasClass('active')).toBe(true);
-  });
-
-  it('betweenKeysClass contains \'hide\' and betweenKeysButtonClass contains \'active\' when showBetweenKeys is false', () => {
-    const wrapper = mount(<KeySearchFields
-      showByKeys={true}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-    />);
-
-    expect(wrapper.find('#js-showStartEnd').hasClass('hide')).toBe(true);
-    expect(wrapper.find('#byKeys').hasClass('active')).toBe(true);
-  });
-
-  it('calls toggleByKeys onClick', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={true}
-      showBetweenKeys={false}
-      betweenKeys={betweenKeys}
-      toggleByKeys={spy}
-    />);
-
-    wrapper.find('#byKeys').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleBetweenKeys onClick', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      toggleBetweenKeys={spy}
-    />);
-
-    wrapper.find('#betweenKeys').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls updateBetweenKeys onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateBetweenKeys={spy}
-    />);
-
-    wrapper.find('#startkey').simulate('change');
-    wrapper.find('#endkey').simulate('change');
-    expect(spy.calledTwice).toBe(true);
-  });
-
-  it('calls updateInclusiveEnd onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateBetweenKeys={spy}
-    />);
-
-    wrapper.find('#qoIncludeEndKeyInResults').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls updateByKeys onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<KeySearchFields
-      showByKeys={false}
-      showBetweenKeys={true}
-      betweenKeys={betweenKeys}
-      updateByKeys={spy}
-    />);
-
-    wrapper.find('#keys-input').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/main-fields-view.test.js b/app/addons/documents/__tests__/main-fields-view.test.js
deleted file mode 100644
index 3a5b960..0000000
--- a/app/addons/documents/__tests__/main-fields-view.test.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import MainFieldsView from '../index-results/components/queryoptions/MainFieldsView';
-import sinon from 'sinon';
-
-describe('MainFieldsView', () => {
-  const defaultProps = {
-    stable: false,
-    toggleStable: () => {},
-    update: 'true',
-    changeUpdateField: () => {},
-    enableStable: false
-  };
-  const docURL = 'http://foo.com';
-  it('does not render reduce when showReduce is false', () => {
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      docURL={docURL}
-    />);
-
-    expect(wrapper.find('#qoReduce').length).toBe(0);
-  });
-
-  it('render reduce when showReduce is true but does not render grouplevel when reduce is false', () => {
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      docURL={docURL}
-    />);
-
-    expect(wrapper.find('#qoReduce').length).toBe(1);
-    expect(wrapper.find('#qoGroupLevelGroup').length).toBe(0);
-  });
-
-  it('calls toggleIncludeDocs onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={false}
-      toggleIncludeDocs={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoIncludeDocs').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls groupLevelChange onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={true}
-      toggleIncludeDocs={() => {}}
-      updateGroupLevel={spy}
-      toggleReduce={() => {}}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoGroupLevel').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleReduce onChange', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={true}
-      reduce={true}
-      toggleIncludeDocs={() => {}}
-      updateGroupLevel={() => {}}
-      toggleReduce={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoReduce').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls toggleStable', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      toggleStable={spy}
-      docURL={docURL}
-      enableStable={true}
-    />);
-
-    wrapper.find('#qoStable').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls changeUpdateField', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<MainFieldsView
-      {...defaultProps}
-      includeDocs={false}
-      showReduce={false}
-      reduce={false}
-      toggleIncludeDocs={() => {}}
-      changeUpdateField={spy}
-      docURL={docURL}
-    />);
-
-    wrapper.find('#qoUpdate').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/pagination-actions.test.js b/app/addons/documents/__tests__/pagination-actions.test.js
deleted file mode 100644
index 2cb11c1..0000000
--- a/app/addons/documents/__tests__/pagination-actions.test.js
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed 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.
-
-import {
-  toggleShowAllColumns,
-  setPerPage,
-  resetFetchParamsBeforePerPageChange,
-  incrementSkipForPageNext,
-  decrementSkipForPagePrevious,
-  resetPagination
-} from '../index-results/actions/pagination';
-import ActionTypes from '../index-results/actiontypes';
-import FauxtonAPI from '../../../core/api';
-
-describe('Docs Pagination API', () => {
-  it('toggleShowAllColumns returns the proper event to dispatch', () => {
-    expect(toggleShowAllColumns()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS
-    });
-  });
-
-  it('setPerPage returns the proper event to dispatch', () => {
-    const pageSize = 10;
-    expect(setPerPage(pageSize)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-      perPage: pageSize
-    });
-  });
-
-  describe('resetFetchParamsBeforePerPageChange', () => {
-    let fetchParams, queryOptionsParams;
-    let amount = 10;
-    beforeEach(() => {
-      fetchParams = {
-        skip: 20,
-        limit: 21
-      };
-      queryOptionsParams = {};
-    });
-
-    it('fetchs with proper params when queryOptions doesnt have skip', () => {
-      expect(resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount)).toEqual({
-        limit: 11,
-        skip: 0
-      });
-    });
-
-    it('fetches with the proper params when queryOptions does have skip', () => {
-      queryOptionsParams.skip = 5;
-      expect(resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount)).toEqual({
-        limit: 11,
-        skip: 5
-      });
-    });
-  });
-
-  it('incrementSkipForPageNext returns the proper fetch params', () => {
-    const fetchParams = {
-      skip: 0,
-      limit: 21
-    };
-    const perPage = 20;
-    expect(incrementSkipForPageNext(fetchParams, perPage)).toEqual({
-      skip: 20,
-      limit: 21
-    });
-  });
-
-  describe('decrementSkipForPagePrevious', () => {
-    it('returns the proper fetch params when greater than zero', () => {
-      const fetchParams = {
-        skip: 40,
-        limit: 21
-      };
-      const perPage = 20;
-      expect(decrementSkipForPagePrevious(fetchParams, perPage)).toEqual({
-        skip: 20,
-        limit: 21
-      });
-    });
-
-    it('returns the proper fetch params when skip less than zero', () => {
-      const fetchParams = {
-        skip: 5,
-        limit: 21
-      };
-      const perPage = 20;
-      expect(decrementSkipForPagePrevious(fetchParams, perPage)).toEqual({
-        skip: 0,
-        limit: 21
-      });
-    });
-  });
-
-  it('resetPagination defaults to FauxtonAPI page size if arg empty', () => {
-    expect(resetPagination()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-      perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/pagination-footer.test.js b/app/addons/documents/__tests__/pagination-footer.test.js
deleted file mode 100644
index 952382a..0000000
--- a/app/addons/documents/__tests__/pagination-footer.test.js
+++ /dev/null
@@ -1,199 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PaginationFooter from '../index-results/components/pagination/PaginationFooter';
-import sinon from 'sinon';
-
-describe('PaginationFooter', () => {
-  const displayedFields = {};
-  beforeEach(() => {
-    displayedFields.shown = 5;
-    displayedFields.allFieldCount = 10;
-  });
-
-  it('does not show table controls if showPrioritizedEnabled is false', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={false}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(0);
-  });
-
-  it('does not show table controls if hasResults is false', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={false}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(0);
-  });
-
-  it('does show table controls if showPrioritizedEnabled and hasResults are true', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('#footer-doc-control-prioritized').length).toBe(1);
-  });
-
-  it('calls paginateNext when clicked and available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={true}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginateNext={spy}
-    />);
-
-    wrapper.instance().nextClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('does not call paginateNext when clicked and not available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginateNext={spy}
-    />);
-
-    wrapper.instance().nextClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(false);
-  });
-
-  it('calls paginatePrevious when clicked and available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={true}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginatePrevious={spy}
-    />);
-
-    wrapper.instance().previousClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('does not call paginatePrevious when clicked and not available', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-      paginatePrevious={spy}
-    />);
-
-    wrapper.instance().previousClicked({ preventDefault: () => {} });
-    expect(spy.calledOnce).toBe(false);
-  });
-
-  it('renders custom text when no docs', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('.current-docs span').text()).toMatch('Showing 0 documents.');
-  });
-
-  it('renders text indicating range when docs', () => {
-    const wrapper = mount(<PaginationFooter
-      showPrioritizedEnabled={true}
-      hasResults={true}
-      prioritizedEnabled={false}
-      displayedFields={displayedFields}
-      perPage={20}
-      canShowNext={false}
-      canShowPrevious={false}
-      toggleShowAllColumns={() => {}}
-      docs={[{_id: 'foo'}]}
-      pageStart={1}
-      pageEnd={20}
-    />);
-
-    expect(wrapper.find('.current-docs span').text()).toMatch('Showing document 1 - 20.');
-  });
-});
diff --git a/app/addons/documents/__tests__/paging-controls.test.js b/app/addons/documents/__tests__/paging-controls.test.js
deleted file mode 100644
index 4fb93c2..0000000
--- a/app/addons/documents/__tests__/paging-controls.test.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PagingControls from '../index-results/components/pagination/PagingControls';
-
-describe('PagingControls', () => {
-  it('pagination controls disabled when canShowPrevious and canShowNext are false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={false}
-      canShowPrevious={false}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled').length).toBe(2);
-  });
-
-  it('pagination control disabled when canShowPrevious is false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={true}
-      canShowPrevious={false}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled #previous').length).toBe(1);
-  });
-
-  it('pagination control disabled when canShowNext is false', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={false}
-      canShowPrevious={true}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled #next').length).toBe(1);
-  });
-
-  it('pagination controls enabled when canShowPrevious and canShowNext are true', () => {
-    const wrapper = mount(<PagingControls
-      canShowNext={true}
-      canShowPrevious={true}
-      nextClicked={() => {}}
-      previousClicked={() => {}}
-    />);
-
-    expect(wrapper.find('ul.pagination li.disabled').length).toBe(0);
-  });
-});
diff --git a/app/addons/documents/__tests__/partition-key.test.js b/app/addons/documents/__tests__/partition-key.test.js
deleted file mode 100644
index de28f1a..0000000
--- a/app/addons/documents/__tests__/partition-key.test.js
+++ /dev/null
@@ -1,128 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { shallow } from 'enzyme';
-import PartitionKeySelector from '../partition-key/PartitionKeySelector';
-import sinon from 'sinon';
-
-describe('PartitionKeySelector', () => {
-  const defaultProps = {
-    selectorVisible: true,
-    partitionKey: '',
-    checkDbPartitioned: () => {},
-    onPartitionKeySelected: () => {}
-  };
-
-  it('is only rendered when selectorVisible is set to true', () => {
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      selectorVisible={false}
-    />);
-    expect(wrapper.find('div.partition-selector').exists()).toBe(false);
-
-    const wrapper2 = shallow(<PartitionKeySelector
-      {...defaultProps}
-      selectorVisible={true}
-    />);
-    expect(wrapper2.find('div.partition-selector').exists()).toBe(true);
-  });
-
-  it('uses global mode by default', () => {
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-    />);
-
-    const btLabel = wrapper.find('div').text();
-    expect(btLabel).toMatch('No partition selected');
-  });
-
-  it('switches from global mode to partition mode when a key is already set', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    wrapper.find('button').simulate('click');
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-  it('if a key is not set switching from global mode shows the text input', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    expect(wrapper.state().editMode).toBe(false);
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    expect(spyOnKeySelected.calledOnce).toBe(false);
-  });
-
-  it('switches from partition mode to global mode', () => {
-    const spyOnGlobalSelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey='part1'
-      globalMode={false}
-      onGlobalModeSelected={spyOnGlobalSelected}
-    />);
-
-    wrapper.find('button').simulate('click');
-    expect(spyOnGlobalSelected.calledOnce).toBe(true);
-  });
-
-  it('calls onPartitionKeySelected when a new value is set by pressing Enter', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    // Start edit mode
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    // Set new value
-    wrapper.find('input').simulate('change', { target: { value: 'new_part_key' } });
-    wrapper.find('input').simulate('keypress', {key: 'Enter'});
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-  it('calls onPartitionKeySelected when a new value is set and the component loses focus', () => {
-    const spyOnKeySelected = sinon.spy();
-    const wrapper = shallow(<PartitionKeySelector
-      {...defaultProps}
-      partitionKey=''
-      globalMode={true}
-      onPartitionKeySelected={spyOnKeySelected}
-    />);
-
-    // Start edit mode
-    wrapper.find('button').simulate('click');
-    expect(wrapper.state().editMode).toBe(true);
-    // Set new value
-    wrapper.find('input').simulate('change', { target: { value: 'new_part_key' } });
-    wrapper.find('input').simulate('blur');
-    expect(spyOnKeySelected.calledOnce).toBe(true);
-  });
-
-});
diff --git a/app/addons/documents/__tests__/perpage-selector.test.js b/app/addons/documents/__tests__/perpage-selector.test.js
deleted file mode 100644
index dc9fd0e..0000000
--- a/app/addons/documents/__tests__/perpage-selector.test.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import PerPageSelector from '../index-results/components/pagination/PerPageSelector';
-import sinon from 'sinon';
-
-describe('PerPageSelector', () => {
-  it('calls perPageChange when value changes', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<PerPageSelector perPage={10} perPageChange={spy} />);
-
-    wrapper.find('#select-per-page').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/query-buttons.test.js b/app/addons/documents/__tests__/query-buttons.test.js
deleted file mode 100644
index 225ccc3..0000000
--- a/app/addons/documents/__tests__/query-buttons.test.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import QueryButtons from '../index-results/components/queryoptions/QueryButtons';
-import sinon from 'sinon';
-
-describe('QueryButtons', () => {
-  it('calls onCancel after click', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<QueryButtons onCancel={spy} />);
-
-    wrapper.find('a').simulate('click');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/query-options.test.js b/app/addons/documents/__tests__/query-options.test.js
deleted file mode 100644
index 4459ba0..0000000
--- a/app/addons/documents/__tests__/query-options.test.js
+++ /dev/null
@@ -1,351 +0,0 @@
-// Licensed 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.
-
-import { shallow, mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import QueryOptions from '../index-results/components/queryoptions/QueryOptions';
-import Constants from '../constants';
-
-describe('QueryOptions', () => {
-  const props = {
-    includeDocs: false,
-    queryOptionsToggleIncludeDocs: () => {},
-    reduce: false,
-    contentVisible: true,
-    perPage: 10,
-    queryOptionsToggleStable: () => {},
-    queryOptionsChangeUpdate: () => {},
-    stable: false,
-    update: 'true',
-    betweenKeys: {},
-    showReduce: true,
-    enableStable: true
-  };
-
-  it('calls resetPagination and queryOptionsExecute on submit', () => {
-    const spy1 = sinon.spy();
-    const spy2 = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      queryOptionsExecute={spy1}
-      resetPagination={spy2}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().executeQuery();
-    expect(spy1.calledOnce).toBe(true);
-    expect(spy2.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsApplyFilterOnlyDdocs if ddocsOnly is true', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsApplyFilterOnlyDdocs={spy}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsApplyFilterOnlyDdocs if ddocsOnly switches to true on new props', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={false}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={spy}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillReceiveProps({
-      ddocsOnly: true
-    });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('calls queryOptionsRemoveFilterOnlyDdocs if ddocsOnly switches to false on new props', () => {
-    const spy = sinon.spy();
-    const queryOptionsParams = {
-      include_docs: false
-    };
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={spy}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={queryOptionsParams}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    wrapper.instance().UNSAFE_componentWillReceiveProps({
-      ddocsOnly: false
-    });
-    expect(spy.calledOnce).toBe(true);
-  });
-
-  it('button is not highlighted when query options are not set', () => {
-
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...props}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(false);
-  });
-
-  it('button is highlighted when reduce option is enabled', () => {
-    const newProps = {
-      ...props,
-      reduce: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when limit option is set', () => {
-    const newProps = {
-      ...props,
-      limit: 3
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when skip option is set', () => {
-    const newProps = {
-      ...props,
-      skip: 3
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when betweenKeys option is set', () => {
-    const newProps = {
-      ...props,
-      betweenKeys: {startkey:"a"}
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when byKeys option is set', () => {
-    const newProps = {
-      ...props,
-      byKeys: {}
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is highlighted when descending option is enabled', () => {
-    const newProps = {
-      ...props,
-      descending: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(true);
-  });
-
-  it('button is not highlighted when includeDocs option is enabled', () => {
-    const newProps = {
-      ...props,
-      includeDocs: true
-    };
-    const wrapper = shallow(<QueryOptions
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      {...newProps}
-    />);
-
-    const isHighlighted = wrapper.find('ToggleHeaderButton').prop('active');
-    expect(isHighlighted).toBe(false);
-  });
-
-  it('stable option is only enabled when enableStable is true', () => {
-    const wrapper = mount(<QueryOptions
-      {...props}
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      showReduce={true}
-      enableStable={true}
-    />);
-
-    expect(wrapper.find('input#qoStable').prop("disabled")).toBe(false);
-    wrapper.setProps({enableStable: false});
-    expect(wrapper.find('input#qoStable').prop("disabled")).toBe(true);
-  });
-
-  it('reduce option is only displayed when showReduce is true', () => {
-    const wrapper = mount(<QueryOptions
-      {...props}
-      ddocsOnly={true}
-      update='true'
-      queryOptionsRemoveFilterOnlyDdocs={() => {}}
-      queryOptionsApplyFilterOnlyDdocs={() => {}}
-      queryOptionsExecute={() => {}}
-      resetPagination={() => {}}
-      queryOptionsToggleVisibility={() => {}}
-      queryOptionsParams={{}}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}
-      changeLayout={() => {}}
-      showReduce={true}
-      enableStable={true}
-    />);
-
-    expect(wrapper.find('input#qoReduce').exists()).toBe(true);
-
-    wrapper.setProps({showReduce: false});
-    expect(wrapper.find('input#qoReduce').exists()).toBe(false);
-  });
-
-});
diff --git a/app/addons/documents/__tests__/queryoptions-actions.test.js b/app/addons/documents/__tests__/queryoptions-actions.test.js
deleted file mode 100644
index 7ed4a62..0000000
--- a/app/addons/documents/__tests__/queryoptions-actions.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-// Licensed 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.
-
-import * as Actions from '../index-results/actions/queryoptions';
-import ActionTypes from '../index-results/actiontypes';
-
-describe('Docs Query Options API', () => {
-  it('resetFetchParamsBeforeExecute returns proper fetch params', () => {
-    const perPage = 20;
-    expect(Actions.resetFetchParamsBeforeExecute(perPage)).toEqual({
-      limit: 21,
-      skip: 0
-    });
-  });
-
-  it('queryOptionsToggleVisibility returns the proper event to dispatch', () => {
-    const newVisibility = true;
-    expect(Actions.queryOptionsToggleVisibility(newVisibility)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        isVisible: true
-      }
-    });
-  });
-
-  it('queryOptionsToggleReduce returns the proper event to dispatch', () => {
-    const previousReduce = true;
-    expect(Actions.queryOptionsToggleReduce(previousReduce)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        reduce: false
-      }
-    });
-  });
-
-  it('queryOptionsUpdateGroupLevel returns the proper event to dispatch', () => {
-    const newGroupLevel = 'exact';
-    expect(Actions.queryOptionsUpdateGroupLevel(newGroupLevel)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        groupLevel: 'exact'
-      }
-    });
-  });
-
-  it('queryOptionsToggleByKeys returns the proper event to dispatch', () => {
-    const previousShowByKeys = true;
-    expect(Actions.queryOptionsToggleByKeys(previousShowByKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        showByKeys: false,
-        showBetweenKeys: true
-      }
-    });
-  });
-
-  it('queryOptionsToggleBetweenKeys returns the proper event to dispatch', () => {
-    const previousShowBetweenKeys = true;
-    expect(Actions.queryOptionsToggleBetweenKeys(previousShowBetweenKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        showBetweenKeys: false,
-        showByKeys: true,
-      }
-    });
-  });
-
-  it('queryOptionsUpdateBetweenKeys returns the proper event to dispatch', () => {
-    const newBetweenKeys = {
-      include: true,
-      startkey: '"_design"',
-      endkey: '"_design"'
-    };
-    expect(Actions.queryOptionsUpdateBetweenKeys(newBetweenKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        betweenKeys: {
-          include: true,
-          startkey: '"_design"',
-          endkey: '"_design"'
-        }
-      }
-    });
-  });
-
-  it('queryOptionsUpdateByKeys returns the proper event to dispatch', () => {
-    const newByKeys = ['foo', 'bar'];
-    expect(Actions.queryOptionsUpdateByKeys(newByKeys)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        byKeys: ['foo', 'bar']
-      }
-    });
-  });
-
-  it('queryOptionsToggleDescending returns the proper event to dispatch', () => {
-    const previousDescending = true;
-    expect(Actions.queryOptionsToggleDescending(previousDescending)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        descending: false
-      }
-    });
-  });
-
-  it('queryOptionsUpdateSkip returns the proper event to dispatch', () => {
-    const newSkip = 5;
-    expect(Actions.queryOptionsUpdateSkip(newSkip)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        skip: 5
-      }
-    });
-  });
-
-  it('queryOptionsUpdateLimit returns the proper event to dispatch', () => {
-    const newLimit = 50;
-    expect(Actions.queryOptionsUpdateLimit(newLimit)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        limit: 50
-      }
-    });
-  });
-
-  it('queryOptionsToggleIncludeDocs returns the proper event to dispatch', () => {
-    const previousIncludeDocs = true;
-    expect(Actions.queryOptionsToggleIncludeDocs(previousIncludeDocs)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        includeDocs: false
-      }
-    });
-  });
-
-  it('queryOptionsFilterOnlyDdocs returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsFilterOnlyDdocs()).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        betweenKeys: {
-          include: false,
-          startkey: '"_design"',
-          endkey: '"_design0"'
-        },
-        showBetweenKeys: true,
-        showByKeys: false
-      }
-    });
-  });
-
-  it('queryOptionsToggleStable returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsToggleStable(true)).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        stable: false
-      }
-    });
-  });
-
-  it('queryOptionsChangeUpdate returns the proper event to dispatch', () => {
-    expect(Actions.queryOptionsChangeUpdate('lazy')).toEqual({
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-      options: {
-        update: 'lazy'
-      }
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/reducers.test.js b/app/addons/documents/__tests__/reducers.test.js
deleted file mode 100644
index fb36b28..0000000
--- a/app/addons/documents/__tests__/reducers.test.js
+++ /dev/null
@@ -1,532 +0,0 @@
-// Licensed 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.
-
-import * as Reducers from '../index-results/reducers';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../constants';
-import ActionTypes from '../index-results/actiontypes';
-
-describe('Docs Reducers', () => {
-  const initialState = {
-    docs: [],  // raw documents returned from couch
-    selectedDocs: [],  // documents selected for manipulation
-    isLoading: false,
-    tableView: {
-      selectedFieldsTableView: [],  // current columns to display
-      showAllFieldsTableView: false, // do we show all possible columns?
-    },
-    isEditable: true,  // can the user manipulate the results returned?
-    selectedLayout: Constants.LAYOUT_ORIENTATION.METADATA,
-    textEmptyIndex: 'No Documents Found',
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-    fetchParams: {
-      limit: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE + 1,
-      skip: 0
-    },
-    pagination: {
-      pageStart: 1,  // index of first doc in this page of results
-      currentPage: 1,  // what page of results are we showing?
-      perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE,
-      canShowNext: false  // flag indicating if we can show a next page
-    },
-    queryOptionsPanel: {
-      isVisible: false,
-      showByKeys: false,
-      showBetweenKeys: false,
-      includeDocs: false,
-      betweenKeys: {
-        include: true,
-        startkey: '',
-        endkey: ''
-      },
-      byKeys: '',
-      descending: false,
-      skip: '',
-      limit: 'none',
-      reduce: false,
-      groupLevel: 'exact',
-      showReduce: false
-    }
-  };
-  const testDoc = {
-    id: 'foo',
-    key: 'foo',
-    value: {
-      rev: '1-967a00dff5e02add41819138abb3284d'
-    }
-  };
-
-  it('resets selectedDocs on state reset', () => {
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [{_id: '1'}]
-    };
-
-    const newState = Reducers.default(initialState, action);
-
-    const resetAction = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-    };
-
-    const newState2 = Reducers.default(newState, resetAction);
-    expect(newState2.selectedDocs).toEqual([]);
-
-  });
-
-  it('getDocs returns the docs attribute from the state', () => {
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-      docs: [testDoc],
-      fetchPArams: {
-        limit: 21,
-        skip: 0
-      },
-      canShowNext: true
-    };
-
-    const newState = Reducers.default(initialState, action);
-    expect(Reducers.getDocs(newState)).toEqual([testDoc]);
-  });
-
-  it('getSelected returns the selectedDocs attribute from the state', () => {
-    const selectedDoc = {
-      _id: 'foo',
-      _rev: '1-967a00dff5e02add41819138abb3284d',
-      _deleted: true
-    };
-    const action = {
-      type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-      selectedDocs: [selectedDoc]
-    };
-
-    const newState = Reducers.default(initialState, action);
-    expect(Reducers.getSelectedDocs(newState)).toEqual([selectedDoc]);
-  });
-
-  it('getIsLoading returns the isLoading attribute from the state', () => {
-    expect(Reducers.getIsLoading(initialState)).toBe(false);
-  });
-
-  it('getIsEditable returns the isEditable attribute from the state', () => {
-    expect(Reducers.getIsEditable(initialState)).toBe(true);
-  });
-
-  it('getSelectedLayout returns the selectedLayout attribute from the state', () => {
-    expect(Reducers.getSelectedLayout(initialState)).toMatch(Constants.LAYOUT_ORIENTATION.METADATA);
-  });
-
-  it('getTextEmptyIndex returns the textEmptyIndex attribute from the state', () => {
-    expect(Reducers.getTextEmptyIndex(initialState)).toMatch('No Documents Found');
-  });
-
-  it('getDocType returns the docType attribute from the state', () => {
-    expect(Reducers.getDocType(initialState)).toMatch(Constants.INDEX_RESULTS_DOC_TYPE.VIEW);
-  });
-
-  it('getFetchParams returns the fetchParams attribute from the state', () => {
-    expect(Reducers.getFetchParams(initialState)).toEqual({
-      limit: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE + 1,
-      skip: 0
-    });
-  });
-
-  it('getPageStart returns the pageStart attribute from the state', () => {
-    expect(Reducers.getPageStart(initialState)).toBe(1);
-  });
-
-  it('getPrioritizedEnabled returns the showAllFieldsTableView attribute from the state', () => {
-    expect(Reducers.getPrioritizedEnabled(initialState)).toBe(false);
-  });
-
-  it('getPerPage returns the perPage attribute from the state', () => {
-    expect(Reducers.getPerPage(initialState)).toBe(FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE);
-  });
-
-  it('getCanShowNext returns the canShowNext attribute from the state', () => {
-    expect(Reducers.getCanShowNext(initialState)).toBe(false);
-  });
-
-  it('getQueryOptionsPanel returns the queryOptionsPanel attribute from the state', () => {
-    expect(Reducers.getQueryOptionsPanel(initialState)).toEqual({
-      isVisible: false,
-      showByKeys: false,
-      showBetweenKeys: false,
-      includeDocs: false,
-      betweenKeys: {
-        include: true,
-        startkey: '',
-        endkey: ''
-      },
-      byKeys: '',
-      descending: false,
-      skip: '',
-      limit: 'none',
-      reduce: false,
-      groupLevel: 'exact',
-      showReduce: false
-    });
-  });
-
-  describe('removeGeneratedMangoDocs', () => {
-    it('returns false when language is query', () => {
-      expect(Reducers.removeGeneratedMangoDocs({ language: 'query' })).toBe(false);
-    });
-
-    it('returns true when language is not query', () => {
-      expect(Reducers.removeGeneratedMangoDocs({ language: 'foo' })).toBe(true);
-    });
-  });
-
-  describe('getShowPrioritizedEnabled', () => {
-    it('returns false when not table layout', () => {
-      expect(Reducers.getShowPrioritizedEnabled(initialState)).toBe(false);
-    });
-
-    it('returns true when table layout', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-        layout: Constants.LAYOUT_ORIENTATION.TABLE
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getShowPrioritizedEnabled(newState)).toBe(true);
-    });
-  });
-
-  describe('getPageEnd', () => {
-    it('returns false when there are no results', () => {
-      expect(Reducers.getPageEnd(initialState)).toBe(false);
-    });
-
-    it('returns pageStart + results.length - 1 when there are results', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getPageEnd(newState)).toBe(1);
-    });
-  });
-
-  describe('getHasResults', () => {
-    it('returns false when state is loading', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasResults(newState)).toBe(false);
-    });
-
-    it('returns false when docs.length is zero', () => {
-      expect(Reducers.getHasResults(initialState)).toBe(false);
-    });
-
-    it('returns true when not loading and there are results', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasResults(newState)).toBe(true);
-    });
-  });
-
-  describe('getAllDocsSelected', () => {
-    it('returns false if docs.length is zero', () => {
-      expect(Reducers.getAllDocsSelected(initialState)).toBe(false);
-    });
-
-    it('returns false if docs but selectedDocs.length is zero', () => {
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getAllDocsSelected(newState)).toBe(false);
-    });
-
-    it('returns false there is a doc not in the selectedDocs array', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getAllDocsSelected(newState)).toBe(false);
-    });
-
-    it('returns true when all selectable docs in the docs array are in the selectedDocs array', () => {
-      const newDocAction = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-        docs: [testDoc],
-        fetchPArams: {
-          limit: 21,
-          skip: 0
-        },
-        canShowNext: true,
-        docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-      };
-
-      const newState1 = Reducers.default(initialState, newDocAction);
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const newSelectedDocAction = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-      const newState2 = Reducers.default(newState1, newSelectedDocAction);
-      expect(Reducers.getAllDocsSelected(newState2)).toBe(true);
-    });
-  });
-
-  describe('getHasDocsSelected', () => {
-    it('returns false when there are no docs in the selectedDocs array', () => {
-      expect(Reducers.getHasDocsSelected(initialState)).toBe(false);
-    });
-
-    it('returns true when there are docs in the selectedDocs array', () => {
-      const selectedDoc = {
-        _id: 'foo',
-        _rev: '1-967a00dff5e02add41819138abb3284d',
-        _deleted: true
-      };
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-        selectedDocs: [selectedDoc]
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getHasDocsSelected(newState)).toBe(true);
-    });
-  });
-
-  it('getNumDocsSelected returns the length of the selectedDocs array', () => {
-    expect(Reducers.getNumDocsSelected(initialState)).toBe(0);
-  });
-
-  describe('canShowPrevious', () => {
-    it('returns false when the current page is 1', () => {
-      expect(Reducers.getCanShowPrevious(initialState)).toBe(false);
-    });
-
-    it('returns true when the current page is greater than 1', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getCanShowPrevious(newState)).toBe(true);
-    });
-  });
-
-  describe('getQueryOptionsParams', () => {
-    it('returns an empty object by default', () => {
-      expect(Reducers.getQueryOptionsParams(initialState)).toEqual({});
-    });
-
-    it('adds include_docs when set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          includeDocs: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        include_docs: true
-      });
-    });
-
-    it('adds start_key, end_key, and inclusive end when set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          showBetweenKeys: true,
-          betweenKeys: {
-            include: true,
-            startkey: '"_design"',
-            endkey: '"_design0"'
-          }
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        inclusive_end: true,
-        start_key: '"_design"',
-        end_key: '"_design0"'
-      });
-    });
-
-    it('adds keys if showByKeys is set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          showByKeys: true,
-          byKeys: "['_design', 'foo']"
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        keys: "['_design', 'foo']"
-      });
-    });
-
-    it('adds limit if limit is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          limit: 50
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        limit: 50
-      });
-    });
-
-    it('adds skip if skip is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          skip: 5
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        skip: 5
-      });
-    });
-
-    it('adds descending if descending is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          descending: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        descending: true
-      });
-    });
-
-    it('adds reduce if reduce is set in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          reduce: true
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        reduce: true,
-        group: true
-      });
-    });
-
-    it('adds reduce and group_level if both are set in queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          reduce: true,
-          groupLevel: 2
-        }
-      };
-
-      const newState = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newState)).toEqual({
-        reduce: true,
-        group_level: 2
-      });
-    });
-
-    it('only adds update when set to non-default value in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          update: 'lazy'
-        }
-      };
-
-      const newStateLazy = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateLazy)).toEqual({
-        update: 'lazy'
-      });
-
-      action.options.update = 'false';
-      const newStateFalse = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateFalse)).toEqual({
-        update: 'false'
-      });
-
-      action.options.update = 'true';
-      const newStateTrue = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateTrue)).toEqual({
-        update: undefined
-      });
-    });
-
-    it('only adds stable when set to non-default value in the queryOptionsPanel', () => {
-      const action = {
-        type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-        options: {
-          stable: true
-        }
-      };
-
-      const newStateTrue = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateTrue)).toEqual({
-        stable: true
-      });
-
-      action.options.stable = false;
-      const newStateFalse = Reducers.default(initialState, action);
-      expect(Reducers.getQueryOptionsParams(newStateFalse)).toEqual({
-        stable: undefined
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/resources.test.js b/app/addons/documents/__tests__/resources.test.js
deleted file mode 100644
index cc3324c..0000000
--- a/app/addons/documents/__tests__/resources.test.js
+++ /dev/null
@@ -1,333 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../core/api";
-import Helpers from '../../../helpers';
-import Models from "../resources";
-import "../base";
-import sinon from 'sinon';
-
-describe('Document', () => {
-  let doc;
-  beforeEach(() => {
-    doc = new Models.Doc({}, {});
-  });
-
-  it('does not remove an id attribute', () => {
-    const res = doc.parse({
-      _id: 'be31e531fe131bdf416b479ac1000484',
-      _rev: '4-3a1b9f4b988b413e9245cd250769da72',
-      id: 'foo'
-    });
-    expect(res.id).toBe('foo');
-  });
-
-  it('removes the id, if we create a document and get back an "id" instead of "_id"', () => {
-    // if we take the document {"_id": "mycustomid", "_rev": "18-9cdeb1b121137233e3466b06a1780c29", id: "foo"}
-    // and do a PUT request for an update, CouchDB will return:
-    // {"ok":true,"id":"mycustomid","rev":"18-9cdeb1b121137233e3466b06a1780c29"}
-    // and our Model will think it has the id "mycustomid" instead of "foo"
-    const res = doc.parse({
-      id: 'be31e531fe131bdf416b479ac1000484',
-      _rev: '4-3a1b9f4b988b413e9245cd250769da72',
-      ok: true
-    });
-    expect(res.id).toBeFalsy();
-  });
-
-  it('can return the doc url, if id given', () => {
-    doc = new Models.Doc({_id: 'scholle'}, {
-      database: {id: 'blerg', safeID: function () { return this.id; }}
-    });
-
-    expect(doc.url('apiurl')).toMatch(/\/blerg/);
-  });
-
-  it('will return the API url to create a new doc, if no doc exists yet', () => {
-    doc = new Models.Doc({}, {
-      database: {id: 'blerg', safeID: function () { return this.id; }}
-    });
-
-    expect(doc.url('apiurl')).toMatch(/\/blerg/);
-  });
-});
-
-describe('AllDocs', () => {
-  let collection;
-
-  it('all-docs-list documents are always editable', () => {
-    collection = new Models.AllDocs([{
-      _id: 'myId1',
-      doc: 'num1'
-    },
-    {
-      _id: 'myId2',
-      doc: 'num2'
-    }], {
-      database: {id: 'databaseId', safeID: function () { return this.id; }},
-      params: {limit: 20}
-    });
-
-    expect(collection.isEditable()).toBeTruthy();
-  });
-});
-
-describe('NewDoc', () => {
-
-  let getUUID;
-  beforeEach(() => {
-    getUUID = sinon.stub(Helpers, 'getUUID').resolves({ uuids: ['abc9876'] });
-  });
-
-  afterEach(() => {
-    getUUID.restore();
-  });
-
-  it('adds partition key to auto-generated ID', () => {
-    const newDoc = new Models.NewDoc(null, { database: {}, partitionKey: 'part_key' });
-    return newDoc.fetch().then(() => {
-      expect(newDoc.get('_id')).toMatch(/part_key:abc9876/);
-    });
-  });
-});
-
-describe('QueryParams', () => {
-  describe('parse', () => {
-    it('should not parse arbitrary parameters', () => {
-      const params = {'foo': '[1]]'};
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual(params);
-    });
-
-    it('parses startkey, endkey', () => {
-      const params = {
-        'startkey':'["a","b"]',
-        'endkey':'["c","d"]'
-      };
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual({
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd']
-      });
-    });
-
-    it('parses key', () => {
-      const params = {
-        key:'[1,2]'
-      };
-      const result = Models.QueryParams.parse(params);
-
-      expect(result).toEqual({'key': [1, 2]});
-    });
-
-    it('does not modify input', () => {
-      const params = {
-        key:'["a","b"]'
-      };
-      const clone = _.clone(params);
-      Models.QueryParams.parse(params);
-      expect(params).toEqual(clone);
-    });
-  });
-
-  describe('stringify', () => {
-    it('should not stringify arbitrary parameters', () => {
-      const params = {'foo': [1, 2, 3]};
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual(params);
-    });
-
-    it('stringifies startkey, endkey', () => {
-      const params = {
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd']
-      };
-
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual({
-        'startkey':'["a","b"]',
-        'endkey':'["c","d"]'
-      });
-    });
-
-    it('stringifies key', () => {
-      const params = {'key':['a', 'b']};
-      const result = Models.QueryParams.stringify(params);
-
-      expect(result).toEqual({ 'key': '["a","b"]' });
-    });
-
-    it('does not modify input', () => {
-      const params = {'key': ['a', 'b']};
-      const clone = _.clone(params);
-      Models.QueryParams.stringify(params);
-
-      expect(params).toEqual(clone);
-    });
-
-    it('is symmetrical with parse', () => {
-      const params = {
-        'startkey': ['a', 'b'],
-        'endkey': ['c', 'd'],
-        'foo': '[1,2]',
-        'bar': 'abc'
-      };
-
-      const clone = _.clone(params);
-      const json = Models.QueryParams.stringify(params);
-      const result = Models.QueryParams.parse(json);
-
-      expect(result).toEqual(clone);
-    });
-  });
-});
-
-describe('Bulk Delete', () => {
-  let databaseId = 'ente',
-      collection,
-      promise,
-      resolve,
-      reject,
-      values;
-
-  values = [{
-    _id: '1',
-    _rev: '1234561',
-    _deleted: true
-  },
-  {
-    _id: '2',
-    _rev: '1234562',
-    _deleted: true
-  },
-  {
-    _id: '3',
-    _rev: '1234563',
-    _deleted: true
-  }];
-
-  beforeEach(() => {
-    collection = new Models.BulkDeleteDocCollection(values, {
-      databaseId: databaseId
-    });
-
-    promise = new FauxtonAPI.Promise((res, rej) => {
-      resolve = res;
-      reject = rej;
-    });
-  });
-
-  it('contains the models', () => {
-    collection = new Models.BulkDeleteDocCollection(values, {
-      databaseId: databaseId
-    });
-
-    expect(collection.length).toBe(3);
-  });
-
-  it('clears the memory if no errors happened', () => {
-    collection.handleResponse([
-      {'ok': true, 'id': '1', 'rev': '10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok': true, 'id': '2', 'rev': '6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(collection.length).toBe(1);
-    });
-  });
-
-  it('triggers a removed event with all ids', (done) => {
-    collection.listenToOnce(collection, 'removed', function (ids) {
-      expect(ids).toEqual(['Deferred', 'DeskSet']);
-      done();
-    });
-
-    collection.handleResponse([
-      {'ok': true, 'id': 'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok': true, 'id': 'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-  });
-
-  it('triggers a error event with all errored ids', (done) => {
-    collection.listenToOnce(collection, 'error', function (ids) {
-      done();
-      expect(ids).toEqual(['Deferred']);
-    });
-
-    collection.handleResponse([
-      {'error':'conflict', 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-  });
-
-  it('removes successfull deleted from the collection but keeps one with errors', () => {
-    collection.handleResponse([
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'2', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'},
-      {'error':'conflict', 'id':'3', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(collection.get('1')).toBeTruthy();
-      expect(collection.get('3')).toBeTruthy();
-      expect(collection.get('2')).toBeFalsy();
-    });
-  });
-
-  it('triggers resolve for successful delete', () => {
-    const spy = sinon.spy();
-    promise.then(spy);
-
-    collection.handleResponse([
-      {'ok':true, 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'}
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(spy.calledOnce).toBeTruthy();
-    });
-  });
-
-  it('triggers resolve for successful delete with errors as well', () => {
-    const spy = sinon.spy();
-    promise.then(spy);
-    const ids = {
-      errorIds: ['1'],
-      successIds: ['Deferred', 'DeskSet']
-    };
-
-    collection.handleResponse([
-      {'ok':true, 'id':'Deferred', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-      {'ok':true, 'id':'DeskSet', 'rev':'6-da537822b9672a4b2f42adb1be04a5b1'},
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'},
-    ], resolve, reject);
-
-    return promise.then(() => {
-      expect(spy.calledWith(ids)).toBeTruthy();
-    });
-  });
-
-  it('triggers reject for failed delete', () => {
-    collection.handleResponse([
-      {'error':'conflict', 'id':'1', 'rev':'10-72cd2edbcc0d197ce96188a229a7af01'}
-    ], resolve, reject);
-
-    return promise.catch((errors) => {
-      expect(errors).toEqual(['1']);
-    });
-  });
-
-});
diff --git a/app/addons/documents/__tests__/results-options.test.js b/app/addons/documents/__tests__/results-options.test.js
deleted file mode 100644
index 62be559..0000000
--- a/app/addons/documents/__tests__/results-options.test.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed 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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import ResultsOptions from '../components/results-options';
-import Constants from '../constants';
-
-describe('Results Options', () => {
-
-  const defaultProps = {
-    resultsStyle: {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    updateStyle: () => {}
-  };
-
-  it('calls updateStyle when one of the options is clicked', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      updateStyle={mockUpdateStyle}/>
-    );
-    wrapper.find('a.icon').at(0).simulate('click');
-    sinon.assert.called(mockUpdateStyle);
-  });
-
-  it('shows the two sections by default', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(2);
-  });
-
-  it('hides Display Density when prop is set to false', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      showDensity={false} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(1);
-    expect(wrapper.find('li.header-label').text()).toBe('Font size');
-  });
-
-  it('hides Font Size when prop is set to false', () => {
-    const wrapper = mount(<ResultsOptions
-      {...defaultProps}
-      showFontSize={false} />
-    );
-    expect(wrapper.find('li.header-label').length).toBe(1);
-    expect(wrapper.find('li.header-label').text()).toBe('Display density');
-  });
-});
diff --git a/app/addons/documents/__tests__/results-toolbar.test.js b/app/addons/documents/__tests__/results-toolbar.test.js
deleted file mode 100644
index 614d1e1..0000000
--- a/app/addons/documents/__tests__/results-toolbar.test.js
+++ /dev/null
@@ -1,169 +0,0 @@
-// Licensed 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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import utils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import {ResultsToolBar} from '../components/results-toolbar';
-import Constants from '../constants';
-
-describe('Results Toolbar', () => {
-
-  const defaultProps = {
-    removeItem: () => {},
-    allDocumentsSelected: false,
-    hasSelectedItem: false,
-    toggleSelectAll: () => {},
-    isLoading: false,
-    queryOptionsParams: {},
-    databaseName: 'mydb',
-    fetchUrl: '/db1/_all_docs',
-    docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-    hasResults: true,
-    resultsStyle: {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    },
-    updateResultsStyle: () => {}
-  };
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').withArgs('new').returns('mock-url');
-  });
-
-  afterEach(() => {
-    utils.restore(FauxtonAPI.urls);
-  });
-
-  it('renders all content when there are results and they are deletable', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={true} />
-    );
-    expect(wrapper.find('.bulk-action-component').length).toBe(1);
-    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
-    expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
-  });
-
-  it('does not render bulk action component when list is not deletable', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false} />
-    );
-    expect(wrapper.find('.bulk-action-component').length).toBe(0);
-    expect(wrapper.find('div.two-sides-toggle-button').length).toBe(1);
-    expect(wrapper.find('.document-result-screen__toolbar-create-btn').length).toBe(1);
-  });
-
-  it('includes default partition key when one is selected', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'} />);
-    expect(wrapper.find('a.document-result-screen__toolbar-create-btn').prop('href')).toMatch(/\?partitionKey=partKey1$/);
-  });
-
-  it('toggles display density', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      updateResultsStyle={mockUpdateStyle}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    wrapper.find('a.icon').first().simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL});
-  });
-
-  it('switches font size', () => {
-    const mockUpdateStyle = sinon.spy();
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      updateResultsStyle={mockUpdateStyle}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    wrapper.find('a.icon').at(1).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL});
-
-    wrapper.find('a.icon').at(2).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM});
-
-    wrapper.find('a.icon').at(3).simulate('click');
-    sinon.assert.calledWith(mockUpdateStyle, { fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE});
-  });
-
-  it('does not show Display Density option in JSON layout', () => {
-    const toolbarJson = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.JSON}/>
-    );
-    expect(toolbarJson.find('li.header-label').text()).toBe('Font size');
-
-    const toolbarMetadata = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.METADATA}/>
-    );
-    expect(toolbarMetadata.find('li.header-label').at(0).text()).toBe('Display density');
-    expect(toolbarMetadata.find('li.header-label').at(1).text()).toBe('Font size');
-
-    const toolbarTable = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      selectedLayout={Constants.LAYOUT_ORIENTATION.TABLE}/>
-    );
-    expect(toolbarTable.find('li.header-label').at(0).text()).toBe('Display density');
-    expect(toolbarTable.find('li.header-label').at(1).text()).toBe('Font size');
-  });
-
-  it('shows Table, Metadata and JSON modes when querying a global view', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={''}
-      fetchUrl='/my_db/_design/ddoc1/_view/view1'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-
-  it('shows Table, Metadata and JSON modes when querying a partitioned view', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'}
-      fetchUrl='/my_db/_partition/my_partition/_design/ddoc1/_view/view1'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-
-  it('shows Table, Metadata and JSON modes when showing All Documents filtered by partition', () => {
-    const wrapper = mount(<ResultsToolBar
-      {...defaultProps}
-      hasResults={true}
-      isListDeletable={false}
-      partitionKey={'partKey1'}
-      fetchUrl='/my_db/_all_docs'/>);
-    expect(wrapper.find('button')).toHaveLength(4);
-  });
-});
diff --git a/app/addons/documents/__tests__/shared-helpers.test.js b/app/addons/documents/__tests__/shared-helpers.test.js
deleted file mode 100644
index 9f2d5ff..0000000
--- a/app/addons/documents/__tests__/shared-helpers.test.js
+++ /dev/null
@@ -1,277 +0,0 @@
-// Licensed 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.
-
-import {
-  getDocUrl,
-  isJSONDocEditable,
-  isJSONDocBulkDeletable,
-  hasBulkDeletableDoc,
-  getDocId,
-  getDocRev
-} from '../index-results/helpers/shared-helpers';
-import FauxtonAPI from '../../../core/api';
-import '../base';
-import Constants from '../constants';
-import sinon from 'sinon';
-
-describe('Docs Shared Helpers', () => {
-  describe('getDocUrl', () => {
-    const context = 'server';
-    const id = 'foo';
-    const databaseName = 'testdb';
-    let spy;
-
-    beforeEach(() => {
-      spy = sinon.spy(FauxtonAPI, 'urls');
-    });
-
-    afterEach(() => {
-      FauxtonAPI.urls.restore();
-    });
-
-    it('requests the proper url with standard inputs', () => {
-      getDocUrl(context, id, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', 'foo', '?conflicts=true'));
-    });
-
-    it('requests the proper url when context is undefined', () => {
-      let undefinedContext;
-      getDocUrl(undefinedContext, id, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', 'foo', '?conflicts=true'));
-    });
-
-    it('requests the proper url when id is undefined', () => {
-      let undefinedId;
-      getDocUrl(context, undefinedId, databaseName);
-      expect(spy.calledWith('document', 'server', 'testdb', '', '?conflicts=true'));
-    });
-  });
-
-  describe('isJSONDocEditable', () => {
-    const doc = {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore"
-    };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    let testDoc = Object.assign({}, doc);
-
-    afterEach(() => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      testDoc = Object.assign({}, doc);
-    });
-
-    it('returns undefined when the doc is undefined', () => {
-      let undefinedDoc;
-      expect(isJSONDocEditable(undefinedDoc, docType)).toBe(undefined);
-    });
-
-    it('returns false when type is MangoIndex', () => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(isJSONDocEditable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false when the doc is empty', () => {
-      let emptyDoc = {};
-      expect(isJSONDocEditable(emptyDoc, docType)).toBe(false);
-    });
-
-    it('returns false if the doc does not have an _id', () => {
-      delete (testDoc._id);
-      expect(isJSONDocEditable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns true otherwise', () => {
-      expect(isJSONDocEditable(testDoc, docType)).toBe(true);
-    });
-  });
-
-  describe('isJSONDocBulkDeletable', () => {
-    const doc = {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore"
-    };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    let testDoc = Object.assign({}, doc);
-
-    afterEach(() => {
-      testDoc = Object.assign({}, doc);
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-    });
-
-    it('returns true for normal doc and views', () => {
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(true);
-    });
-
-    it('returns false if mango index and doc has type of special', () => {
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      testDoc.type = 'special';
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false if doc does not have _id or id', () => {
-      delete (testDoc._id);
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-
-    it('returns false if doc does not have _rev or doc.value.rev', () => {
-      delete (testDoc._rev);
-      expect(isJSONDocBulkDeletable(testDoc, docType)).toBe(false);
-    });
-  });
-
-  describe('hasBulkDeletableDoc', () => {
-    const docs = [
-      {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95",
-        min_weight: 40,
-        max_weight: 65,
-        min_length: 1,
-        max_length: 2.2,
-        latin_name: "Orycteropus afer",
-        wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-        class: "mammal",
-        diet: "omnivore"
-      }
-    ];
-    const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-
-    it('returns true if any docs are bulk deletable', () => {
-      expect(hasBulkDeletableDoc(docs, docType)).toBe(true);
-    });
-
-    it('returns true when no docs are bulk deletable', () => {
-      docs[0].type = 'special';
-      expect(hasBulkDeletableDoc(docs, docType)).toBe(false);
-    });
-  });
-
-  describe('getDocId', () => {
-    it('returns correct ID for docType "view"', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        key: "20c76d4ff9851694792654ab3e2ca303",
-        value: {
-          rev: "1-c59f5770929653147ab939344b84e933"
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocId(docView, docType)).toBe(docView.id);
-    });
-
-    it('returns correct ID for docType "MangoQueryResult"', () => {
-      const docMangoResult = {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-      expect(getDocId(docMangoResult, docType)).toBe(docMangoResult._id);
-    });
-
-    it('returns _all_docs as ID for special Mango index', () => {
-      const docSpecialMangoIndex = {
-        "ddoc": null,
-        "name": "_all_docs",
-        "type": "special",
-        "def": {
-          "fields": [{ "_id": "asc" }]
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocId(docSpecialMangoIndex, docType)).toBe('_all_docs');
-    });
-
-    it('returns design doc ID as ID for Mango indexes', () => {
-      const docMangoIndex = {
-        ddoc: "_design/a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        name: "a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        type: "json",
-        def: { "fields": [{ "foo": "asc" }] }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocId(docMangoIndex, docType)).toBe(docMangoIndex.ddoc);
-    });
-  });
-
-  describe('getDocRev', () => {
-    it('returns document revision for docType "view"', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        key: "20c76d4ff9851694792654ab3e2ca303",
-        value: {
-          rev: "1-c59f5770929653147ab939344b84e933"
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocRev(docView, docType)).toBe(docView.value.rev);
-    });
-
-    it('returns document revision for docType "view" and only doc', () => {
-      const docView = {
-        id: "20c76d4ff9851694792654ab3e2ca303",
-        _rev: "1-c59f5770929653147ab939344b84e933"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW;
-      expect(getDocRev(docView, docType)).toBe(docView._rev);
-    });
-
-
-    it('returns document revision for docType "MangoQueryResult"', () => {
-      const docMangoResult = {
-        _id: "aardvark",
-        _rev: "5-717f5e88689af3ad191b47321de10c95"
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-      expect(getDocRev(docMangoResult, docType)).toBe(docMangoResult._rev);
-    });
-
-    it('returns undefined as revision for special Mango index', () => {
-      const docSpecialMangoIndex = {
-        "ddoc": null,
-        "name": "_all_docs",
-        "type": "special",
-        "def": {
-          "fields": [{ "_id": "asc" }]
-        }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocRev(docSpecialMangoIndex, docType)).toBe(undefined);
-    });
-
-    it('returns undefined as revision for Mango indexes', () => {
-      const docMangoIndex = {
-        ddoc: "_design/a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        name: "a7ee061f1a2c0c6882258b2f1e148b714e79ccea",
-        type: "json",
-        def: { "fields": [{ "foo": "asc" }] }
-      };
-      const docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-      expect(getDocRev(docMangoIndex, docType)).toBe(undefined);
-    });
-  });
-});
diff --git a/app/addons/documents/__tests__/table-controls.test.js b/app/addons/documents/__tests__/table-controls.test.js
deleted file mode 100644
index e0249ba..0000000
--- a/app/addons/documents/__tests__/table-controls.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { mount } from 'enzyme';
-import TableControls from '../index-results/components/pagination/TableControls';
-import sinon from 'sinon';
-
-describe('TableControls', () => {
-  it('shows range of columns when not all are shown', () => {
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 10}}
-      toggleShowAllColumns={() => {}}
-    />);
-
-    expect(wrapper.find('.shown-fields').text()).toMatch('Showing 5 of 10 columns.');
-  });
-
-  it('shows custom text when all columns are shown', () => {
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 5}}
-      toggleShowAllColumns={() => {}}
-    />);
-
-    expect(wrapper.find('.shown-fields').text()).toMatch('Showing 5 columns.');
-  });
-
-  it('shows custom text when all columns are shown', () => {
-    const spy = sinon.spy();
-    const wrapper = mount(<TableControls
-      prioritizedEnabled={false}
-      displayedFields={{shown: 5, allFieldCount: 5}}
-      toggleShowAllColumns={spy}
-    />);
-
-    wrapper.find('#footer-doc-control-prioritized').simulate('change');
-    expect(spy.calledOnce).toBe(true);
-  });
-});
diff --git a/app/addons/documents/__tests__/table-row.test.js b/app/addons/documents/__tests__/table-row.test.js
deleted file mode 100644
index 95ed776..0000000
--- a/app/addons/documents/__tests__/table-row.test.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import sinon from 'sinon';
-import { shallow } from 'enzyme';
-import FauxtonAPI from '../../../core/api';
-import Constants from '../constants';
-import TableRow from '../index-results/components/results/TableRow';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Docs Table Row', () => {
-
-  const elem = {
-    content: {
-      _id: "123",
-      vBool: true,
-      vString: 'abc',
-      vFloat: 123.1234,
-      vInt: 123,
-      vObject: { f1: 1, f2: 'b'},
-    },
-    id: "123"
-  };
-
-  const data = {
-    selectedFields: ['vBool', 'vString', 'vFloat', 'vInt', 'vObject']
-  };
-
-  it('all types of value are converted to the appropriate text for display', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-    />);
-
-    expect(wrapper.find('td').at(2).text()).toBe(JSON.stringify(elem.content.vBool));
-    expect(wrapper.find('td').at(3).text()).toBe(elem.content.vString);
-    expect(wrapper.find('td').at(4).text()).toBe(JSON.stringify(elem.content.vFloat));
-    expect(wrapper.find('td').at(5).text()).toBe(JSON.stringify(elem.content.vInt));
-    expect(wrapper.find('td').at(6).text().replace(/[\s]/g, '')).toBe(JSON.stringify(elem.content.vObject));
-  });
-
-  it('shows full text values', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-      textOverflow={Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL}
-    />);
-
-    expect(wrapper.find('td.showall').exists()).toBe(true);
-  });
-
-  it('truncates text values', () => {
-    const wrapper = shallow(<TableRow
-      onClick={sinon.stub()}
-      docChecked={sinon.stub()}
-      el={elem}
-      data={data}
-      index={0}
-      docIdentifier={elem.id}
-      isSelected={false}
-      textOverflow={Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED}
-    />);
-
-    expect(wrapper.find('td.showall').exists()).toBe(false);
-  });
-});
diff --git a/app/addons/documents/__tests__/table-view.test.js b/app/addons/documents/__tests__/table-view.test.js
deleted file mode 100644
index b15e345..0000000
--- a/app/addons/documents/__tests__/table-view.test.js
+++ /dev/null
@@ -1,179 +0,0 @@
-// Licensed 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.
-
-import {
-  getPseudoSchema,
-  getPrioritizedFields,
-  sortByTwoFields,
-  getNotSelectedFields,
-  getMetaDataTableView,
-  getFullTableViewData
-} from '../index-results/helpers/table-view';
-
-describe('Docs Table View', () => {
-  const docs = [
-    {
-      _id: "badger",
-      _rev: "8-db03387de9cbd5c2814523b043566dfe",
-      wiki_page: "http://en.wikipedia.org/wiki/Badger",
-      min_weight: 7,
-      max_weight: 30,
-      min_length: 0.6,
-      max_length: 0.9,
-      latin_name: "Meles meles",
-      class: "mammal",
-      diet: "omnivore",
-      test: "xyz"
-    },
-    {
-      _id: "aardvark",
-      _rev: "5-717f5e88689af3ad191b47321de10c95",
-      min_weight: 40,
-      max_weight: 65,
-      min_length: 1,
-      max_length: 2.2,
-      latin_name: "Orycteropus afer",
-      wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
-      class: "mammal",
-      diet: "omnivore",
-      foo: "bar"
-    }
-  ];
-
-  const schema = [
-    '_id',
-    '_rev',
-    'wiki_page',
-    'min_weight',
-    'max_weight',
-    'min_length',
-    'max_length',
-    'latin_name',
-    'class',
-    'diet',
-    'test',
-    'foo'
-  ];
-
-  describe('getPseudoSchema', () => {
-    it('returns array of unique keys with _id as the first element', () => {
-      expect(getPseudoSchema(docs)).toEqual(schema);
-    });
-  });
-
-  describe('getPrioritizedFields', () => {
-    it('returns the list of most popular attributes', () => {
-      const max = 5;
-      expect(getPrioritizedFields(docs, max)).toEqual([
-        '_id',
-        'class',
-        'diet',
-        'latin_name',
-        'max_length'
-      ]);
-    });
-  });
-
-  describe('sortByTowFields', () => {
-    it('returns proper sorted array for the input', () => {
-      const input = [[2, 'b'], [3, 'z'], [1, 'a'], [3, 'a']];
-      expect(sortByTwoFields(input)).toEqual([
-        [3, 'a'],
-        [3, 'z'],
-        [2, 'b'],
-        [1, 'a']
-      ]);
-    });
-  });
-
-  describe('getNotSelectedFields', () => {
-    it('returns a list of the remaining fields not currently selected', () => {
-      const selectedFields = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const allFields = ['_id', '_rev', 'wiki_page', 'min_weight', 'max_weight', 'min_length', 'max_length', 'latin_name', 'class', 'diet', 'test', 'foo'];
-      expect(getNotSelectedFields(selectedFields, allFields)).toEqual([
-        '_rev',
-        'wiki_page',
-        'min_weight',
-        'max_weight',
-        'min_length',
-        'test',
-        'foo'
-      ]);
-    });
-  });
-
-  describe('getFullTableViewData', () => {
-    let schemaWithoutMetaDataFields;
-    beforeEach(() => {
-      schemaWithoutMetaDataFields = _.without(schema, '_attachments');
-    });
-
-    it('returns json object with attributes necessary when selectedFieldsTableView is not set', () => {
-      const max = 5;
-      const selectedFieldsTableView = getPrioritizedFields(docs, max);
-      const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-      const options = {
-        selectedFieldsTableView: [],
-        showAllFieldsTableView: false
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView,
-        notSelectedFieldsTableView
-      });
-    });
-
-    it('returns json object with attributes necessary when selectedFieldsTableView is set', () => {
-      const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-      const options = {
-        selectedFieldsTableView,
-        showAllFieldsTableView: false
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView,
-        notSelectedFieldsTableView
-      });
-    });
-
-    it('returns json object with attributes necessary when showAllFieldsTableView is set', () => {
-      const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
-      const options = {
-        selectedFieldsTableView,
-        showAllFieldsTableView: true
-      };
-
-      expect(getFullTableViewData(docs, options)).toEqual({
-        schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView: schemaWithoutMetaDataFields,
-        notSelectedFieldsTableView: null
-      });
-    });
-  });
-
-  describe('getMetaDataTableView', () => {
-    it('returns json object with attributes necessary to build metadata table', () => {
-      expect(getMetaDataTableView(docs)).toEqual({
-        schema: schema,
-        normalizedDocs: docs,
-        selectedFieldsTableView: schema,
-        notSelectedFieldsTableView: null
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/assets/less/changes.less b/app/addons/documents/assets/less/changes.less
deleted file mode 100644
index 4f38662..0000000
--- a/app/addons/documents/assets/less/changes.less
+++ /dev/null
@@ -1,151 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/animations.less";
-@import "../../../../../assets/less/variables.less";
-
-// used in changes.html
-.change-box {
-  margin: 0 20px 20px 20px;
-}
-
-.change-wrapper {
-  margin-top: 20px;
-  border-bottom: 1px solid #dddddd;
-  &:last-child {
-    border-bottom: none;
-  }
-  .row-fluid {
-    padding: 4px 0 4px 0;
-  }
-  .row-fluid:first {
-    padding: 0px 0 4px 0;
-  }
-  a:hover.js-copy {
-    text-decoration: none;
-  }
-  .js-json-container {
-    display: none;
-  }
-  .span2 {
-    font-weight: bold;
-  }
-  .clipboard-copy-element {
-    color: #666666;
-  }
-}
-
-.changes-header {
-  text-align: center;
-  padding: 26px 20px 0;
-  border-bottom: 1px solid #999999;
-  .label {
-    float: left;
-    margin-right: 5px;
-  }
-  fieldset {
-    text-align: left;
-    display: inline-block;
-    position: relative;
-
-    .btn-secondary {
-      padding: 12px;
-      &:hover {
-        background-color: @hoverHighlight;
-      }
-    }
-  }
-  .fonticon-filter {
-    position: absolute;
-    left: -25px;
-    top: 10px;
-    color: #777777;
-    font-size: 20px;
-  }
-  form {
-    margin: 0;
-  }
-  .help-block {
-    margin-bottom: 0;
-    padding-bottom: 0;
-  }
-  .component-badgelist li {
-    margin: 20px 0;
-  }
-  .remove-filter {
-    color: #333333;
-    text-shadow: none;
-    background-color: transparent;
-    font-size: 20px;
-    margin-top: -3px;
-    padding-left: 0;
-    margin-right: 8px;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-}
-
-.changes-tab-content {
-  padding-top: 70px;
-}
-
-#dashboard-upper-content .changes-header-section .tab-content {
-  padding: 0;
-  overflow: hidden;
-}
-
-.keyframes(slideDownChangesFilter, {
-  opacity: 0;
-  height: 0;
-},
-{
-  opacity: 1;
-  height: 160px;
-});
-
-.keyframes(slideUpChangesFilter, {
-  opacity: 1;
-  height: 160px;
-},
-{
-  opacity: 0;
-  height: 0;
-});
-
-.toggle-changes-filter-enter {
-  .animation(slideDownChangesFilter 1s both);
-}
-
-.toggle-changes-filter-leave {
-  .animation(slideUpChangesFilter 1s both);
-}
-
-.toggle-changes-code-enter {
-  .animation(slideDown .6s both);
-}
-
-.toggle-changes-code-leave {
-  .animation(slideUp .6s both);
-}
-
-.changes-result-limit {
-  margin-left: 20px;
-}
-
-.new-change-row {
-  -webkit-animation: slideDown 1.5s both, highlight-element 2.0s 1;
-}
-
-.no-doc-changes {
-  padding: 30px 0;
-}
diff --git a/app/addons/documents/assets/less/doc-editor.less b/app/addons/documents/assets/less/doc-editor.less
deleted file mode 100644
index 2866610..0000000
--- a/app/addons/documents/assets/less/doc-editor.less
+++ /dev/null
@@ -1,227 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/mixins.less";
-@import "../../../../../assets/less/variables.less";
-
-
-#dashboard.doc-editor-page {
-  background-color: #4d4d4d;
-
-  #dashboard-content {
-    padding-bottom: 0;
-    top: 0;
-  }
-}
-
-#editor-container {
-  height: 100%;
-  &>div:not(.loading-lines), &>div>div {
-    height: 100%;
-  }
-}
-
-.doc-editor-page {
-  border-left: none;
-
-  .loading-lines {
-    margin-top: 30px;
-    div {
-      background-color: white;
-    }
-  }
-
-  #doc-editor-actions-panel {
-    position: absolute;
-    top: 64px;
-    right: 0;
-    left: 0;
-    width: 100%;
-    background-color: #f1f1f1;
-    height: 61px;
-  }
-
-  &#dashboard > header {
-    z-index: 2;
-    > div {
-      .box-shadow(none);
-    }
-  }
-
-  #editor-container {
-    margin-top: 0;
-    font-size: 13px;
-
-    .ace_editor {
-      line-height: 22px;
-    }
-  }
-
-  .doc-actions-left {
-    float: left;
-    padding: 9px 0;
-    button {
-      margin: 0 10px 0 30px;
-    }
-    div {
-      display: inline-block;
-    }
-  }
-
-  .cancel-button {
-    font-size: 14px;
-    color: #666;
-    &:hover {
-      color: @hoverHighlight;
-      text-decoration: none;
-      cursor: pointer;
-    }
-    &--disabled {
-      opacity: 0.5;
-      cursor: not-allowed;
-      color: #666;
-    }
-    &--disabled:hover {
-      opacity: 0.5;
-      cursor: not-allowed;
-      color: #666;
-    }
-  }
-  .panel-button {
-    color: #666;
-    &:hover {
-      color: @hoverHighlight;
-      text-decoration: none;
-      cursor: pointer;
-    }
-    &:disabled {
-      color: @grayLight;
-      cursor: not-allowed;
-    }
-  }
-
-  .bgEditorGutter {
-    width: 49px;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    background-color: #3b3b3b;
-  }
-
-  .panel-button {
-    border: 0;
-    background-color: #f1f1f1;
-    padding: 11px;
-    color: #555555;
-
-    span:first-of-type {
-      margin-left: 4px;
-    }
-
-    .icon {
-      font-size: 18px;
-    }
-
-    .button-text {
-      padding-right: 5px;
-    }
-  }
-  .panel-section {
-    border-left: 1px solid #cccccc;
-    text-align: center;
-    padding: 9px 0;
-    display: inline-block;
-
-    &.open .dropdown-toggle, &:active {
-      box-shadow: none;
-      background-color: inherit;
-    }
-  }
-  .alignRight {
-    text-align: right;
-    font-size: 0; // prevents whitespace gaps between elements
-  }
-  .row-fluid.content-area {
-    background-color: #4d4d4d;
-  }
-
-  // overriding the ace editor inline styles
-  .ace_gutter-layer {
-    min-width: 49px;
-  }
-  .ace_gutter-cell {
-    min-width: 49px;
-  }
-
-  .ace_marker-layer .ace_bracket {
-    margin: 0;
-    border: 1px solid #999999;
-  }
-
-  // hide the labels on the buttons when the screen is shrunk too small,
-  @media screen and (max-width: 1000px) {
-    .panel-button span {
-      display: none;
-    }
-  }
-
-  // hides the API Url header link when the page is too small (prevents wrapping)
-  @media screen and (max-width: 835px) {
-    #api-navbar {
-      display: none;
-    }
-  }
-
-  #dashboard-content .code-region {
-    overflow-y: hidden;
-    position: absolute;
-    top: 125px;
-    height: auto;
-    width: 100%;
-    padding: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-  }
-}
-
-.upload-file-modal input[type="file"] {
-  margin-top: 10px;
-  height: inherit;
-  line-height: inherit;
-}
-
-.view-attachments-section .dropdown-menu {
-  max-width: 540px;
-  text-align: left;
-  overflow: hidden;
-  a:hover {
-    color: @hoverHighlight;
-  }
-}
-
-div.string-editor-modal {
-  width: 80%;
-
-  .modal-content {
-    min-width: initial;
-  }
-
-  .modal-body {
-    padding: 0px;
-  }
-}
-
-.attachment-delimiter {
-  color: #999999;
-  margin: 0 4px;
-}
diff --git a/app/addons/documents/assets/less/documents.less b/app/addons/documents/assets/less/documents.less
deleted file mode 100644
index 6e31c63..0000000
--- a/app/addons/documents/assets/less/documents.less
+++ /dev/null
@@ -1,225 +0,0 @@
-// Licensed 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.
-/*ALL DOCS TABLE*/
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "query-options.less";
-@import "view-editor.less";
-@import "changes.less";
-@import "sidenav.less";
-@import "index-results.less";
-@import "doc-editor.less";
-@import "header.less";
-@import "revision-browser.less";
-@import "header-docs-left.less";
-@import "partition-key.less";
-
-
-button.beautify {
-  margin-top: 20px;
-}
-
-.toggle-btns {
-  label {
-    margin-right: 0;
-  }
-}
-
-#per-page {
-  float: right;
-
-  #select-per-page {
-    margin-top: 10px;
-    width: 60px;
-  }
-}
-
-#query div.controls-group.well {
-  height: 180px;
-  margin-right: 17px;
-}
-
-/** used in view_editor.html **/
-.design-doc-group {
-  .span3 {
-    margin: 0;
-  }
-  #new-ddoc-section {
-    margin-top: 10px;
-    width: 325px;
-    label {
-      width: 100px
-    }
-    .controls {
-      margin-left: 100px;
-    }
-  }
-}
-
-#map-function, #reduce-function {
-  width: 100%;
-  font-size: 13px;
-  line-height: 22px;
-}
-
-.metadata-page {
-  font-size: 14px;
-  padding: 20px;
-
-  .preheading {
-    font-size: 14px;
-  }
-  h2 {
-    margin: 5px 0 15px;
-  }
-  h3 {
-    font-size: 22px;
-    margin-top: 12px;
-  }
-  header {
-    padding-bottom: 10px;
-  }
-  .icon-question-sign {
-    margin-left: 4px;
-    color: @secondaryBlue;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-  section {
-    line-height: 21px;
-    width: 100%;
-
-    ul {
-      list-style-type: none;
-      margin: 0 0 15px;
-      padding: 0;
-    }
-    .item-title {
-      margin-right: 6px;
-    }
-  }
-}
-
-button.delete {
-  margin-left: 4px;
-}
-
-button.string-edit {
-  position: absolute;
-  padding: 0;
-  z-index: 1000;
-  width: 20px;
-  left: 22px;
-
-  i.icon {
-    margin-right: 0px;
-  }
-}
-
-button.string-edit[disabled] {
-  display: none;
-}
-
-#string-editor-wrapper {
-  height: 500px;
-  width: 100%;
-
-  &>div {
-    height: 100%;
-  }
-}
-
-#keys-input {
-  width: 100%;
-}
-
-#keys-error {
-  display: inline-block;
-}
-
-.change-sequence {
-  word-wrap: break-word;
-}
-
-#dashboard-upper-content {
-  .js-query-keys-wrapper {
-    padding-top: 0;
-  }
-
-  /** used in query-options.html**/
-  .custom-inputs {
-    .row-fluid {
-      padding-top: 20px;
-      .radio, .checkbox {
-        padding-left: 0;
-      }
-      .checkbox.inline,
-      #skipRows {
-        margin-bottom: 0;
-        padding: 6px;
-      }
-    }
-  }
-}
-
-.nav-list {
-  border-top: none;
-}
-
-.end-of-results {
-  margin-bottom: 30px;
-
-  .muted {
-    margin-bottom: 0px;
-  }
-}
-
-body #dashboard #react-headerbar {
-  float: left;
-  overflow: hidden;
-}
-
-.doc-editor-extension-icons {
-  display: inline-block;
-}
-
-.pagination-footer {
-  .footer-table-control label {
-    margin: 0;
-    padding: 0;
-    line-height: initial;
-  }
-
-  .footer-table-control {
-    float: right;
-    display: inline-block;
-    input {
-      margin: 0 5px 0 15px;
-    }
-    margin: 17px 40px 17px 20px;
-  }
-
-  .footer-doc-control-prioritized-wrapper {
-    margin-right: 18px;
-  }
-
-  .page-controls {
-    border-right: solid 1px @btnBorder;
-  }
-
-}
-
-.two-pane .faux-header__breadcrumbs {
-  width: 440px;
-}
diff --git a/app/addons/documents/assets/less/header-docs-left.less b/app/addons/documents/assets/less/header-docs-left.less
deleted file mode 100644
index 2b19048..0000000
--- a/app/addons/documents/assets/less/header-docs-left.less
+++ /dev/null
@@ -1,82 +0,0 @@
-@import "../../../../../assets/less/variables.less";
-
-.faux-header__doc-header-left {
-  top: 0;
-  right: 0;
-  height: @collapsedNavWidth;
-  border-right: 1px solid @grayLight;
-  width: @sidebarWidth + 1px;
-
-  .display-flex();
-  .flex-direction(row);
-}
-
-.faux-header__doc-header-title {
-  height: @collapsedNavWidth;
-  width: 247px;
-  color: #333;
-  font-size: 24px;
-  line-height: 24px;
-  padding: 22px 10px;
-  border-right: 1px solid #ccc;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-button.faux-header__doc-header-dropdown-toggle {
-  border: none;
-  height: @collapsedNavWidth;
-  right: 0;
-  padding: 10px 16px;
-  width: 43px;
-  background-color: transparent !important;
-  border: none;
-  box-shadow: none !important;
-}
-
-button.faux-header__doc-header-dropdown-toggle:focus {
-  color: @hoverHighlight;
-  background-color: transparent !important;
-  border: none;
-  box-shadow: none !important;
-}
-
-.faux-header__doc-header-dropdown-toggle:hover {
-  color: @hoverHighlight;
-  background-color: transparent;
-}
-
-.faux-header__doc-header-dropdown-toggle-icon:before {
-  width: 6px;
-  font-size: 20px;
-  padding-top: 4px;
-}
-
-.faux-header__doc-header-backlink {
-  font-size: 24px;
-  border: none;
-  background-color: transparent;
-  border-right: 1px solid #ccc;
-  width: 40px;
-  padding: 11px;
-}
-
-.faux-header__doc-header-backlink__icon:before {
-  width: 18px;
-}
-
-.faux-header__doc-header-backlink:hover {
-  text-decoration: none;
-  color: @hoverHighlight;
-}
-
-// override bootstrap styles
-.faux-header__doc-header-dropdown-itemwrapper .faux-header__doc-header-dropdown-item {
-  padding: 10px 15px 10px 12px;
-}
-.faux-header__doc-header-dropdown-itemwrapper .faux-header__doc-header-dropdown-item:hover {
-  background-color: @hoverHighlight;
-  color: #fff;
-  cursor: pointer;
-}
diff --git a/app/addons/documents/assets/less/header.less b/app/addons/documents/assets/less/header.less
deleted file mode 100644
index 1600b5c..0000000
--- a/app/addons/documents/assets/less/header.less
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-
-
-#react-headerbar {
-  .control-toggle-include-docs {
-    border-right: 1px solid @btnBorder;
-    .icon-check {
-      &:before {
-        margin: 6px 6px 0 0;
-      }
-    }
-    .icon-check-empty {
-      &:before {
-        margin: 6px 9px 0 0;
-      }
-    }
-  }
-}
-
-.right-header-wrapper {
-  justify-content: flex-end;
-}
diff --git a/app/addons/documents/assets/less/index-results.less b/app/addons/documents/assets/less/index-results.less
deleted file mode 100644
index a015a45..0000000
--- a/app/addons/documents/assets/less/index-results.less
+++ /dev/null
@@ -1,275 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-.document-result-screen {
-  .loading-lines-wrapper {
-    margin-left: auto;
-    margin-right: auto;
-    width: 80px;
-  }
-
-  .loading-lines {
-    position: absolute;
-  }
-}
-
-.document-result-screen__toolbar {
-  display: flex;
-  padding-bottom: 20px;
-  position: relative;
-
-  .bulk-action-component {
-    min-width: 90px;
-    min-height: 26px;
-    padding: 8px 0;
-  }
-
-  .text-overflow-switch {
-    min-width: 145px;
-    min-height: 26px;
-    padding: 8px 0;
-  }
-
-  .toolbar-dropdown {
-    .btn {
-      color: #666;
-    }
-
-    .dropdown-menu.arrow:before {
-      right: 80%;
-    }
-
-    a.dropdown-toggle {
-      padding-left: 16px;
-    }
-
-    .dropdown-menu li a {
-      padding: 10px 15px 10px 12px;
-      &:hover {
-        background-color: @hoverHighlight;
-        color: white;
-      }
-    }
-  }
-}
-
-.document-result-screen__toolbar-flex-container {
-  width: 100%;
-  display: flex;
-  justify-content: flex-end;
-}
-
-.document-result-screen__toolbar-create-btn {
-  display: flex;
-  align-items: center;
-  height: 42px;
-}
-
-a.document-result-screen__toolbar-create-btn:active,
-a.document-result-screen__toolbar-create-btn:visited {
-  color: #fff;
-}
-
-.no-results-screen {
-  position: absolute;
-  margin: -15px;
-  top: 50%;
-  margin-top: -125px;
-  width: 100%;
-  h3 {
-    border-top: 1px solid #ccc;
-    height: 45px;
-    font-size: 20px;
-    font-weight: normal;
-    width: 400px;
-    text-align: center;
-    padding-top: 8px;
-    margin: 0 auto;
-  }
-  .no-results-screen-warning {
-    text-align: center;
-    i {
-      padding-right: 0.5rem;
-    }
-  }
-}
-.watermark-logo {
-  background: transparent url("../../../../../assets/img/couch-watermark.png")
-    no-repeat 50% 50%;
-  height: 205px;
-  text-align: center;
-  margin: 0 20%;
-  .preview {
-    margin: 0 10px;
-  }
-}
-
-.table-view-docs {
-  position: absolute;
-
-  .bulk-action-component {
-    padding-bottom: 0;
-    min-height: 0;
-  }
-  .bulk-action-component-panel input {
-    width: auto;
-  }
-
-  .tableview-data-cell-id {
-    a {
-      color: @linkColor;
-    }
-    div:first-of-type {
-      font-weight: 700;
-    }
-    div {
-      text-overflow: ellipsis;
-      overflow: hidden;
-    }
-  }
-  tbody tr {
-    cursor: pointer;
-    &:hover {
-      border-left: 2px solid @hoverHighlight;
-      td {
-        color: @hoverHighlight;
-        input[type="checkbox"] {
-          margin-left: 7px;
-        }
-      }
-    }
-  }
-  td,
-  th,
-  td a {
-    vertical-align: middle;
-    line-height: 20px;
-    font-size: 0.875rem;
-  }
-
-  td,
-  th {
-    color: @defaultHTag;
-    max-width: 160px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    vertical-align: top;
-    &.showall {
-      overflow: visible;
-      white-space: normal;
-      word-wrap: break-word;
-    }
-    &.small-font {
-      font-size: 0.75rem;
-    }
-    &.large-font {
-      font-size: 1rem;
-    }
-  }
-  td.tableview-checkbox-cell,
-  th.tableview-header-el-checkbox {
-    width: 35px;
-    padding-left: 0px;
-  }
-  .tableview-conflict {
-    color: #f00;
-  }
-  .icon-code-fork {
-    padding-right: 2px;
-    color: #f00;
-  }
-  .tableview-el-last {
-    width: 75px;
-  }
-  .tableview-el-copy {
-    width: 35px;
-  }
-
-  thead input {
-    max-width: 138px;
-    width: 100%;
-    overflow: visible;
-  }
-
-  .table-dropdown-item {
-    padding: 2px 6px;
-    cursor: pointer;
-    background: #2b2f33;
-    color: white;
-    margin: 0 2px;
-  }
-  .table-dropdown-item-highlight {
-    background: #e23632;
-  }
-
-  .icon.icon-filter {
-    position: absolute;
-    right: 6px;
-    top: 6px;
-    pointer-events: none;
-    color: #999;
-  }
-
-  .table-container-autocomplete {
-    position: relative;
-    width: 128px;
-    height: 29px;
-  }
-
-  th {
-    overflow: visible;
-  }
-
-  .table-container-autocomplete .table-select-wrapper {
-    width: inherit;
-    overflow: visible;
-  }
-}
-
-.document-result-screen {
-  .table-bulkselector-section {
-    .bulk-action-component {
-      float: left;
-    }
-    width: 300px;
-  }
-}
-
-.execution-stats-popup {
-  font-size: 14px;
-  .execution-stats-popup-component {
-    [data-status="false"] {
-      color: @fontGrey;
-    }
-    [data-status="true"] {
-      .value {
-        font-weight: bold;
-      }
-    }
-  }
-  .warning {
-    color: @errorAlertColor;
-    margin-top: 8px;
-  }
-}
-
-.execution-stats {
-  font-size: 13px;
-  padding: 8px 8px 8px 0;
-
-  .fonticon-attention-circled {
-    margin-right: 4px;
-  }
-}
diff --git a/app/addons/documents/assets/less/partition-key.less b/app/addons/documents/assets/less/partition-key.less
deleted file mode 100644
index bf8d1a9..0000000
--- a/app/addons/documents/assets/less/partition-key.less
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-.partition-selector {
-  display: flex;
-  align-items: center;
-  padding: 0;
-  min-height: 30px;
-}
-
-.partition-selector__switch {
-  background-color: transparent;
-  border: none;
-  color: #666;
-  font-size: 1rem;
-  .fonticon-filter {
-    font-size: 1.25rem;
-    padding-right: 6px;
-  }
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-.partition-selector__switch--active {
-  color: @brandHighlight;
-  padding-right: 0px;
-}
-
-.partition-selector__key {
-  flex: 1;
-  color: #666;
-}
-
-.partition-selector__key--active {
-  color: @brandHighlight;
-}
-
-.partition-selector__global {
-  color: #666;
-}
diff --git a/app/addons/documents/assets/less/query-options.less b/app/addons/documents/assets/less/query-options.less
deleted file mode 100644
index 14f7c2d..0000000
--- a/app/addons/documents/assets/less/query-options.less
+++ /dev/null
@@ -1,183 +0,0 @@
-// Licensed 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.
-
-#query-options-tray:before {
-  right: 225px;
-}
-
-#query-options-tray {
-  width: 490px;
-  padding-top: 6px;
-  max-height: calc(100vh - 64px);
-  overflow-y: scroll;
-
-  .query-group:first-child {
-    margin-top: 0;
-    padding-top: 0;
-  }
-
-  .icon-question-sign {
-    margin-left: 3px;
-    font-size: 17.5px;
-    color: @secondaryBlue;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-
-  .query-group {
-    padding: 20px;
-    border-bottom: 1px solid #555;
-  }
-
-  .query-group:last-child {
-    border-bottom: none;
-  }
-  .controls-group {
-    margin: 0;
-  }
-  .controls-group:last-child {
-    margin: 0;
-  }
-
-  form {
-    overflow: auto;
-    margin-bottom: 0;
-    .dropdown.inline {
-      display: inline-block;
-    }
-
-    #keys-input {
-      resize: none;
-    }
-
-    #qoGroupLevelGroup {
-      width: 34%;
-    }
-
-    .input-small {
-      width: 74px;
-      margin-left: 5px;
-    }
-    .checkbox {
-      padding: 0;
-      margin: 0;
-    }
-    .btn-success {
-      .border-radius(5px);
-    }
-    .btn-cancel, .btn-cancel:active {
-      background: none;
-      border: none;
-      box-shadow: none;
-      color: @hoverHighlight;
-      line-height: 1em;
-    }
-    .btn-cancelDark, .btn-cancelDark:active {
-      background: none;
-      border: none;
-      box-shadow: none;
-      color: #CCC;
-      line-height: 1em;
-    }
-    select {
-      margin-top: -4px;
-      margin-bottom: 0px;
-    }
-    .include-end-key-row {
-      line-height: 20px;
-      margin-left: 8px;
-    }
-  }
-
-  .toggle-btns {
-    .btn {
-      padding: 5px 12px 5px;
-      background: #727A82;
-      color: #fff;
-      font-size: 12px;
-      border: none;
-    }
-    .btn.active {
-      background: #fff;
-      color: @linkColorHover;
-      box-shadow: none;
-    }
-    label:first-child {
-      .border-radius(5px 0 0 5px);
-    }
-    label:last-child {
-      .border-radius(0 5px 5px 0);
-      margin-left: 1px;
-    }
-  }
-
-  label {
-    margin-right: 0;
-    font-size: 13px;
-
-    /*
-    due to: https://code.google.com/p/chromium/issues/detail?id=411065 - that bug causes the checkbox state not to
-    update when the user clicks on labels quickly. It can be removed once the fix is in Chrome stable
-    */
-    -webkit-user-select: none;
-  }
-  label.disabled {
-    cursor: not-allowed;
-    opacity: .5;
-  }
-  div.controls-group.well{
-    height: 156px;
-    background: none;
-    border: none;
-    padding: 10px 0;
-  }
-  .row-fluid.fieldsets {
-    .inline {
-      width: 32%;
-    }
-    .inline:nth-child(3) {
-      text-align: right;
-      width: 34%;
-    }
-  }
-  .qo-main-fields-row .row-fluid.fieldsets {
-    .inline:nth-child(2) {
-      width: 30%;
-    }
-    .inline:nth-child(3) {
-      text-align: right;
-      width: 36%;
-    }
-  }
-
-  .row-fluid.fieldsets {
-    margin-bottom: 5px;
-    :last-child {
-      margin-bottom: 2px;
-    }
-  }
-
-  #skipRows {
-    margin-left: 5px;
-  }
-  .add-on {
-    height: 28px;
-  }
-  .hide {
-    display: none;
-  }
-
-  .additionalParams {
-    margin-bottom: 2px;
-  }
-}
diff --git a/app/addons/documents/assets/less/revision-browser.less b/app/addons/documents/assets/less/revision-browser.less
deleted file mode 100644
index a3f04df..0000000
--- a/app/addons/documents/assets/less/revision-browser.less
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed 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.
-
-div#dashboard-content div.revision-wrapper {
-  padding: 0 0 15px 0;
-  margin-top: 60px;
-
-  .rev-subtree-selector {
-    font-family: monospace;
-    margin-bottom: 20px;
-  }
-  .left-area {
-    text-align: center;
-  }
-  .ours-rev {
-    font-size: 16px;
-    color: #fff;
-    text-align: center;
-    margin-top: 15px;
-  }
-
-  .revision-browser-controls {
-    color: #fff;
-    margin: 30px 0;
-  }
-
-  .revision-browser-controls .Select .Select-control {
-    border-radius: inherit;
-    border-color: #ccc;
-  }
-
-  .revision-browser-controls .Select .is-focused:not(.is-open) > .Select-control {
-    box-shadow: transparent;
-    border-color: #ccc;
-  }
-
-  .revision-browser-controls .Select .Select-menu-outer {
-    border-radius: inherit;
-  }
-
-  .revision-browser-controls .Select div.Select-placeholder {
-    color: #9d261d;
-  }
-
-  .revision-view-controls {
-    border-top: 1px solid grey;
-    text-align: center;
-  }
-
-  .revision-split-area {
-    padding: 20px 15px;
-    .display-flex();
-    color: #fff;
-  }
-
-  .conflicting-revs-dropdown {
-    max-width: 370px;
-    .display-flex();
-    margin-left: -17px;
-  }
-
-  .revision-split-area pre {
-    border: none;
-    background-color: transparent;
-  }
-  .revision-diff-area {
-    color: #fff;
-    margin-left: 60px;
-  }
-  .revision-diff-area .jsondiffpatch-unchanged, .revision-diff-area .jsondiffpatch-unchanged pre {
-    color: #fff;
-    background-color: transparent;
-    border: none;
-  }
-  .revision-diff-area .jsondiffpatch-added, .revision-diff-area .jsondiffpatch-deleted {
-    color: #000;
-  }
-  .revision-diff-area .jsondiffpatch-modified .jsondiffpatch-left-value pre,
-  .jsondiffpatch-textdiff-deleted,
-  .jsondiffpatch-deleted .jsondiffpatch-property-name,
-  .jsondiffpatch-deleted pre {
-    text-decoration: none;
-  }
-
-  .two-sides-toggle-button {
-    z-index: 0;
-  }
-
-}
diff --git a/app/addons/documents/assets/less/sidenav.less b/app/addons/documents/assets/less/sidenav.less
deleted file mode 100644
index 8ba51a5..0000000
--- a/app/addons/documents/assets/less/sidenav.less
+++ /dev/null
@@ -1,264 +0,0 @@
-// Licensed 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.
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/mixins.less";
-
-
-#sidebar-content {
-  .loading-lines {
-    margin-top: 20px;
-  }
-}
-
-.sidenav {
-  a {
-    text-decoration: none;
-  }
-
-  // selected nav item row styles
-  .nav-list .active > a {
-    text-shadow: none;
-    background-color: #f1f0f1;
-    color: @brandHighlight;
-    &:hover {
-      color: white;
-    }
-  }
-
-  .dropdown-toggle:hover {
-    color: @hoverHighlight;
-  }
-
-  // ugly! This styles the (+) icon to make it white when a user hovers over a row. Better solution would be to move the
-  // active class to the <li> instead of the child <a>
-  .accordion-list-item:hover, .nav-list > li a:hover {
-    & + div.add-dropdown .dropdown-toggle,
-    & + span.index-menu-toggle {
-      color: white;
-    }
-
-  }
-
-  li {
-    position: relative;
-    a {
-      text-shadow: none;
-    }
-  }
-
-  .design-doc-section {
-    border-bottom: 1px solid #d3d7db;
-    .accordion-list-item:hover {
-      p, .fonticon-play {
-        color: white;
-      }
-      p {
-        background-color: @hoverHighlight;
-      }
-    }
-    .accordion-list-item p {
-      .transition(all 0.25s linear);
-    }
-    .fonticon-play {
-      font-size: 12px;
-      top: 12px;
-      left: 12px;
-    }
-    &.down .fonticon-play {
-      .rotate(90deg);
-    }
-    .add-dropdown {
-      right: 15px;
-    }
-  }
-
-  li.nav-header .index-list li a {
-    padding-left: 46px;
-  }
-
-  li.nav-header {
-    margin-top: 0;
-    position: relative;
-
-    .design-doc-body.in {
-      border-bottom: 1px solid #d3d7db;
-    }
-
-    .accordion-body {
-      color: #eee;
-      margin-left: 0;
-
-      li {
-        cursor: pointer;
-        &.active > a {
-          background-color: #f1f0f1;
-        }
-        > a.down .fonticon-play {
-          .rotate(90deg);
-        }
-        &:hover .fonticon-play {
-          color: #dddddd;
-        }
-        a {
-          font-size: 14px;
-          background-color: rgba(0, 0, 0, 0.02);
-          &:hover {
-            color: #fff;
-            text-decoration: none;
-            background-color: @hoverHighlight;
-          }
-          border-top: none;
-          &.accordion-header{
-            padding: 8px 5px 8px 36px;
-          }
-        }
-      }
-    }
-
-    .toggle-view {
-      padding: 4px 5px 4px 36px;
-    }
-    .fonticon-play {
-      font-size: 8px;
-      top: 11px;
-      left: 15px;
-      color: @subListGray;
-      position: absolute;
-      display: block;
-      vertical-align: bottom;
-      .transition(all 0.25s linear);
-    }
-    .fonticon:before {
-      margin-right: 6px;
-      font-size: 20px;
-      top: 3px;
-      position: relative;
-    }
-    .accordion-header:hover .fonticon-play {
-      color: white;
-    }
-  }
-
-  .design-doc-name {
-    cursor: pointer;
-    margin: 0;
-    color: #222222;
-    span {
-      width: @sidebarWidth - 30px;
-      display: block;
-      padding: 10px 13px 10px 36px;
-      text-overflow: ellipsis;
-      overflow: hidden;
-    }
-    i {
-      padding-right: 6px;
-    }
-  }
-
-  .index-group-header {
-    font-weight: bold;
-  }
-
-  li.nav-header .index-menu-toggle.fonticon {
-    position: absolute;
-    top: 0;
-    right: 0;
-    color: #767f89;
-    height: 30px;
-    width: 40px;
-    padding-top: 2px;
-    padding-left: 4px;
-    .transition(all 0.25s linear);
-    &:hover {
-      color: @hoverHighlight;
-    }
-    &:before {
-      font-size: 17px;
-      margin-right: 0;
-    }
-  }
-}
-
-#index-menu-component-popover {
-  .border-radius(0);
-  .box-shadow(2px 2px rgba(0, 0, 0, 0.2));
-  background-color: @brandDark2;
-  color: #FFF;
-  font-size: 12px;
-  padding: 0;
-  margin-left: -7px;
-  margin-top: 5px;
-  ul {
-    list-style-type: none;
-    margin: 0;
-  }
-  li {
-    padding: 10px;
-    background-color: @brandDark1;
-    margin-bottom: 2px;
-    cursor: pointer;
-    .transition(all 0.25s linear);
-    &:hover {
-      background-color: @hoverHighlight;
-    }
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-  .arrow {
-    &:after {
-      border-bottom-color: black;
-      border-top-color: black;
-    }
-  }
-  .fonticon {
-    margin-right: 7px;
-  }
-  .popover-content {
-    padding: 0;
-  }
-}
-
-.clone-index-modal {
-  .modal-body {
-    padding: 20px;
-  }
-  /* the index label ("view" / "search index", etc.) is passed dynamically to the clone index modal. This fixes the text case */
-  .modal-title, .btn-success, .new-index-title-label {
-    text-transform: capitalize;
-  }
-  .styled-select, select {
-    width: 230px;
-  }
-  .row {
-    margin: 0;
-    padding-top: 10px;
-    #new-ddoc-section {
-      width: 262px;
-
-      label {
-        width: 40px;
-        margin-top: 27px;
-        float: left;
-      }
-      div.controls {
-        margin-left: 0;
-        float: right;
-        margin-top: 15px;
-      }
-    }
-  }
-  .ddoc-selector-partitioned {
-    padding-top: 0px;
-    padding-bottom: 16px;
-  }
-}
diff --git a/app/addons/documents/assets/less/view-editor.less b/app/addons/documents/assets/less/view-editor.less
deleted file mode 100644
index 5c23149..0000000
--- a/app/addons/documents/assets/less/view-editor.less
+++ /dev/null
@@ -1,268 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-
-.define-view {
-  padding: 15px;
-  .help-link {
-    margin-left: 4px;
-  }
-  .design-doc-group #new-ddoc-section {
-    margin-top: 24px;
-    label {
-      padding-top: 12px;
-    }
-  }
-}
-
-/* to remove once Mango has moved to the standard 2-panel layout */
-.mango-editor-wrapper {
-  label {
-    font-size: 16px;
-    margin-right: 0;
-  }
-  .bordered-box {
-    border-bottom: 1px solid #ccc;
-  }
-  .padded-box {
-    margin: 15px;
-  }
-  .db-title {
-    color: @brandHighlight;
-    line-height: 30px;
-  }
-  #index-name {
-    height: 46px;
-    width: 200px;
-  }
-  .new-ddoc-input {
-    margin-top: 25px;
-    height: 46px;
-  }
-  pre.prettyprint-left {
-    padding: 5px;
-  }
-  form {
-    padding-bottom: 15px;
-  }
-  a.edit-link {
-    float: right;
-    margin-right: 5px;
-    cursor: pointer;
-  }
-  .help-link {
-    margin-left: 4px;
-  }
-}
-
-.mango-select {
-  width: inherit;
-  overflow: visible;
-
-  div {
-    z-index: 100;
-  }
-
-  .mango-select-entry {
-    background-color: @queryHistoryBGColor;
-    color: @queryHistoryColor;
-
-    &.is-selected, &.is-focused {
-      background-color: @brandHighlight;
-      color: @queryHistoryBGColor;
-    }
-  }
-}
-
-// 940px grid without margin
-// -------------------------
-@gridColumnWidthNoMargin:         60px;
-@gridGutterWidthNoMargin:         0px;
-@gridRowWidthNoMargin:            (@gridColumns * @gridColumnWidthNoMargin) + (@gridGutterWidthNoMargin * (@gridColumns - 1));
-
-// 1200px min
-@gridColumnWidth1200NoMargin:     70px;
-@gridGutterWidth1200NoMargin:     0px;
-@gridRowWidth1200NoMargin:        (@gridColumns * @gridColumnWidth1200NoMargin) + (@gridGutterWidth1200NoMargin * (@gridColumns - 1));
-
-// 768px-979px
-@gridColumnWidth768NoMargin:      42px;
-@gridGutterWidth768NoMargin:      0px;
-@gridRowWidth768NoMargin:         (@gridColumns * @gridColumnWidth768NoMargin) + (@gridGutterWidth768NoMargin * (@gridColumns - 1));
-// Fluid grid
-// -------------------------
-@fluidGridColumnWidthNoMargin:    percentage(@gridColumnWidthNoMargin/@gridRowWidthNoMargin);
-@fluidGridGutterWidthNoMargin:    percentage(@gridGutterWidthNoMargin/@gridRowWidthNoMargin);
-// 1200px min
-@fluidGridColumnWidth1200NoMargin:     percentage(@gridColumnWidth1200NoMargin/@gridRowWidth1200NoMargin);
-@fluidGridGutterWidth1200NoMargin:     percentage(@gridGutterWidth1200NoMargin/@gridRowWidth1200NoMargin);
-// 768px-979px
-@fluidGridColumnWidth768NoMargin:      percentage(@gridColumnWidth768NoMargin/@gridRowWidth768NoMargin);
-@fluidGridGutterWidth768NoMargin:      percentage(@gridGutterWidth768NoMargin/@gridRowWidth768NoMargin);
-
-
-.two-pane > .fluid(@fluidGridColumnWidth1200NoMargin, @fluidGridGutterWidth1200NoMargin);
-
-.two-pane {
-
-  .core (@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
-    }
-
-    .span (@columns) {
-      width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-    }
-
-    .row {
-      margin-left: @gridGutterWidth * -1;
-      .clearfix();
-    }
-
-    [class*="span"] {
-      float: left;
-      min-height: 1px; // prevent collapsing columns
-      margin-left: @gridGutterWidth;
-    }
-
-    // Set the container width, and override it for fixed navbars in media queries
-    .container,
-    .navbar-static-top .container,
-    .navbar-fixed-top .container,
-    .navbar-fixed-bottom .container { .span(@gridColumns); }
-
-    // generate .spanX and .offsetX
-    .spanX (@gridColumns);
-    .offsetX (@gridColumns);
-
-  }
-
-  .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offset@{index}:first-child { .offsetFirstChild(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .offsetFirstChild (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .span (@columns) {
-      width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
-      *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .row-fluid {
-      width: 100%;
-      .clearfix();
-      [class*="span"] {
-        .input-block-level();
-        float: left;
-        margin-left: @fluidGridGutterWidth;
-        *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-      }
-      [class*="span"]:first-child {
-        margin-left: 0;
-      }
-
-      // Space grid-sized controls properly if multiple per line
-      .controls-row [class*="span"] + [class*="span"] {
-        margin-left: @fluidGridGutterWidth;
-      }
-
-      // generate .spanX and .offsetX
-      .spanX (@gridColumns);
-      .offsetX (@gridColumns);
-    }
-
-  }
-
-  .input(@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .span(@columns) {
-      width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
-    }
-
-    input,
-    textarea,
-    .uneditable-input {
-      margin-left: 0; // override margin-left from core grid system
-    }
-
-    // Space grid-sized controls properly if multiple per line
-    .controls-row [class*="span"] + [class*="span"] {
-      margin-left: @gridGutterWidth;
-    }
-
-    // generate .spanX
-    .spanX (@gridColumns);
-  }
-}
-
-a.index-cancel-link {
-  margin-left: 10px;
-  font-size: 14px;
-  color: #666;
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
-
-.ddoc-selector-partitioned {
-  clear: both;
-  padding-top: 16px;
-
-  label.check--disabled {
-    cursor: default
-  }
-}
-
-.reduce-editor-warning {
-  padding-bottom: 1rem;
-}
diff --git a/app/addons/documents/base.js b/app/addons/documents/base.js
deleted file mode 100644
index 6294b00..0000000
--- a/app/addons/documents/base.js
+++ /dev/null
@@ -1,284 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import Helpers from "../../helpers";
-import FauxtonAPI from "../../core/api";
-import Documents from "./routes";
-import designDocInfoReducers from "./designdocinfo/reducers";
-import reducers from "./index-results/reducers";
-import mangoReducers from "./mango/mango.reducers";
-import sidebarReducers from "./sidebar/reducers";
-import partitionKeyReducers from "./partition-key/reducers";
-import revisionBrowserReducers from './rev-browser/reducers';
-import docEditorReducers from './doc-editor/reducers';
-import changesReducers from './changes/reducers';
-import indexEditorReducers from './index-editor/reducers';
-import "./assets/less/documents.less";
-
-FauxtonAPI.addReducers({
-  indexResults: reducers,
-  mangoQuery: mangoReducers,
-  sidebar: sidebarReducers,
-  revisionBrowser: revisionBrowserReducers,
-  partitionKey: partitionKeyReducers,
-  docEditor: docEditorReducers,
-  changes: changesReducers,
-  designDocInfo: designDocInfoReducers,
-  indexEditor: indexEditorReducers
-});
-
-function getQueryParam (query) {
-  if (!query) {
-    query = '';
-  }
-  return query;
-}
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? `/_partition/${partitionKey}` : '';
-}
-
-FauxtonAPI.registerUrls('allDocs', {
-  server: function (id, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return Helpers.getServerUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  },
-  app: function (id, partitionKey, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_all_docs' + getQueryParam(query);
-  },
-  apiurl: function (id, query) {
-    /** XXX DEPRECATED: use allDocsSanitized **/
-    return Helpers.getApiUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('partitioned_allDocs', {
-  app: function (databaseName, partitionKey, query) {
-    return 'database/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query);
-  },
-  apiurl: function (databaseName, partitionKey, query) {
-    return Helpers.getApiUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
-  },
-  server: function (databaseName, partitionKey, query) {
-    return Helpers.getServerUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('allDocsSanitized', {
-  server: function (id, query) {
-    id = encodeURIComponent(id);
-    return Helpers.getServerUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  },
-
-  app: function (id, query) {
-    id = encodeURIComponent(id);
-    return 'database/' + id + '/_all_docs' + getQueryParam(query);
-  },
-
-  apiurl: function (id, query) {
-    id = encodeURIComponent(id);
-    return Helpers.getApiUrl('/' + id + '/_all_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('bulk_docs', {
-  server: function (id, query) {
-    return Helpers.getServerUrl('/' + encodeURIComponent(id) + '/_bulk_docs' + getQueryParam(query));
-  },
-  app: function (id, query) {
-    return 'database/' + id + '/_bulk_docs' + getQueryParam(query);
-  },
-  apiurl: function (id, query) {
-    return Helpers.getApiUrl('/' + id + '/_bulk_docs' + getQueryParam(query));
-  }
-});
-
-FauxtonAPI.registerUrls('revision-browser', {
-  app: function (id, doc) {
-    return 'database/' + id + '/' + doc + '/conflicts';
-  }
-});
-
-FauxtonAPI.registerUrls('designDocs', {
-  server: function (id, designDoc) {
-    return Helpers.getServerUrl('/' + id + '/' + designDoc + '/_info');
-  },
-
-  app: function (id, partitionKey, designDoc) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + app.utils.safeURLName(designDoc) + '/_info';
-  },
-
-  apiurl: function (id, designDoc) {
-    return Helpers.getApiUrl('/' + id + '/' + designDoc + '/_info');
-  }
-});
-
-FauxtonAPI.registerUrls('view', {
-  server: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getServerUrl('/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-
-  app: function (database, designDoc) {
-    return 'database/' + database + '/_design/' + designDoc + '/_view/';
-  },
-
-  apiurl: function (id, partitionKey, designDoc, viewName) {
-    return Helpers.getApiUrl('/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-
-  edit: function (database, partitionKey, designDoc, indexName) {
-    return 'database/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_view/' + indexName + '/edit';
-  },
-
-  showView: function (database, partitionKey, designDoc, viewName) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/' + designDoc + '/_view/' + viewName;
-  },
-
-  fragment: function (database, designDoc, viewName) {
-    return 'database/' + database + designDoc + '/_view/' + viewName;
-  }
-});
-
-FauxtonAPI.registerUrls('partitioned_view', {
-  server: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getServerUrl('/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/' + viewName);
-  },
-  app: function (database, partitionKey, designDoc) {
-    return 'database/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/';
-  },
-  apiurl: function (database, partitionKey, designDoc, viewName) {
-    return Helpers.getApiUrl('/' + database + '/_partition/' + partitionKey + '/_design/' + designDoc + '/_view/' + viewName);
-  }
-});
-
-FauxtonAPI.registerUrls('document', {
-  server: function (database, doc, query) {
-    if (_.isUndefined(query)) {
-      query = '';
-    }
-    return Helpers.getServerUrl('/' + database + '/' + doc + query);
-  },
-
-  attachment: function (database, doc, filename, query) {
-    if (_.isUndefined(query)) {
-      query = '';
-    }
-    return Helpers.getServerUrl('/' + database + '/' + doc + '/' + filename + query);
-  },
-
-  app: function (database, doc) {
-    return '/database/' + database + '/' + doc;
-  },
-
-  apiurl: function (database, doc) {
-    if (!doc) {
-      // api url for creating a doc with POST
-      return Helpers.getApiUrl('/' + database);
-    }
-    return Helpers.getApiUrl('/' + database + '/' + doc);
-  },
-
-  'web-index': function (database, doc) {
-    return '/database/' + database + '/' + doc;
-  }
-});
-
-FauxtonAPI.registerUrls('new', {
-  newDocument: function (database) {
-    return '/database/' + database + '/_new';
-  },
-
-  newView: function (database, partitionKey) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/new_view';
-  },
-
-  addView: function (database, partitionKey, ddoc) {
-    return '/database/' + database + partitionUrlComponent(partitionKey) + '/new_view/' + ddoc;
-  }
-});
-
-FauxtonAPI.registerUrls('base', {
-  server: function (database) {
-    return Helpers.getServerUrl('/' + database + '/');
-  },
-
-  app: function (database) {
-    return '/database/' + database + '/';
-  },
-});
-
-FauxtonAPI.registerUrls('mango', {
-
-  'index-server': function (db, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getServerUrl('/' + db + '/_index' + query);
-  },
-
-  'index-apiurl': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_index' + query);
-  },
-
-  'index-app': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return 'database/' + db + partitionUrlComponent(partitionKey) + '/_index' + query;
-  },
-
-  'index-server-bulk-delete': function (db) {
-    return Helpers.getServerUrl('/' + db + '/_index/_bulk_delete');
-  },
-
-  'query-server': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getServerUrl('/' + db + partitionUrlComponent(partitionKey) + '/_find' + query);
-  },
-
-  'query-apiurl': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_find' + query);
-  },
-
-  'query-app': function (db, partitionKey, query) {
-    if (!query) {
-      query = '';
-    }
-
-    return 'database/' + db + partitionUrlComponent(partitionKey) + '/_find' + query;
-  },
-
-  'explain-server': function (db, partitionKey) {
-    return Helpers.getServerUrl('/' + db + partitionUrlComponent(partitionKey) + '/_explain');
-  },
-
-  'explain-apiurl': function (db, partitionKey) {
-    return Helpers.getApiUrl('/' + db + partitionUrlComponent(partitionKey) + '/_explain');
-  }
-});
-
-export default Documents;
diff --git a/app/addons/documents/changes/actions.js b/app/addons/documents/changes/actions.js
deleted file mode 100644
index f6f72d4..0000000
--- a/app/addons/documents/changes/actions.js
+++ /dev/null
@@ -1,84 +0,0 @@
-
-// Licensed 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.
-
-import app from '../../../app';
-import FauxtonAPI from '../../../core/api';
-import { get } from '../../../core/ajax';
-import ActionTypes from './actiontypes';
-import Helpers from '../helpers';
-
-const pollingTimeout = 60000;
-let currentRequest;
-
-const addFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_CHANGES_FILTER_ITEM,
-    filter: filter
-  });
-};
-
-const removeFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.REMOVE_CHANGES_FILTER_ITEM,
-    filter: filter
-  });
-};
-
-const loadChanges = (databaseName) => (dispatch) => {
-  currentRequest = null;
-  getLatestChanges(dispatch, databaseName);
-};
-
-const getLatestChanges = (dispatch, databaseName, lastSeqNum) => {
-  const params = {
-    limit: 100
-  };
-
-  // after the first request for the changes list has been made, switch to longpoll
-  if (currentRequest) {
-    params.since = lastSeqNum;
-    params.timeout = pollingTimeout;
-    params.feed = 'longpoll';
-  }
-
-  const query = app.utils.queryParams(params);
-  const db = app.utils.safeURLName(databaseName);
-  const endpoint = FauxtonAPI.urls('changes', 'server', db, '?' + query);
-  get(endpoint).then((res) => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    updateChanges(res, dispatch);
-  }).catch((err) => {
-    FauxtonAPI.addNotification({
-      msg: 'Error loading list of changes. Reason: ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const updateChanges = (json, dispatch) => {
-  const latestSeqNum = Helpers.getSeqNum(json.last_seq);
-  dispatch({
-    type: ActionTypes.UPDATE_CHANGES,
-    changes: json.results,
-    seqNum: latestSeqNum
-  });
-};
-
-export default {
-  addFilter,
-  removeFilter,
-  loadChanges
-};
diff --git a/app/addons/documents/changes/actiontypes.js b/app/addons/documents/changes/actiontypes.js
deleted file mode 100644
index 6325683..0000000
--- a/app/addons/documents/changes/actiontypes.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Licensed 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.
-
-export default {
-  UPDATE_CHANGES: 'UPDATE_CHANGES',
-  ADD_CHANGES_FILTER_ITEM: 'ADD_CHANGES_FILTER_ITEM',
-  REMOVE_CHANGES_FILTER_ITEM: 'REMOVE_CHANGES_FILTER_ITEM',
-  UPDATE_CHANGES_FILTER: 'UPDATE_CHANGES_FILTER',
-  TOGGLE_CHANGES_CODE_VISIBILITY: 'TOGGLE_CHANGES_CODE_VISIBILITY'
-};
diff --git a/app/addons/documents/changes/components/AddFilterForm.js b/app/addons/documents/changes/components/AddFilterForm.js
deleted file mode 100644
index 8e0b795..0000000
--- a/app/addons/documents/changes/components/AddFilterForm.js
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export default class AddFilterForm extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      filter: '',
-      error: false
-    };
-    this.submitForm = this.submitForm.bind(this);
-  }
-
-  submitForm (e) {
-    e.preventDefault();
-    e.stopPropagation();
-
-    if (this.props.hasFilter(this.state.filter)) {
-      this.setState({ error: true });
-
-      // Yuck. This removes the class after the effect has completed so it can occur again. The
-      // other option is to use jQuery to add the flash. This seemed slightly less crumby
-      let component = this;
-      setTimeout(function () {
-        component.setState({ error: false });
-      }, 1000);
-    } else {
-      this.props.addFilter(this.state.filter);
-      this.setState({ filter: '', error: false });
-    }
-  }
-
-  componentDidMount () {
-    this.focusFilterField();
-  }
-
-  componentDidUpdate () {
-    this.focusFilterField();
-  }
-
-  focusFilterField () {
-    this.addItem.focus();
-  }
-
-  inputClassNames () {
-    let className = 'js-changes-filter-field';
-    if (this.state.error) {
-      className += ' errorHighlight';
-    }
-    return className;
-  }
-
-  render () {
-    return (
-      <form className="form-inline js-filter-form" onSubmit={this.submitForm}>
-        <fieldset>
-          <i className="fonticon-filter" />
-          <input
-            type="text"
-            ref={node => this.addItem = node}
-            className={this.inputClassNames()}
-            placeholder="Sequence or ID"
-            onChange={(e) => this.setState({ filter: e.target.value })}
-            value={this.state.filter} />
-          <button type="submit" className="btn btn-secondary">Filter</button>
-          <div className="help-block"></div>
-        </fieldset>
-      </form>
-    );
-  }
-}
-
-AddFilterForm.propTypes = {
-  addFilter: PropTypes.func.isRequired,
-  hasFilter: PropTypes.func.isRequired,
-  tooltips: PropTypes.string
-};
-AddFilterForm.defaultProps = {
-  tooltip: ''
-};
diff --git a/app/addons/documents/changes/components/ChangeID.js b/app/addons/documents/changes/components/ChangeID.js
deleted file mode 100644
index 79c8a33..0000000
--- a/app/addons/documents/changes/components/ChangeID.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../core/api';
-
-export default class ChangeID extends React.Component {
-  render () {
-    const { deleted, id, databaseName } = this.props;
-    if (deleted) {
-      return (
-        <span className="js-doc-id">{id}</span>
-      );
-    }
-    const link = '#' + FauxtonAPI.urls('document', 'app', databaseName, id);
-    return (
-      <a href={link} className="js-doc-link">{id}</a>
-    );
-  }
-}
diff --git a/app/addons/documents/changes/components/ChangeRow.js b/app/addons/documents/changes/components/ChangeRow.js
deleted file mode 100644
index e6d30fe..0000000
--- a/app/addons/documents/changes/components/ChangeRow.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import uuid from 'uuid';
-import FauxtonAPI from '../../../../core/api';
-import Components from '../../../fauxton/components';
-import ReactComponents from '../../../components/react-components';
-import ChangesCodeTransition from './ChangesCodeTransition';
-import ChangeID from './ChangeID';
-
-const {Copy} = ReactComponents;
-
-export default class ChangeRow extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      codeVisible: false
-    };
-  }
-
-  toggleJSON (e) {
-    e.preventDefault();
-    this.setState({ codeVisible: !this.state.codeVisible });
-  }
-
-  getChangesCode () {
-    return (this.state.codeVisible) ? <Components.CodeFormat key="changesCodeSection" code={this.getChangeCode()} /> : null;
-  }
-
-  getChangeCode () {
-    return {
-      changes: this.props.change.changes,
-      doc: this.props.change.doc
-    };
-  }
-
-  showCopiedMessage (target) {
-    let msg = 'The document ID has been copied to your clipboard.';
-    if (target === 'seq') {
-      msg = 'The document seq number has been copied to your clipboard.';
-    }
-    FauxtonAPI.addNotification({
-      msg: msg,
-      type: 'info',
-      clear: true
-    });
-  }
-
-  render () {
-    const { codeVisible } = this.state;
-    const { change, databaseName } = this.props;
-    const wrapperClass = 'change-wrapper' + (change.isNew ? ' new-change-row' : '');
-
-    return (
-      <div className={wrapperClass}>
-        <div className="change-box" data-id={change.id}>
-          <div className="row-fluid">
-            <div className="span2">seq</div>
-            <div className="span8 change-sequence">{change.seq}</div>
-            <div className="span2 text-right">
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={change.seq.toString()}
-                onClipboardClick={() => this.showCopiedMessage('seq')} />
-            </div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">id</div>
-            <div className="span8">
-              <ChangeID id={change.id} deleted={change.deleted} databaseName={databaseName} />
-            </div>
-            <div className="span2 text-right">
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={change.id}
-                onClipboardClick={() => this.showCopiedMessage('id')} />
-            </div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">deleted</div>
-            <div className="span10">{change.deleted ? 'True' : 'False'}</div>
-          </div>
-
-          <div className="row-fluid">
-            <div className="span2">changes</div>
-            <div className="span10">
-              <button type="button" className='btn btn-small btn-secondary' onClick={this.toggleJSON.bind(this)}>
-                {codeVisible ? 'Close JSON' : 'View JSON'}
-              </button>
-            </div>
-          </div>
-
-          <ChangesCodeTransition
-            codeVisible={this.state.codeVisible}
-            code={this.getChangeCode()}
-          />
-        </div>
-      </div>
-    );
-  }
-}
-
-ChangeRow.propTypes = {
-  change: PropTypes.object,
-  databaseName: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesCodeTransition.js b/app/addons/documents/changes/components/ChangesCodeTransition.js
deleted file mode 100644
index 09ba58d..0000000
--- a/app/addons/documents/changes/components/ChangesCodeTransition.js
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import Components from '../../../fauxton/components';
-import {TransitionMotion, spring, presets} from 'react-motion';
-import '../../../../../assets/js/plugins/prettify';
-
-export default class ChangesCodeTransition extends React.Component {
-  willEnter () {
-    return {
-      opacity: spring(1, presets.gentle),
-      height: spring(160, presets.gentle)
-    };
-  }
-
-  willLeave () {
-    return {
-      opacity: spring(0, presets.gentle),
-      height: spring(0, presets.gentle)
-    };
-  }
-
-  getStyles (prevStyle) {
-    if (!prevStyle && this.props.codeVisible) {
-      return [{
-        key: '1',
-        style: this.willEnter()
-      }];
-    }
-
-    if (!prevStyle && !this.props.codeVisible) {
-      return [{
-        key: '1',
-        style: this.willLeave()
-      }];
-    }
-    return prevStyle.map(item => {
-      return {
-        key: '1',
-        style: item.style
-      };
-    });
-  }
-
-  getChildren (items) {
-    const code =  items.map(({style}) => {
-      if (this.props.codeVisible === false && style.opacity === 0) {
-        return null;
-      }
-      return (
-        <div key='1' style={{opacity: style.opacity, height: style.height + 'px'}}>
-          <Components.CodeFormat
-            code={this.props.code}
-          />
-        </div>
-      );
-    });
-
-    return (
-      <span>
-        {code}
-      </span>
-    );
-  }
-
-  render () {
-    return (
-      <TransitionMotion
-        styles={this.getStyles()}
-        willLeave={this.willLeave}
-        willEnter={this.willEnter}
-      >
-        {this.getChildren.bind(this)}
-      </TransitionMotion>
-    );
-  }
-}
-
-ChangesCodeTransition.propTypes = {
-  code: PropTypes.object.isRequired,
-  codeVisible: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesContainer.js b/app/addons/documents/changes/components/ChangesContainer.js
deleted file mode 100644
index 3fa7ce3..0000000
--- a/app/addons/documents/changes/components/ChangesContainer.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { connect } from 'react-redux';
-import ChangesScreen from './ChangesScreen';
-import Actions from '../actions';
-
-const mapStateToProps = ({ changes }, ownProps) => {
-  return {
-    changes: changes.filteredChanges,
-    loaded: changes.isLoaded,
-    databaseName: ownProps.databaseName,
-    isShowingSubset: changes.showingSubset
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    loadChanges: (databaseName) => {
-      dispatch(Actions.loadChanges(databaseName));
-    }
-  };
-};
-
-const ChangesContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ChangesScreen);
-
-export default ChangesContainer;
diff --git a/app/addons/documents/changes/components/ChangesScreen.js b/app/addons/documents/changes/components/ChangesScreen.js
deleted file mode 100644
index 8a78d37..0000000
--- a/app/addons/documents/changes/components/ChangesScreen.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import ChangeRow from './ChangeRow';
-
-export default class ChangesScreen extends React.Component {
-  constructor (props) {
-    super(props);
-    this.props.loadChanges(this.props.databaseName);
-  }
-
-  showingSubsetMsg () {
-    const { isShowingSubset, changes } = this.props;
-    let msg = '';
-    if (isShowingSubset) {
-      let numChanges = changes.length;
-      msg = <p className="changes-result-limit">Limiting results to latest <b>{numChanges}</b> changes.</p>;
-    }
-    return msg;
-  }
-
-  getRows () {
-    const { changes, loaded, databaseName } = this.props;
-    if (!changes.length && loaded) {
-      return (
-        <p className="no-doc-changes">
-          There are no document changes to display.
-        </p>
-      );
-    }
-
-    return changes.map((change, i) => {
-      return <ChangeRow change={change} key={i} databaseName={databaseName} />;
-    });
-  }
-
-  render () {
-    return (
-      <div>
-        <div className="js-changes-view">
-          {this.showingSubsetMsg()}
-          {this.getRows()}
-        </div>
-      </div>
-    );
-  }
-}
-
-ChangesScreen.propTypes = {
-  changes: PropTypes.array.isRequired,
-  loaded: PropTypes.bool.isRequired,
-  databaseName: PropTypes.string.isRequired,
-  isShowingSubset: PropTypes.bool.isRequired,
-  loadChanges: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesTabContent.js b/app/addons/documents/changes/components/ChangesTabContent.js
deleted file mode 100644
index 205fe44..0000000
--- a/app/addons/documents/changes/components/ChangesTabContent.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import ReactComponents from '../../../components/react-components';
-import AddFilterForm from './AddFilterForm';
-
-export default class ChangesTabContent extends React.Component {
-  constructor (props) {
-    super(props);
-    this.addFilter = this.addFilter.bind(this);
-    this.hasFilter = this.hasFilter.bind(this);
-  }
-
-  addFilter (newFilter) {
-    if (_.isEmpty(newFilter)) {
-      return;
-    }
-    this.props.addFilter(newFilter);
-  }
-
-  hasFilter (filter) {
-    return this.props.filters.includes(filter);
-  }
-
-  render () {
-    return (
-      <div className="changes-header">
-        <AddFilterForm filter={(label) => this.props.removeFilter(label)} addFilter={this.addFilter}
-          hasFilter={this.hasFilter} />
-        <ReactComponents.BadgeList elements={this.props.filters} removeBadge={(label) => this.props.removeFilter(label)} />
-      </div>
-    );
-  }
-}
-
-ChangesTabContent.propTypes = {
-  filters: PropTypes.array.isRequired,
-  addFilter: PropTypes.func.isRequired,
-  removeFilter: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/changes/components/ChangesTabContentContainer.js b/app/addons/documents/changes/components/ChangesTabContentContainer.js
deleted file mode 100644
index ed222b4..0000000
--- a/app/addons/documents/changes/components/ChangesTabContentContainer.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { connect } from 'react-redux';
-import ChangesTabContent from './ChangesTabContent';
-import Actions from '../actions';
-
-const mapStateToProps = ({ changes }) => {
-  return {
-    filters: changes.filters
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    addFilter: (filter) => {
-      dispatch(Actions.addFilter(filter));
-    },
-
-    removeFilter: (filter) => {
-      dispatch(Actions.removeFilter(filter));
-    }
-  };
-};
-
-const ChangesTabContentContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ChangesTabContent);
-
-export default ChangesTabContentContainer;
diff --git a/app/addons/documents/changes/reducers.js b/app/addons/documents/changes/reducers.js
deleted file mode 100644
index 8bcf9f6..0000000
--- a/app/addons/documents/changes/reducers.js
+++ /dev/null
@@ -1,126 +0,0 @@
-
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-import Helpers from '../helpers';
-
-const initialState = {
-  isLoaded: false,
-  filters: [],
-  changes: [],
-  filteredChanges: [],
-  maxChangesListed: 100,
-  showingSubset: false,
-  lastSequenceNum: null
-};
-
-function updateChanges(state, seqNum, changes) {
-  const newState = {
-    ...state,
-    // make a note of the most recent sequence number. This is used for a point of reference for polling for new changes
-    lastSequenceNum: seqNum,
-    isLoaded: true
-  };
-
-  // mark any additional changes that come after first page load as "new" so we can add a nice highlight effect
-  // when the new row is rendered
-  const firstBatch = newState.changes.length === 0;
-  newState.changes.forEach((change) => {
-    change.isNew = false;
-  });
-
-  const newChanges = changes.map((change) => {
-    const seq = Helpers.getSeqNum(change.seq);
-    return {
-      id: change.id,
-      seq: seq,
-      deleted: _.has(change, 'deleted') ? change.deleted : false,
-      changes: change.changes,
-      doc: change.doc, // only populated with ?include_docs=true
-      isNew: !firstBatch
-    };
-  });
-
-  // add the new changes to the start of the list
-  newState.changes = newChanges.concat(newState.changes);
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function addFilter(state, filter) {
-  const newFilters = state.filters.slice();
-  newFilters.push(filter);
-
-  const newState = {
-    ...state,
-    filters: newFilters
-  };
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function removeFilter(state, filter) {
-  const newFilters = state.filters.slice();
-  const idx = newFilters.indexOf(filter);
-  if (idx >= 0) {
-    newFilters.splice(idx, 1);
-  }
-
-  const newState = {
-    ...state,
-    filters: newFilters
-  };
-  updateFilteredChanges(newState);
-  return newState;
-}
-
-function updateFilteredChanges(state) {
-  state.showingSubset = false;
-  let numMatches = 0;
-  state.filteredChanges = state.changes.filter((change) => {
-    if (numMatches >= state.maxChangesListed) {
-      state.showingSubset = true;
-      return false;
-    }
-    let changeStr = JSON.stringify(change);
-    let match = state.filters.every((filter) => {
-      return new RegExp(filter, 'i').test(changeStr);
-    });
-
-    if (match) {
-      numMatches++;
-    }
-    return match;
-  });
-}
-
-export default function changes (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.UPDATE_CHANGES:
-      // only bother updating the list of changes if the seq num has changed
-      if (state.lastSequenceNum !== action.seqNum) {
-        return updateChanges(state, action.seqNum, action.changes);
-      }
-      return state;
-
-    case ActionTypes.ADD_CHANGES_FILTER_ITEM:
-      return addFilter(state, action.filter);
-
-    case ActionTypes.REMOVE_CHANGES_FILTER_ITEM:
-      return removeFilter(state, action.filter);
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/components/actions.js b/app/addons/documents/components/actions.js
deleted file mode 100644
index d9b266f..0000000
--- a/app/addons/documents/components/actions.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import { get } from "../../../core/ajax";
-
-export default {
-  fetchAllDocsWithKey: (database, partitionKey) => {
-    return (id, callback) => {
-      const query = '?' + app.utils.queryParams({
-        startkey: JSON.stringify(id),
-        endkey: JSON.stringify(id + "\u9999"),
-        limit: 30
-      });
-
-      const url = partitionKey ?
-        FauxtonAPI.urls('partitioned_allDocs', 'server', database.safeID(), encodeURIComponent(partitionKey), query) :
-        FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
-      get(url).then(res => {
-        let options = [];
-        if (!res.error) {
-          const {rows} = res;
-          options = rows.map(row => {
-            return { value: row.id, label: row.id};
-          });
-        }
-        callback(null, { options: options });
-      });
-    };
-  }
-};
diff --git a/app/addons/documents/components/header-docs-left.js b/app/addons/documents/components/header-docs-left.js
deleted file mode 100644
index cca5693..0000000
--- a/app/addons/documents/components/header-docs-left.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import Helpers from "../helpers";
-import FauxtonAPI from '../../../core/api';
-import { Dropdown } from "react-bootstrap";
-
-function getModififyDbLinks (dbName) {
-  return Helpers.getModifyDatabaseLinks(dbName);
-}
-
-function getAllDatabaseModalLinks (dbName, partitionKey) {
-  const dropdownMenuLinks = Helpers.getNewButtonLinks(dbName, partitionKey);
-  return getModififyDbLinks(dbName).concat(dropdownMenuLinks);
-}
-
-
-function getDropdownItems (items) {
-  return items.map((el, i) => {
-
-    if (el.title && el.links) {
-      const items = el.links.map((subel) => {
-        return <Item key={subel.title} onClick={subel.onClick} icon={subel.icon} url={subel.url}>{subel.title}</Item>;
-      });
-
-      return ([
-        <li key={el.title} className="header-label">{el.title}</li>,
-        items
-      ]);
-    }
-
-    return (
-      <Item icon={el.icon} url={el.url} onClick={el.onClick} key={i}>{el.title}</Item>
-    );
-  });
-}
-
-
-const Item = ({url, icon, onClick, children}) => {
-  return (
-    <li role="presentation">
-      <a className="faux-header__doc-header-dropdown-item" onClick={onClick} href={url}>
-        <i className={icon}></i> {children}
-      </a>
-    </li>
-  );
-};
-
-const HeaderDocsLeft = ({dbName, partitionKey}) => {
-  const items = getAllDatabaseModalLinks(dbName, partitionKey);
-  const dropdownItems = getDropdownItems(items);
-
-  return (
-    <div className="faux-header__doc-header-left">
-      <button type="button" className="faux-header__doc-header-backlink" onClick={() => { FauxtonAPI.navigate('#/_all_dbs'); }}>
-        <i className="faux-header__doc-header-backlink__icon fonticon fonticon-left-open" />
-      </button>
-      <div className="faux-header__doc-header-title flex-fill" title={dbName}>
-        {dbName}
-      </div>
-      <Dropdown id="faux-header__doc-header-left-1">
-        <Dropdown.Toggle noCaret className="faux-header__doc-header-dropdown-toggle">
-          <i className="faux-header__doc-header-dropdown-toggle-icon fonticon-vertical-ellipsis"></i>
-        </Dropdown.Toggle>
-        <Dropdown.Menu className="faux-header__doc-header-dropdown-itemwrapper">
-          {dropdownItems}
-        </Dropdown.Menu>
-      </Dropdown>
-    </div>
-  );
-};
-
-HeaderDocsLeft.propTypes = {
-  dbName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string
-};
-
-export default HeaderDocsLeft;
diff --git a/app/addons/documents/components/header-docs-right.js b/app/addons/documents/components/header-docs-right.js
deleted file mode 100644
index dfeaaa9..0000000
--- a/app/addons/documents/components/header-docs-right.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import QueryOptionsContainer from '../index-results/containers/QueryOptionsContainer';
-import JumpToDoc from './jumptodoc';
-import Actions from './actions';
-
-const RightAllDocsHeader = ({database, hideQueryOptions, hideJumpToDoc, queryDocs, ddocsOnly, selectedNavItem, partitionKey}) =>
-  <div className="header-right right-db-header flex-layout flex-row">
-
-    <div className="faux-header__searchboxwrapper">
-      <div className="faux-header__searchboxcontainer">
-        {hideJumpToDoc ? null :
-          <JumpToDoc
-            // 'key' is set to force mounting a new component when the partition key changes
-            // otherwise the internal ReactSelect doesn't reload the options even though
-            // it loadOptions is assigned a new function
-            key={JSON.stringify(database + partitionKey)}
-            cache={false}
-            loadOptions={Actions.fetchAllDocsWithKey(database, partitionKey)}
-            database={database} /> }
-      </div>
-    </div>
-    {hideQueryOptions ? null :
-      <QueryOptionsContainer ddocsOnly={ddocsOnly} queryDocs={ queryDocs } selectedNavItem={selectedNavItem} /> }
-  </div>;
-
-RightAllDocsHeader.propTypes = {
-  database: PropTypes.object.isRequired,
-  hideQueryOptions: PropTypes.bool,
-  isRedux: PropTypes.bool,
-  queryDocs: PropTypes.func,
-  selectedNavItem: PropTypes.object,
-  partitionKey: PropTypes.string
-};
-
-RightAllDocsHeader.defaultProps = {
-  hideQueryOptions: false
-};
-
-export default RightAllDocsHeader;
diff --git a/app/addons/documents/components/jumptodoc.js b/app/addons/documents/components/jumptodoc.js
deleted file mode 100644
index 7edbc66..0000000
--- a/app/addons/documents/components/jumptodoc.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import ReactDOM from "react-dom";
-import Components from "../../components/react-components";
-
-
-const JumpToDoc = ({database, loadOptions}) => {
-  return (
-    <div>
-      <Components.ThrottledReactSelectAsync
-        className="jump-to-doc"
-        name="jump-to-doc"
-        placeholder="Document ID"
-        loadOptions={loadOptions}
-        clearable={false}
-        ignoreCase={false}
-        ignoreAccents={false}
-        cache={false}
-        onChange={({value: docId}) => {
-          const url = FauxtonAPI.urls('document', 'app', app.utils.safeURLName(database.id), app.utils.safeURLName(docId));
-          // We navigating away from the page. So we need to take that navigation out of the loop otherwise
-          // it causes an issue where the react-select state is changed after its unmounted
-          setTimeout(() => FauxtonAPI.navigate(url, {trigger: true}));
-        }} />
-    </div>
-  );
-};
-
-JumpToDoc.propTypes = {
-  database: PropTypes.object.isRequired,
-  loadOptions: PropTypes.func.isRequired,
-};
-
-export default JumpToDoc;
diff --git a/app/addons/documents/components/results-options.js b/app/addons/documents/components/results-options.js
deleted file mode 100644
index c63f0ea..0000000
--- a/app/addons/documents/components/results-options.js
+++ /dev/null
@@ -1,99 +0,0 @@
-
-import React from 'react';
-import PropTypes from 'prop-types';
-import Components from '../../components/react-components';
-import Constants from '../constants';
-
-const { MenuDropDown } = Components;
-
-export default class ResultsOptions extends React.Component {
-  static defaultProps = {
-    showDensity: true,
-    showFontSize: true
-  };
-  static propTypes = {
-    resultsStyle: PropTypes.object.isRequired,
-    updateStyle: PropTypes.func.isRequired,
-    showDensity: PropTypes.bool,
-    showFontSize: PropTypes.bool
-  };
-
-  constructor(props) {
-    super(props);
-    this.toggleTextOverflow = this.toggleTextOverflow.bind(this);
-    this.setFontSize = this.setFontSize.bind(this);
-  }
-
-  toggleTextOverflow() {
-    if (this.props.resultsStyle.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL) {
-      this.props.updateStyle({
-        textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED
-      });
-    } else {
-      this.props.updateStyle({
-        textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL
-      });
-    }
-  }
-
-  setFontSize(size) {
-    this.props.updateStyle({
-      fontSize: size
-    });
-  }
-
-  getDensitySection() {
-    let menuOptionTitle = 'Show full values';
-    if (this.props.resultsStyle.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL) {
-      menuOptionTitle = 'Truncate values';
-    }
-
-    const densityItems = [{
-      title: menuOptionTitle,
-      onClick: this.toggleTextOverflow
-    }];
-
-    return {
-      title: 'Display density',
-      links: densityItems
-    };
-  }
-
-  getFontSizeSection() {
-    const fontSizeItems = [{
-      title: 'Small',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL ? 'fonticon-ok' : ''
-    },
-    {
-      title: 'Medium',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM ? 'fonticon-ok' : ''
-    },
-    {
-      title: 'Large',
-      onClick: () => { this.setFontSize(Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE); },
-      icon: this.props.resultsStyle.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE ? 'fonticon-ok' : ''
-    }];
-    return {
-      title: 'Font size',
-      links: fontSizeItems
-    };
-  }
-
-  render() {
-    const links = [];
-    if (this.props.showDensity) {
-      links.push(this.getDensitySection());
-    }
-    if (this.props.showFontSize) {
-      links.push(this.getFontSizeSection());
-    }
-
-    return (
-      <div className='toolbar-dropdown'>
-        <MenuDropDown id="result-style-menu" links={links} icon='fonticon-mixer' hideArrow={true} toggleType='button'/>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/components/results-toolbar.js b/app/addons/documents/components/results-toolbar.js
deleted file mode 100644
index a610d2f..0000000
--- a/app/addons/documents/components/results-toolbar.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import BulkDocumentHeaderController from "../header/header";
-import ResultsOptions from './results-options';
-import Components from "../../components/react-components";
-import Constants from '../constants';
-import Helpers from '../helpers';
-
-const {BulkActionComponent} = Components;
-
-export class ResultsToolBar extends React.Component {
-
-  shouldComponentUpdate (nextProps) {
-    return nextProps.isListDeletable != undefined;
-  }
-
-  render () {
-    const {
-      hasResults,
-      isListDeletable,
-      removeItem,
-      allDocumentsSelected,
-      hasSelectedItem,
-      toggleSelectAll,
-      isLoading,
-      databaseName,
-      partitionKey
-    } = this.props;
-
-    // Determine if we need to display the bulk action selector
-    let bulkAction = null;
-    if ((isListDeletable && hasResults) || isLoading) {
-      bulkAction = <BulkActionComponent
-        removeItem={removeItem}
-        isChecked={allDocumentsSelected}
-        hasSelectedItem={hasSelectedItem}
-        toggleSelect={toggleSelectAll}
-        disabled={isLoading}
-        title="Select all docs that can be..." />;
-    }
-
-    // Determine if we need to display the bulk doc header and result options
-    let bulkHeader = null;
-    const showDensityOptions = this.props.selectedLayout !== Constants.LAYOUT_ORIENTATION.JSON;
-    let resultOptions = null;
-    if (hasResults || isLoading) {
-      bulkHeader = <BulkDocumentHeaderController {...this.props} />;
-      resultOptions = <ResultsOptions
-        updateStyle={this.props.updateResultsStyle}
-        resultsStyle={this.props.resultsStyle}
-        showDensity={showDensityOptions}
-      />;
-    }
-
-    let createDocumentLink = null;
-    if (databaseName) {
-      createDocumentLink = (
-        <div className="document-result-screen__toolbar-flex-container">
-          <a href={Helpers.getNewDocUrl(databaseName, partitionKey)} className="btn save document-result-screen__toolbar-create-btn btn-primary">
-            Create Document
-          </a>
-        </div>
-      );
-    }
-
-    return (
-      <div className="document-result-screen__toolbar">
-        {bulkAction}
-        {bulkHeader}
-        {resultOptions}
-        {createDocumentLink}
-      </div>
-    );
-  }
-}
-
-ResultsToolBar.propTypes = {
-  removeItem: PropTypes.func.isRequired,
-  allDocumentsSelected: PropTypes.bool.isRequired,
-  hasSelectedItem: PropTypes.bool.isRequired,
-  toggleSelectAll: PropTypes.func.isRequired,
-  isLoading: PropTypes.bool.isRequired,
-  hasResults: PropTypes.bool.isRequired,
-  isListDeletable: PropTypes.bool,
-  partitionKey: PropTypes.string,
-  docType: PropTypes.string,
-  resultsStyle: PropTypes.object.isRequired,
-  updateResultsStyle: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/constants.js b/app/addons/documents/constants.js
deleted file mode 100644
index 49a3f96..0000000
--- a/app/addons/documents/constants.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-
-export default {
-  LAYOUT_ORIENTATION: {
-    TABLE: 'LAYOUT_TABLE',
-    METADATA: 'LAYOUT_METADATA',
-    JSON: 'LAYOUT_JSON'
-  },
-  // Document types that can be displayed by Index Results components
-  INDEX_RESULTS_DOC_TYPE: {
-    MANGO_INDEX: 'MangoIndex',
-    MANGO_QUERY: 'MangoQueryResult',
-    VIEW: 'view'
-  },
-  INDEX_RESULTS_STYLE: {
-    TEXT_OVERFLOW_TRUNCATED: 'truncated',
-    TEXT_OVERFLOW_FULL: 'full',
-    FONT_SIZE_SMALL: 'small-font',
-    FONT_SIZE_LARGE: 'large-font',
-    FONT_SIZE_MEDIUM: 'medium-font'
-  }
-};
diff --git a/app/addons/documents/designdocinfo/actions.js b/app/addons/documents/designdocinfo/actions.js
deleted file mode 100644
index 3ec85e6..0000000
--- a/app/addons/documents/designdocinfo/actions.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from "./actiontypes";
-
-const fetchDesignDocInfo = ({designDocName, designDocInfo}) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_FETCHING
-  });
-
-  return designDocInfo.fetch().then(() => {
-    monitorDesignDoc({
-      designDocName,
-      designDocInfo
-    }, dispatch);
-  }).catch(() => {
-    dispatch({
-      type: ActionTypes.DESIGN_FETCHING_FAILED
-    });
-    FauxtonAPI.addNotification({
-      msg: 'Error loading design document metadata.',
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-let intervalId;
-const monitorDesignDoc = (options, dispatch) => {
-  const refreshDDoc = () => {
-    refresh(options.designDocInfo, dispatch);
-  };
-  stopRefresh();
-  intervalId = window.setInterval(refreshDDoc, 5000);
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_MONITOR,
-    options: options
-  });
-};
-
-const refresh = (designDocInfo, dispatch) => {
-  designDocInfo.fetch().then(() => {
-    dispatch({
-      type: ActionTypes.DESIGN_REFRESH,
-      designDocInfo
-    });
-  });
-};
-
-const stopRefresh = () => {
-  if (intervalId) {
-    window.clearInterval(intervalId);
-    intervalId = undefined;
-  }
-};
-
-export default {
-  fetchDesignDocInfo,
-  stopRefresh
-};
diff --git a/app/addons/documents/designdocinfo/actiontypes.js b/app/addons/documents/designdocinfo/actiontypes.js
deleted file mode 100644
index 4c5f49e..0000000
--- a/app/addons/documents/designdocinfo/actiontypes.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed 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.
-
-export default {
-  DESIGN_DOC_MONITOR: 'DESIGN_DOC_MONITOR',
-  DESIGN_FETCHING: 'DESIGN_FETCHING',
-  DESIGN_FETCHING_FAILED: 'DESIGN_FETCHING_FAILED',
-  DESIGN_REFRESH: 'DESIGN_REFRESH'
-};
diff --git a/app/addons/documents/designdocinfo/components/DesignDocInfo.js b/app/addons/documents/designdocinfo/components/DesignDocInfo.js
deleted file mode 100644
index 10c72b9..0000000
--- a/app/addons/documents/designdocinfo/components/DesignDocInfo.js
+++ /dev/null
@@ -1,151 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import uuid from 'uuid';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const LoadLines = ReactComponents.LoadLines;
-const Copy = ReactComponents.Copy;
-
-export default class DesignDocInfo extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.fetchDDocInfo();
-  }
-
-  componentDidUpdate(prevProps) {
-    if (this.props.designDocInfo !== prevProps.designDocInfo) {
-      this.fetchDDocInfo();
-    }
-  }
-
-  componentWillUnmount() {
-    this.props.stopRefresh();
-  }
-
-  fetchDDocInfo() {
-    this.props.fetchDesignDocInfo({
-      designDocName: this.props.designDocName,
-      designDocInfo: this.props.designDocInfo
-    });
-  }
-
-  showCopiedMessage = () => {
-    FauxtonAPI.addNotification({
-      type: 'success',
-      msg: 'The MD5 sha has been copied to your clipboard.',
-      clear: true
-    });
-  };
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-    if (this.props.showLoadError) {
-      return (
-        <div className="metadata-page">
-          <header>
-            <h2>_design/{this.props.designDocName} Metadata</h2>
-          </header>
-
-          <section className="container">
-            Error retrieving metadata. Try reloading the page.
-          </section>
-        </div>
-      );
-    }
-    const viewIndex = this.props.viewIndex;
-    const {sizes} = viewIndex;
-    const actualSize = (sizes.active) ? sizes.active.toLocaleString('en') : 0;
-    const dataSize = (sizes.external) ? sizes.external.toLocaleString('en') : 0;
-
-    return (
-      <div className="metadata-page">
-        <header>
-          <h2>_design/{this.props.designDocName} Metadata</h2>
-        </header>
-
-        <section className="container">
-          <h3>Index Information</h3>
-
-          <ul>
-            <li>
-              <span className="item-title">Language:</span>
-              <span className="capitalize">{viewIndex.language}</span>
-            </li>
-            <li>
-              <span className="item-title">Currently being updated?</span>
-              {viewIndex.updater_running ? 'Yes' : 'No'}
-            </li>
-            <li>
-              <span className="item-title">Currently running compaction?</span>
-              {viewIndex.compact_running ? 'Yes' : 'No'}
-            </li>
-            <li>
-              <span className="item-title">Waiting for a commit?</span>
-              {viewIndex.waiting_commit ? 'Yes' : 'No'}
-            </li>
-          </ul>
-
-          <ul>
-            <li>
-              <span className="item-title">Clients waiting for the index:</span>
-              {viewIndex.waiting_clients}
-            </li>
-            <li>
-              <span className="item-title">Update sequence on DB:</span>
-              {viewIndex.update_seq}
-            </li>
-            <li>
-              <span className="item-title">Processed purge sequence:</span>
-              {viewIndex.purge_seq}
-            </li>
-            <li>
-              <span className="item-title">Actual data size (bytes):</span>
-              {actualSize}
-            </li>
-            <li>
-              <span className="item-title">Data size on disk (bytes):</span>
-              {dataSize}
-            </li>
-          </ul>
-
-          <ul>
-            <li>
-              <span className="item-title">MD5 Signature:</span>
-              <Copy
-                uniqueKey={uuid.v4()}
-                text={viewIndex.signature}
-                onClipboardClick={this.showCopiedMessage} />
-            </li>
-          </ul>
-
-        </section>
-
-      </div>
-    );
-  }
-}
-
-DesignDocInfo.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  showLoadError: PropTypes.bool.isRequired,
-  viewIndex: PropTypes.object,
-  designDocName: PropTypes.string.isRequired,
-  stopRefresh: PropTypes.func.isRequired,
-  fetchDesignDocInfo: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js b/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js
deleted file mode 100644
index 98feedb..0000000
--- a/app/addons/documents/designdocinfo/components/DesignDocInfoContainer.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import { connect } from 'react-redux';
-import DesignDocInfo from './DesignDocInfo';
-import Actions from '../actions';
-
-const mapStateToProps = ({ designDocInfo }, ownProps) => {
-  return {
-    isLoading: designDocInfo.isLoading,
-    showLoadError: designDocInfo.showLoadError,
-    viewIndex: designDocInfo.viewIndex,
-    designDocInfo: ownProps.designDocInfo,
-    designDocName: ownProps.designDocName
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    fetchDesignDocInfo: (options) => {
-      dispatch(Actions.fetchDesignDocInfo(options));
-    },
-
-    stopRefresh: () => {
-      Actions.stopRefresh();
-    }
-  };
-};
-
-const DesignDocInfoContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(DesignDocInfo);
-
-export default DesignDocInfoContainer;
diff --git a/app/addons/documents/designdocinfo/reducers.js b/app/addons/documents/designdocinfo/reducers.js
deleted file mode 100644
index 0b34356..0000000
--- a/app/addons/documents/designdocinfo/reducers.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  isLoading: true,
-  showLoadError: false,
-  viewIndex: undefined
-};
-
-export default function designDocInfo (state = initialState, action) {
-  const { options } = action;
-
-  switch (action.type) {
-
-    case ActionTypes.DESIGN_FETCHING:
-      return {
-        ...state,
-        isLoading: true
-      };
-
-    case ActionTypes.DESIGN_FETCHING_FAILED:
-      return {
-        ...state,
-        isLoading: false,
-        showLoadError: true,
-      };
-
-    case ActionTypes.DESIGN_DOC_MONITOR:
-      return {
-        ...state,
-        isLoading: false,
-        showLoadError: false,
-        viewIndex: options.designDocInfo.get('view_index')
-      };
-
-    case ActionTypes.DESIGN_DOC_REFRESH:
-      return {
-        ...state,
-        showLoadError: false,
-        viewIndex: options.designDocInfo.get('view_index')
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js
deleted file mode 100644
index 317b678..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.actions.test.js
+++ /dev/null
@@ -1,169 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../../core/api";
-import Actions from "../actions";
-import Documents from "../../resources";
-import Databases from "../../../databases/base";
-import utils from "../../../../../test/mocha/testUtils";
-import sinon from "sinon";
-
-const { restore } = utils;
-
-describe('DocEditorActions', () => {
-  const database = new Databases.Model({ id: 'db1' });
-  const doc = new Documents.Doc({ _id: 'foo' }, { database: database });
-  let fakeXMLHttpRequest, fakeOpen;
-
-  beforeEach(() => {
-    fakeXMLHttpRequest = sinon.stub(global, 'XMLHttpRequest');
-    fakeOpen = sinon.stub();
-    fakeXMLHttpRequest.returns({
-      send: sinon.stub(),
-      setRequestHeader: sinon.stub(),
-      open: fakeOpen
-    });
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.addNotification);
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.urls);
-    fakeXMLHttpRequest.restore();
-  });
-
-  it('uploadAttachment handles filenames with special chars', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const params = {
-      rev: 'rev-num',
-      doc: doc,
-      files: [
-        {
-          name: 'file-#?&-123.txt',
-          length: 100
-        }
-      ]
-    };
-    const mockDispatch = () => {};
-
-    Actions.uploadAttachment(params)(mockDispatch);
-    sinon.assert.calledWithExactly(
-      fakeOpen,
-      'PUT',
-      'document/attachment/db1/foo/' + encodeURIComponent(params.files[0].name) + '/?rev=rev-num'
-    );
-  });
-
-  it('uploadAttachment shows error reason, if available', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const params = {
-      rev: 'rev-num',
-      doc: doc,
-      files: [
-        {
-          name: 'a_file.txt',
-          length: 100
-        }
-      ]
-    };
-    const mockDispatch = sinon.stub();
-
-    const fakeRequest = {
-      send: sinon.stub(),
-      setRequestHeader: sinon.stub(),
-      open: sinon.stub()
-    };
-    fakeXMLHttpRequest.returns(fakeRequest);
-
-    // Call uploadAttachment to attach the event handlers to fakeRequest
-    Actions.uploadAttachment(params)(mockDispatch);
-    expect(fakeRequest.onload).toBeDefined();
-    const mockError = {
-      error: 'bad_request',
-      reason: 'Invalid filename'
-    };
-    // Simulate an error response
-    fakeRequest.responseText = JSON.stringify(mockError);
-    fakeRequest.status = 400;
-    mockDispatch.resetHistory();
-    // Call the onload event
-    fakeRequest.onload();
-    // Verify it includes the error details
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        options: { error: `Error uploading file. Reason: ${mockError.reason}` },
-        type: 'FILE_UPLOAD_ERROR'
-      }
-    );
-
-    // Make sure it calls doesn't crash if response is not JSON
-    // Simulate an error response
-    fakeRequest.responseText = 'Forbidden';
-    fakeRequest.status = 403;
-    mockDispatch.resetHistory();
-    // Call the onload event
-    fakeRequest.onload();
-    // Verify it displays the error message, without any details
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        options: { error: `Error uploading file. ` },
-        type: 'FILE_UPLOAD_ERROR'
-      }
-    );
-  });
-
-  it('sets and resets the isSaving state', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    sinon.stub(FauxtonAPI, 'navigate');
-    sinon.stub(FauxtonAPI, 'urls').callsFake((p1, p2, p3, p4, p5, p6) => {
-      return [p1, p2, p3, p4, p5, p6].join('/');
-    });
-    const mockDispatch = sinon.stub();
-    const mockRes = {
-      then: cb => {
-        cb();
-        return {
-          fail: () => {},
-        };
-      }
-    };
-    const mockDoc = {
-      database: {
-        id: 'mock_db'
-      },
-      save: sinon.stub().returns(mockRes),
-      prettyJSON: sinon.stub(),
-    };
-    Actions.saveDoc(mockDoc, true, () => {}, '')(mockDispatch);
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        type: 'SAVING_DOCUMENT'
-      }
-    );
-    sinon.assert.calledWithExactly(
-      mockDispatch,
-      {
-        type: 'SAVING_DOCUMENT_COMPLETED'
-      }
-    );
-  });
-
-});
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
deleted file mode 100644
index 5602ebb..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.components.test.js
+++ /dev/null
@@ -1,372 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../../core/api';
-import Helpers from '../../../../helpers';
-import React from 'react';
-import sinon from 'sinon';
-import Documents from '../../resources';
-import AttachmentsPanelButton from '../components/AttachmentsPanelButton';
-import CloneDocModal from '../components/CloneDocModal';
-import DocEditorScreen from '../components/DocEditorScreen';
-import DocEditorContainer from '../components/DocEditorContainer';
-import Databases from '../../../databases/base';
-import databasesReducer from '../../../databases/reducers';
-import { mount } from 'enzyme';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import actiontypes from '../actiontypes';
-import docEditorReducer from '../reducers';
-
-import '../../base';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-const docJSON = {
-  _id: '_design/test-doc',
-  views: {
-    'test-view': {
-      map: '() => {};'
-    }
-  }
-};
-
-const docWithAttachmentsJSON = {
-  _id: '_design/test#doc',
-  _rev: '12345',
-  blah: {
-    whatever: {
-      something: 1
-    }
-  },
-  _attachments: {
-    "one%2F.png": {
-      "content-type": "images/png",
-      "length": 100
-    },
-    "one.zip": {
-      "content-type": "application/zip",
-      "length": 111100
-    }
-  }
-};
-
-const database = new Databases.Model({ id: 'a/special?db' });
-const defaultProps = {
-  isLoading: true,
-  isNewDoc: true,
-  isDbPartitioned: false,
-  database: database,
-  doc: new Documents.NewDoc(null, { database: database }),
-  conflictCount: 0,
-  saveDoc: () => {},
-
-  isCloneDocModalVisible: false,
-  showCloneDocModal: () => {},
-  hideCloneDocModal: () => {},
-  cloneDoc: () => {},
-
-  isDeleteDocModalVisible: false,
-  showDeleteDocModal: () => {},
-  hideDeleteDocModal: () => {},
-  deleteDoc: () => {},
-
-  isUploadModalVisible: false,
-  uploadInProgress: false,
-  uploadPercentage: 0,
-  uploadErrorMessage: '',
-  numFilesUploaded: 0,
-  showUploadModal: () => {},
-  hideUploadModal: () => {},
-  cancelUpload: () => {},
-  resetUploadModal: () => {},
-  uploadAttachment: () => {}
-};
-
-describe('DocEditorScreen', () => {
-
-  it('loading indicator appears on load', () => {
-    const el = mount(<DocEditorScreen {...defaultProps} />);
-    expect(el.find('.loading-lines').length).toBe(1);
-  });
-
-  it('new docs do not show the button row', () => {
-    const doc = new Documents.Doc(docJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.loading-lines').length).toBe(0);
-    expect(el.find('.icon-circle-arrow-up').length).toBe(0);
-    expect(el.find('.icon-repeat').length).toBe(0);
-    expect(el.find('.icon-trash').length).toBe(0);
-  });
-
-  it('view attachments button does not appear with no attachments', () => {
-    const doc = new Documents.Doc(docJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section').length).toBe(0);
-  });
-
-  it('view attachments button shows up when the doc has attachments', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section').length).toBe(1);
-  });
-
-  it('view attachments dropdown contains right number of docs', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    expect(el.find('.view-attachments-section .dropdown-menu li').length).toBe(2);
-  });
-
-  it('view attachments dropdown contains correct urls', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database}
-      doc={doc} />);
-
-    const $attachmentNode = el.find('.view-attachments-section .dropdown-menu li');
-    const attachmentURLactual = $attachmentNode.find('a').first().prop('href');
-
-    expect(attachmentURLactual).toBe('./a%2Fspecial%3Fdb/_design%2Ftest%23doc/one%252F.png');
-  });
-
-  it('auto-generated ID for new docs starts with colon for partitioned databases', () => {
-    const doc = { database: database, attributes: { _id: 'new_doc_id'} };
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      doc={doc} />);
-
-    const editor = el.find('CodeEditor');
-    expect(editor.prop('defaultCode')).toMatch(/":new_doc_id"/);
-  });
-
-  it('cancel button navigates to all docs by default', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      doc={doc} />);
-
-    const linkUrl = el.find('a.cancel-button').prop('href');
-    expect(linkUrl).toBe('#/database/' + encodeURIComponent(database.id) + '/_all_docs');
-  });
-
-  it('cancel button navigates to previousUrl', () => {
-    const doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={true}
-      isDbPartitioned={true}
-      database={database}
-      previousUrl='something/else'
-      doc={doc} />);
-
-    const linkUrl = el.find('a.cancel-button').prop('href');
-    expect(linkUrl).toBe('#/something/else');
-  });
-
-});
-
-describe('DocEditorContainer', () => {
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ docEditor: docEditorReducer, databases: databasesReducer }),
-    applyMiddleware(...middlewares)
-  );
-  const loadDummyDocAction = {
-    type: actiontypes.DOC_LOADED,
-    options: {
-      doc: {
-        get: () => {},
-        unset: () => {},
-        hasChanged: () => false,
-      }
-    }
-  };
-
-  afterEach(() => {
-    store.dispatch({
-      type: actiontypes.RESET_DOC
-    });
-  });
-
-  it('clicking Delete button shows the confirmation modal', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isDeleteDocModalVisible')).toBe(false);
-    wrapper.find('button[title="Delete"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isDeleteDocModalVisible')).toBe(true);
-  });
-
-  it('clicking Upload button shows the upload dialog', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isUploadModalVisible')).toBe(false);
-    wrapper.find('button[title="Upload Attachment"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isUploadModalVisible')).toBe(true);
-  });
-
-  it('clicking Clone button shows the clone doc dialog', () => {
-    store.dispatch(loadDummyDocAction);
-    const wrapper = mount(
-      <Provider store={store}>
-        <DocEditorContainer
-          isNewDoc={false}
-          database={database} />
-      </Provider>
-    );
-    expect(wrapper.find(DocEditorScreen).prop('isCloneDocModalVisible')).toBe(false);
-    wrapper.find('button[title="Clone Document"]').simulate('click');
-    expect(wrapper.find(DocEditorScreen).prop('isCloneDocModalVisible')).toBe(true);
-  });
-
-});
-
-
-describe("AttachmentsPanelButton", () => {
-  let doc;
-
-  beforeEach(() => {
-    doc = new Documents.Doc(docWithAttachmentsJSON, { database: database });
-  });
-
-  it('does not show up when loading', () => {
-    const el = mount(<AttachmentsPanelButton isLoading={true} doc={doc} />);
-    expect(el.find('.panel-button').length).toBe(0);
-  });
-
-  it('shows up after loading', () => {
-    const el = mount(<AttachmentsPanelButton isLoading={false} doc={doc} />);
-    expect(el.find('button.panel-button').length).toBe(1);
-  });
-});
-
-
-describe("Custom Extension Buttons", () => {
-  it('supports buttons', () => {
-    class CustomButton extends React.Component {
-      render() {
-        return (
-          <div>
-            <button>Oh no she di&apos;n&apos;t!</button>
-            <span id="testDatabaseName">{this.props.database.id}</span>
-          </div>
-        );
-      }
-    }
-
-    FauxtonAPI.registerExtension('DocEditor:icons', CustomButton);
-
-    const el = mount(<DocEditorScreen
-      {...defaultProps}
-      isLoading={false}
-      isNewDoc={false}
-      database={database} />);
-    expect(/Oh\sno\sshe\sdi'n't!/.test(el.html())).toBe(true);
-    // confirm the database name was also included
-    expect(el.find("#testDatabaseName").text()).toBe(database.id);
-  });
-});
-
-describe("CloneDocModal", () => {
-  const defaultProps = {
-    visible: false,
-    doc: { attributes: {_id: 'my_doc_id', hey: 'there'} },
-    database: {},
-    onSubmit: () => {},
-    hideCloneDocModal: () => {},
-    cloneDoc: () => {}
-  };
-
-  let getUUID;
-
-  afterEach(() => {
-    if (getUUID) {
-      getUUID.restore();
-    }
-  });
-
-  it('sets random UUID by default', () => {
-    const promise = FauxtonAPI.Promise.resolve({ uuids: ['abc9876'] });
-    getUUID = sinon.stub(Helpers, 'getUUID').returns(promise);
-    const el = mount(
-      <CloneDocModal {...defaultProps} />
-    );
-    el.setProps({visible: true});
-    return promise.then(() => {
-      expect(el.state().uuid).toBe('abc9876');
-    });
-  });
-
-  it('adds partition key from original doc to the auto-generated ID when it exists', () => {
-    const promise = FauxtonAPI.Promise.resolve({ uuids: ['abc9876'] });
-    getUUID = sinon.stub(Helpers, 'getUUID').returns(promise);
-    const el = mount(
-      <CloneDocModal
-        {...defaultProps}
-        doc={{ attributes: {_id: 'part1:my_doc_id', hey: 'there'} }}/>
-    );
-    el.setProps({visible: true});
-    return promise.then(() => {
-      expect(el.state().uuid).toBe('part1:abc9876');
-    });
-  });
-
-
-});
-
diff --git a/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js b/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js
deleted file mode 100644
index a775fa2..0000000
--- a/app/addons/documents/doc-editor/__tests__/doc-editor.reducers.test.js
+++ /dev/null
@@ -1,77 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../../core/api";
-import Documents from "../../resources";
-import ActionTypes from "../actiontypes";
-import reducer from "../reducers";
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-const doc = new Documents.Doc({id: 'foo'}, {database: 'bar'});
-
-describe('DocEditor Reducer', function () {
-
-  it('defines sensible defaults', function () {
-    const newState = reducer(undefined, { type: 'do_nothing'});
-
-    expect(newState.isLoading).toBe(true);
-    expect(newState.isSaving).toBe(false);
-    expect(newState.cloneDocModalVisible).toBe(false);
-    expect(newState.deleteDocModalVisible).toBe(false);
-    expect(newState.uploadModalVisible).toBe(false);
-    expect(newState.numFilesUploaded).toBe(0);
-    expect(newState.uploadInProgress).toBe(false);
-    expect(newState.uploadPercentage).toBe(0);
-  });
-
-  it('marks loading as complete after doc is loaded', function () {
-    const newState = reducer(undefined, {
-      type: ActionTypes.DOC_LOADED,
-      options: { doc: doc }
-    });
-    expect(newState.isLoading).toBe(false);
-  });
-
-  it('showCloneDocModal / hideCloneDocModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_CLONE_DOC_MODAL });
-    expect(newStateShow.cloneDocModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_CLONE_DOC_MODAL });
-    expect(newStateHide.cloneDocModalVisible).toBe(false);
-  });
-
-  it('showDeleteDocModal / hideDeleteDocModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL });
-    expect(newStateShow.deleteDocModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL });
-    expect(newStateHide.deleteDocModalVisible).toBe(false);
-  });
-
-  it('showUploadModal / hideUploadModal', function () {
-    const newStateShow = reducer(undefined, { type: ActionTypes.SHOW_UPLOAD_MODAL });
-    expect(newStateShow.uploadModalVisible).toBe(true);
-
-    const newStateHide = reducer(undefined, { type: ActionTypes.HIDE_UPLOAD_MODAL });
-    expect(newStateHide.uploadModalVisible).toBe(false);
-  });
-
-  it('saving document in-progress / completed', function () {
-    const newStateSaving = reducer(undefined, { type: ActionTypes.SAVING_DOCUMENT });
-    expect(newStateSaving.isSaving).toBe(true);
-
-    const newStateSavingDone = reducer(undefined, { type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-    expect(newStateSavingDone.isSaving).toBe(false);
-  });
-
-});
diff --git a/app/addons/documents/doc-editor/actions.js b/app/addons/documents/doc-editor/actions.js
deleted file mode 100644
index 2132506..0000000
--- a/app/addons/documents/doc-editor/actions.js
+++ /dev/null
@@ -1,281 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import { deleteRequest } from '../../../core/ajax';
-import ActionTypes from './actiontypes';
-
-var currentUploadHttpRequest;
-
-const dispatchInitDocEditor = (params) => {
-  FauxtonAPI.reduxDispatch(initDocEditor(params));
-};
-
-const initDocEditor = (params) => (dispatch) => {
-  const doc = params.doc;
-
-  // ensure a clean slate
-  dispatch({ type: ActionTypes.RESET_DOC });
-
-  doc.fetch().then(function () {
-    dispatch({
-      type: ActionTypes.DOC_LOADED,
-      options: {
-        doc: doc
-      }
-    });
-
-    if (params.onLoaded) {
-      params.onLoaded();
-    }
-  }, function (xhr) {
-    if (xhr.status === 404) {
-      errorNotification(`The ${doc.id} document does not exist.`);
-    }
-
-    FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', params.database.id, ''));
-  });
-};
-
-const saveDoc = (doc, isValidDoc, onSave, navigateToUrl) => dispatch => {
-  if (isValidDoc) {
-    dispatch({ type: ActionTypes.SAVING_DOCUMENT });
-
-    doc.save().then(function () {
-      onSave(doc.prettyJSON());
-      dispatch({ type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-      FauxtonAPI.addNotification({
-        msg: 'Document saved successfully.',
-        type: 'success',
-        clear: true
-      });
-      if (navigateToUrl) {
-        FauxtonAPI.navigate(navigateToUrl, {trigger: true});
-      } else {
-        FauxtonAPI.navigate('#/' + FauxtonAPI.urls('allDocs', 'app',  FauxtonAPI.url.encode(doc.database.id)), {trigger: true});
-      }
-    }).fail(function (xhr) {
-      dispatch({ type: ActionTypes.SAVING_DOCUMENT_COMPLETED });
-      FauxtonAPI.addNotification({
-        msg: 'Save failed: ' + JSON.parse(xhr.responseText).reason,
-        type: 'error',
-        fade: false,
-        clear: true
-      });
-    });
-
-  } else if (doc.validationError && doc.validationError === 'Cannot change a documents id.') {
-    errorNotification('You cannot edit the _id of an existing document. Try this: Click \'Clone Document\', then change the _id on the clone before saving.');
-    delete doc.validationError;
-  } else {
-    errorNotification('Please fix the JSON errors and try saving again.');
-  }
-};
-
-const showDeleteDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL });
-};
-
-const hideDeleteDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL });
-};
-
-const deleteDoc = (doc) => {
-  const databaseName = doc.database.safeID();
-  const query = '?rev=' + doc.get('_rev');
-  const url = FauxtonAPI.urls('document', 'server', databaseName, doc.safeID(), query);
-  deleteRequest(url).then(res => {
-    if (res.error) {
-      throw new Error(res.reason || res.error);
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Your document has been successfully deleted.',
-      type: 'success',
-      clear: true
-    });
-    FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', databaseName, ''));
-  }).catch(err => {
-    FauxtonAPI.addNotification({
-      msg: 'Failed to delete your document. Reason: ' + err.message,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const showCloneDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_CLONE_DOC_MODAL });
-};
-
-const hideCloneDocModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_CLONE_DOC_MODAL });
-};
-
-const cloneDoc = (database, doc, newId) => {
-  hideCloneDocModal();
-
-  doc.copy(newId).then(() => {
-    const url = FauxtonAPI.urls('document', 'app', database.safeID(), encodeURIComponent(newId));
-    FauxtonAPI.navigate(url, { trigger: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'Document has been duplicated.'
-    });
-
-  }, (error) => {
-    const errorMsg = `Could not duplicate document, reason: ${error.responseText}.`;
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: 'error'
-    });
-  });
-};
-
-const showUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_UPLOAD_MODAL });
-};
-
-const hideUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_UPLOAD_MODAL });
-};
-
-const uploadAttachment = (params) => (dispatch) => {
-  if (params.files.length === 0) {
-    dispatch({
-      type: ActionTypes.FILE_UPLOAD_ERROR,
-      options: {
-        error: 'Please select a file to be uploaded.'
-      }
-    });
-    return;
-  }
-  dispatch({ type: ActionTypes.START_FILE_UPLOAD });
-
-  const query = '?rev=' + params.rev;
-  const db = params.doc.getDatabase().safeID();
-  const docId = params.doc.safeID();
-  const file = params.files[0];
-  const url = FauxtonAPI.urls('document', 'attachment', db, docId, encodeURIComponent(file.name), query);
-
-  const onProgress = (evt) => {
-    if (evt.lengthComputable) {
-      const percentComplete = evt.loaded / evt.total * 100;
-      dispatch({
-        type: ActionTypes.SET_FILE_UPLOAD_PERCENTAGE,
-        options: {
-          percent: percentComplete
-        }
-      });
-    }
-  };
-  const onSuccess = (doc) => {
-    // re-initialize the document editor. Only announce it's been updated when
-    dispatch(initDocEditor({
-      doc: doc,
-      onLoaded: () => {
-        dispatch({ type: ActionTypes.FILE_UPLOAD_SUCCESS });
-        FauxtonAPI.addNotification({
-          msg: 'Document saved successfully.',
-          type: 'success',
-          clear: true
-        });
-      }
-    }));
-  };
-  const onError = (msg) => {
-    dispatch({
-      type: ActionTypes.FILE_UPLOAD_ERROR,
-      options: {
-        error: msg
-      }
-    });
-  };
-  const httpRequest = new XMLHttpRequest();
-  currentUploadHttpRequest = httpRequest;
-  httpRequest.withCredentials = true;
-  if (httpRequest.upload) {
-    httpRequest.upload.onprogress = onProgress;
-  }
-  httpRequest.onloadend = () => {
-    currentUploadHttpRequest = undefined;
-  };
-  httpRequest.onerror = () => {
-    onError('Error uploading file');
-  };
-  httpRequest.onload = () => {
-    if (httpRequest.status >= 200 && httpRequest.status < 300) {
-      onSuccess(params.doc);
-    } else {
-      let errorMsg = 'Error uploading file. ';
-      try {
-        if (httpRequest.responseText) {
-          const json = JSON.parse(httpRequest.responseText);
-          if (json.error) {
-            errorMsg += 'Reason: ' + (json.reason || json.error);
-          }
-        }
-      } catch (err) {
-        //ignore parsing error
-      }
-      onError(errorMsg);
-    }
-  };
-  httpRequest.open('PUT', url);
-  httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
-  httpRequest.setRequestHeader('Content-Type', file.type || `application/octet-stream`);
-  httpRequest.setRequestHeader('Accept', 'application/json');
-  httpRequest.send(file);
-};
-
-const cancelUpload = () => {
-  if (currentUploadHttpRequest) {
-    currentUploadHttpRequest.abort();
-  }
-};
-
-const resetUploadModal = () => (dispatch) => {
-  dispatch({ type: ActionTypes.RESET_UPLOAD_MODAL });
-};
-
-
-// helpers
-
-function errorNotification (msg) {
-  FauxtonAPI.addNotification({
-    msg: msg,
-    type: 'error',
-    clear: true
-  });
-}
-
-export default {
-  dispatchInitDocEditor,
-  initDocEditor,
-  saveDoc,
-
-  // clone doc
-  showCloneDocModal,
-  hideCloneDocModal,
-  cloneDoc,
-
-  // delete doc
-  showDeleteDocModal,
-  hideDeleteDocModal,
-  deleteDoc,
-
-  // upload modal
-  showUploadModal,
-  hideUploadModal,
-  uploadAttachment,
-  cancelUpload,
-  resetUploadModal
-};
diff --git a/app/addons/documents/doc-editor/actiontypes.js b/app/addons/documents/doc-editor/actiontypes.js
deleted file mode 100644
index c9191ba..0000000
--- a/app/addons/documents/doc-editor/actiontypes.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed 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.
-
-export default {
-  RESET_DOC: 'RESET_DOC',
-  DOC_LOADED: 'DOC_LOADED',
-  SHOW_CLONE_DOC_MODAL: 'SHOW_CLONE_DOC_MODAL',
-  HIDE_CLONE_DOC_MODAL: 'HIDE_CLONE_DOC_MODAL',
-  SHOW_DELETE_DOC_CONFIRMATION_MODAL: 'SHOW_DELETE_DOC_CONFIRMATION_MODAL',
-  HIDE_DELETE_DOC_CONFIRMATION_MODAL: 'HIDE_DELETE_DOC_CONFIRMATION_MODAL',
-  SHOW_UPLOAD_MODAL: 'SHOW_UPLOAD_MODAL',
-  HIDE_UPLOAD_MODAL: 'HIDE_UPLOAD_MODAL',
-  RESET_UPLOAD_MODAL: 'RESET_UPLOAD_MODAL',
-  SHOW_STRING_EDIT_MODAL: 'SHOW_STRING_EDIT_MODAL',
-  HIDE_STRING_EDIT_MODAL: 'HIDE_STRING_EDIT_MODAL',
-  FILE_UPLOAD_SUCCESS: 'FILE_UPLOAD_SUCCESS',
-  FILE_UPLOAD_ERROR: 'FILE_UPLOAD_ERROR',
-  START_FILE_UPLOAD: 'START_FILE_UPLOAD',
-  SET_FILE_UPLOAD_PERCENTAGE: 'SET_FILE_UPLOAD_PERCENTAGE',
-  SAVING_DOCUMENT: 'SAVING_DOCUMENT',
-  SAVING_DOCUMENT_COMPLETED: 'SAVING_DOCUMENT_COMPLETED',
-};
diff --git a/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js b/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js
deleted file mode 100644
index 36b683e..0000000
--- a/app/addons/documents/doc-editor/components/AttachmentsPanelButton.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Dropdown, MenuItem } from 'react-bootstrap';
-import Helpers from '../../../../helpers';
-
-
-export default class AttachmentsPanelButton extends React.Component {
-  static propTypes = {
-    isLoading: PropTypes.bool.isRequired,
-    disabled: PropTypes.bool,
-    doc: PropTypes.object
-  };
-
-  static defaultProps = {
-    isLoading: true,
-    disabled: false,
-    doc: {}
-  };
-
-  getAttachmentList = () => {
-    const db = encodeURIComponent(this.props.doc.database.get('id'));
-    const doc = encodeURIComponent(this.props.doc.get('_id'));
-
-    return _.map(this.props.doc.get('_attachments'), (item, filename) => {
-      const url = FauxtonAPI.urls('document', 'attachment', db, doc, encodeURIComponent(filename));
-      return (
-        <MenuItem key={filename} href={url} target="_blank" data-bypass="true">
-          <strong>{filename}</strong>
-          <span className="attachment-delimiter">-</span>
-          <span>{item.content_type}{item.content_type ? ', ' : ''}{Helpers.formatSize(item.length)}</span>
-        </MenuItem>
-      );
-    });
-  };
-
-  render() {
-    if (this.props.isLoading || !this.props.doc.get('_attachments')) {
-      return false;
-    }
-
-    return (
-      <div className="panel-section view-attachments-section btn-group">
-        <Dropdown id="view-attachments-menu" disabled={this.props.disabled} >
-          <Dropdown.Toggle noCaret className="panel-button dropdown-toggle btn" data-bypass="true">
-            <i className="icon icon-paper-clip"></i>
-            <span className="button-text">View Attachments</span>
-            <span className="caret"></span>
-          </Dropdown.Toggle>
-          <Dropdown.Menu>
-            {this.getAttachmentList()}
-          </Dropdown.Menu>
-        </Dropdown>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/CloneDocModal.js b/app/addons/documents/doc-editor/components/CloneDocModal.js
deleted file mode 100644
index 7ae7968..0000000
--- a/app/addons/documents/doc-editor/components/CloneDocModal.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Modal } from 'react-bootstrap';
-import Helpers from '../../../../helpers';
-
-
-export default class CloneDocModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    database: PropTypes.object.isRequired,
-    onSubmit: PropTypes.func.isRequired,
-    hideCloneDocModal: PropTypes.func.isRequired,
-    cloneDoc: PropTypes.func.isRequired
-  };
-
-  state = {
-    uuid: null
-  };
-
-  cloneDoc = () => {
-    if (this.props.onSubmit) {
-      this.props.onSubmit();
-    }
-
-    this.props.cloneDoc(this.props.database, this.props.doc, this.state.uuid);
-  };
-
-  componentDidUpdate() {
-    if (this.state.uuid === null) {
-      Helpers.getUUID().then((res) => {
-        if (res.uuids) {
-          const newState = { uuid: res.uuids[0] };
-          const idx = this.props.doc ? this.props.doc.attributes._id.indexOf(':') : -1;
-          if (idx >= 0) {
-            const partitionKey = this.props.doc.attributes._id.substring(0, idx);
-            newState.uuid = partitionKey + ':' + newState.uuid;
-          }
-          this.setState(newState);
-        }
-      }).catch(() => {});
-    }
-  }
-
-  closeModal = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.hideCloneDocModal();
-  };
-
-  docIDChange = (e) => {
-    this.setState({ uuid: e.target.value });
-  };
-
-  render() {
-    if (this.state.uuid === null) {
-      return false;
-    }
-
-    return (
-      <Modal dialogClassName="clone-doc-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Clone Document</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <form className="form" onSubmit={(e) => { e.preventDefault(); this.cloneDoc(); }}>
-            <p>
-              Document cloning copies the saved version of the document. Unsaved document changes will be discarded.
-            </p>
-            <p>
-              You can modify the following generated ID for your new document.
-            </p>
-            <input ref={node => this.newDocId = node} type="text" autoFocus={true} className="input-block-level"
-              onChange={this.docIDChange} value={this.state.uuid} />
-          </form>
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" data-bypass="true" className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          <button className="btn btn-primary save" onClick={this.cloneDoc}>
-            <i className="icon-repeat"></i> Clone Document
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/DocEditorContainer.js b/app/addons/documents/doc-editor/components/DocEditorContainer.js
deleted file mode 100644
index 4b3d8f3..0000000
--- a/app/addons/documents/doc-editor/components/DocEditorContainer.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import Actions from '../actions';
-import DocEditorScreen from './DocEditorScreen';
-
-const mapStateToProps = ({ docEditor, databases }, ownProps) => {
-  return {
-    isLoading: docEditor.isLoading || databases.isLoadingDbInfo,
-    isSaving: docEditor.isSaving,
-    isNewDoc: ownProps.isNewDoc,
-    isDbPartitioned: databases.isDbPartitioned,
-    doc: docEditor.doc,
-    database: ownProps.database,
-    conflictCount: docEditor.docConflictCount,
-    previousUrl: ownProps.previousUrl,
-    isCloneDocModalVisible: docEditor.cloneDocModalVisible,
-
-    isDeleteDocModalVisible: docEditor.deleteDocModalVisible,
-
-    isUploadModalVisible: docEditor.uploadModalVisible,
-    uploadInProgress: docEditor.uploadInProgress,
-    uploadPercentage: docEditor.uploadPercentage,
-    uploadErrorMessage: docEditor.uploadErrorMessage,
-    numFilesUploaded: docEditor.numFilesUploaded
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    saveDoc: (doc, isValidDoc, onSave, navigateToUrl) => {
-      dispatch(Actions.saveDoc(doc, isValidDoc, onSave, navigateToUrl));
-    },
-
-    showCloneDocModal: () => {
-      dispatch(Actions.showCloneDocModal());
-    },
-    hideCloneDocModal: () => {
-      dispatch(Actions.hideCloneDocModal());
-    },
-    cloneDoc: (database, doc, newId) => {
-      Actions.cloneDoc(database, doc, newId);
-    },
-
-    showDeleteDocModal: () => {
-      dispatch(Actions.showDeleteDocModal());
-    },
-    hideDeleteDocModal: () => {
-      dispatch(Actions.hideDeleteDocModal());
-    },
-    deleteDoc: (doc) => {
-      Actions.deleteDoc(doc);
-    },
-
-    showUploadModal: () => {
-      dispatch(Actions.showUploadModal());
-    },
-    hideUploadModal: () => {
-      dispatch(Actions.hideUploadModal());
-    },
-    cancelUpload: () => {
-      Actions.cancelUpload();
-    },
-    resetUploadModal: () => {
-      dispatch(Actions.resetUploadModal());
-    },
-    uploadAttachment: (params) => {
-      dispatch(Actions.uploadAttachment(params));
-    }
-  };
-};
-
-const DocEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(DocEditorScreen);
-
-export default DocEditorContainer;
diff --git a/app/addons/documents/doc-editor/components/DocEditorScreen.js b/app/addons/documents/doc-editor/components/DocEditorScreen.js
deleted file mode 100644
index 448e4c7..0000000
--- a/app/addons/documents/doc-editor/components/DocEditorScreen.js
+++ /dev/null
@@ -1,249 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-import FauxtonComponents from '../../../fauxton/components';
-import GeneralComponents from '../../../components/react-components';
-import AttachmentsPanelButton from './AttachmentsPanelButton';
-import CloneDocModal from './CloneDocModal';
-import PanelButton from './PanelButton';
-import UploadModal from './UploadModal';
-
-
-export default class DocEditorScreen extends React.Component {
-  static defaultProps = {
-    database: {},
-    isNewDoc: false
-  };
-
-  static propTypes = {
-    isLoading: PropTypes.bool.isRequired,
-    isSaving: PropTypes.bool.isRequired,
-    isNewDoc: PropTypes.bool.isRequired,
-    isDbPartitioned: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    conflictCount: PropTypes.number.isRequired,
-    previousUrl: PropTypes.string,
-    saveDoc: PropTypes.func.isRequired,
-
-    isCloneDocModalVisible: PropTypes.bool.isRequired,
-    database: PropTypes.object,
-    showCloneDocModal: PropTypes.func.isRequired,
-    hideCloneDocModal: PropTypes.func.isRequired,
-    cloneDoc: PropTypes.func.isRequired,
-
-    isDeleteDocModalVisible: PropTypes.bool.isRequired,
-    showDeleteDocModal: PropTypes.func.isRequired,
-    hideDeleteDocModal: PropTypes.func.isRequired,
-    deleteDoc: PropTypes.func.isRequired,
-
-    isUploadModalVisible: PropTypes.bool.isRequired,
-    uploadInProgress: PropTypes.bool.isRequired,
-    uploadPercentage: PropTypes.number.isRequired,
-    uploadErrorMessage: PropTypes.string,
-    numFilesUploaded: PropTypes.number.isRequired,
-    showUploadModal: PropTypes.func.isRequired,
-    hideUploadModal: PropTypes.func.isRequired,
-    cancelUpload: PropTypes.func.isRequired,
-    resetUploadModal: PropTypes.func.isRequired,
-    uploadAttachment: PropTypes.func.isRequired
-  }
-
-  getCodeEditor = () => {
-    if (this.props.isLoading) {
-      return (<GeneralComponents.LoadLines />);
-    }
-
-    const docContent = this.props.doc.attributes;
-    if (this.props.isDbPartitioned) {
-      if (!docContent._id.includes(':') && !docContent._id.startsWith('_design')) {
-        docContent._id = ':' + docContent._id;
-      }
-    }
-    const code = JSON.stringify(docContent, null, '  ');
-    const editorCommands = [{
-      name: 'save',
-      bindKey: { win: 'Ctrl-S', mac: 'Ctrl-S' },
-      exec: this.saveDoc
-    }];
-
-    return (
-      <GeneralComponents.CodeEditor
-        id="doc-editor"
-        ref={node => this.docEditor = node}
-        defaultCode={code}
-        disabled={this.props.isSaving}
-        mode="json"
-        autoFocus={true}
-        editorCommands={editorCommands}
-        notifyUnsavedChanges={true}
-        stringEditModalEnabled={true} />
-    );
-  };
-
-  UNSAFE_componentWillUpdate(nextProps) {
-    // Update the editor whenever a file is uploaded, a doc is cloned, or a new doc is loaded
-    if (this.props.numFilesUploaded !== nextProps.numFilesUploaded ||
-        this.props.doc && this.props.doc.hasChanged() ||
-        (this.props.doc && nextProps.doc && this.props.doc.id !== nextProps.doc.id)) {
-      const editor = this.getEditor();
-      if (editor) {
-        this.getEditor().setValue(JSON.stringify(nextProps.doc.attributes, null, '  '));
-      }
-      this.onSaveComplete();
-    }
-  }
-
-  saveDoc = () => {
-    this.props.saveDoc(this.props.doc, this.checkDocIsValid(), this.onSaveComplete, this.props.previousUrl);
-  };
-
-  onSaveComplete = () => {
-    this.getEditor().clearChanges();
-  };
-
-  hideDeleteDocModal = () => {
-    this.props.hideDeleteDocModal();
-  };
-
-  deleteDoc = () => {
-    this.props.hideDeleteDocModal();
-    this.props.deleteDoc(this.props.doc);
-  };
-
-  getEditor = () => {
-    return (this.docEditor) ? this.docEditor.getEditor() : null;
-  };
-
-  checkDocIsValid = () => {
-    if (this.getEditor().hasErrors()) {
-      return false;
-    }
-    const json = JSON.parse(this.getEditor().getValue());
-    this.props.doc.clear().set(json, { validate: true });
-
-    return !this.props.doc.validationError;
-  };
-
-  clearChanges = () => {
-    if (this.docEditor) {
-      this.docEditor.clearChanges();
-    }
-  };
-
-  getExtensionIcons = () => {
-    var extensions = FauxtonAPI.getExtensions('DocEditor:icons');
-    return _.map(extensions, (Extension, i) => {
-      return (<Extension doc={this.props.doc} key={i} database={this.props.database} />);
-    });
-  };
-
-  getButtonRow = () => {
-    if (this.props.isNewDoc || this.props.doc === null) {
-      return false;
-    }
-    return (
-      <div>
-        <AttachmentsPanelButton
-          doc={this.props.doc}
-          isLoading={this.props.isLoading}
-          disabled={this.props.isSaving} />
-        <div className="doc-editor-extension-icons">{this.getExtensionIcons()}</div>
-
-        {this.props.conflictCount ? <PanelButton
-          title={`Conflicts (${this.props.conflictCount})`}
-          iconClass="icon-columns"
-          className="conflicts"
-          disabled={this.props.isSaving}
-          onClick={() => { FauxtonAPI.navigate(FauxtonAPI.urls('revision-browser', 'app', this.props.database.safeID(), this.props.doc.id));}}/> : null}
-
-        <PanelButton className="upload"
-          title="Upload Attachment"
-          iconClass="icon-circle-arrow-up"
-          disabled={this.props.isSaving}
-          onClick={this.props.showUploadModal} />
-        <PanelButton title="Clone Document"
-          iconClass="icon-repeat"
-          disabled={this.props.isSaving}
-          onClick={this.props.showCloneDocModal} />
-        <PanelButton title="Delete"
-          iconClass="icon-trash"
-          disabled={this.props.isSaving}
-          onClick={this.props.showDeleteDocModal} />
-      </div>
-    );
-  };
-
-  render() {
-    const saveButtonLabel = this.props.isSaving ?
-      'Saving...' :
-      (this.props.isNewDoc ? 'Create Document' : 'Save Changes');
-    const endpoint = this.props.previousUrl ?
-      this.props.previousUrl :
-      FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(this.props.database.id));
-    let cancelBtClass = `js-back cancel-button ${this.props.isSaving ? 'cancel-button--disabled' : ''}`;
-    return (
-      <div>
-        <div id="doc-editor-actions-panel">
-          <div className="doc-actions-left">
-            <button disabled={this.props.isSaving} className="save-doc btn btn-primary save" type="button" onClick={this.saveDoc}>
-              <i className="icon fonticon-ok-circled"></i> {saveButtonLabel}
-            </button>
-            <div>
-              <a href={this.props.isSaving ? undefined : `#/${endpoint}`}
-                className={cancelBtClass}>Cancel</a>
-            </div>
-          </div>
-          <div className="alignRight">
-            {this.getButtonRow()}
-          </div>
-        </div>
-
-        <div className="code-region">
-          <div className="bgEditorGutter"></div>
-          <div id="editor-container" className="doc-code">{this.getCodeEditor()}</div>
-
-        </div>
-
-        <UploadModal
-          ref={node => this.uploadModal = node}
-          visible={this.props.isUploadModalVisible}
-          doc={this.props.doc}
-          inProgress={this.props.uploadInProgress}
-          uploadPercentage={this.props.uploadPercentage}
-          errorMessage={this.props.uploadErrorMessage}
-          cancelUpload={this.props.cancelUpload}
-          hideUploadModal={this.props.hideUploadModal}
-          resetUploadModal={this.props.resetUploadModal}
-          uploadAttachment={this.props.uploadAttachment}/>
-        <CloneDocModal
-          doc={this.props.doc}
-          database={this.props.database}
-          visible={this.props.isCloneDocModalVisible}
-          onSubmit={this.clearChanges}
-          hideCloneDocModal={this.props.hideCloneDocModal}
-          cloneDoc={this.props.cloneDoc}/>
-        <span id='hey'>bb</span>
-        <FauxtonComponents.ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.isDeleteDocModalVisible}
-          text="Are you sure you want to delete this document?"
-          onClose={this.hideDeleteDocModal}
-          onSubmit={this.deleteDoc}
-          successButtonLabel="Delete Document" />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/PanelButton.js b/app/addons/documents/doc-editor/components/PanelButton.js
deleted file mode 100644
index 682f9df..0000000
--- a/app/addons/documents/doc-editor/components/PanelButton.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PanelButton extends React.Component {
-  static propTypes = {
-    title: PropTypes.string.isRequired,
-    onClick: PropTypes.func.isRequired,
-    className: PropTypes.string,
-    disabled: PropTypes.bool
-  };
-
-  static defaultProps = {
-    title: '',
-    iconClass: '',
-    onClick: () => { },
-    className: '',
-    disabled: false
-  };
-
-  render() {
-    var iconClasses = 'icon ' + this.props.iconClass;
-    return (
-      <div className="panel-section">
-        <button className={`panel-button ${this.props.className}`}
-          title={this.props.title}
-          onClick={this.props.onClick}
-          disabled={this.props.disabled} >
-
-          <i className={iconClasses}></i>
-          <span>{this.props.title}</span>
-        </button>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/components/UploadModal.js b/app/addons/documents/doc-editor/components/UploadModal.js
deleted file mode 100644
index eb907f5..0000000
--- a/app/addons/documents/doc-editor/components/UploadModal.js
+++ /dev/null
@@ -1,95 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import { Modal } from 'react-bootstrap';
-
-
-export default class UploadModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    doc: PropTypes.object,
-    inProgress: PropTypes.bool.isRequired,
-    uploadPercentage: PropTypes.number.isRequired,
-    errorMessage: PropTypes.string,
-    cancelUpload: PropTypes.func.isRequired,
-    hideUploadModal: PropTypes.func.isRequired,
-    resetUploadModal: PropTypes.func.isRequired,
-    uploadAttachment: PropTypes.func.isRequired
-  };
-
-  closeModal = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-
-    if (this.props.inProgress) {
-      this.props.cancelUpload();
-    }
-    this.props.hideUploadModal();
-    this.props.resetUploadModal();
-  };
-
-  upload = () => {
-    this.props.uploadAttachment({
-      doc: this.props.doc,
-      rev: this.props.doc.get('_rev'),
-      files: this.attachments.files
-    });
-  };
-
-  render() {
-    let errorClasses = 'alert alert-error';
-    if (this.props.errorMessage === '') {
-      errorClasses += ' hide';
-    }
-    let loadIndicatorClasses = 'progress progress-info';
-    let disabledAttribute = {disabled: 'disabled'};
-    if (!this.props.inProgress) {
-      loadIndicatorClasses += ' hide';
-      disabledAttribute = {};
-    }
-
-    return (
-      <Modal dialogClassName="upload-file-modal" show={this.props.visible} onHide={this.closeModal}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>Upload Attachment</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <div className={errorClasses}>{this.props.errorMessage}</div>
-          <div>
-            <form ref={node => this.uploadForm = node} className="form">
-              <p>
-                Select a file to upload as an attachment to this document. Uploading a file saves the document as a new
-                revision.
-              </p>
-              <input ref={el => this.attachments = el} type="file" name="_attachments" {...disabledAttribute}/>
-              <br />
-            </form>
-
-            <div className={loadIndicatorClasses}>
-              <div className="bar" style={{ width: this.props.uploadPercentage + '%'}}></div>
-            </div>
-          </div>
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" data-bypass="true" className="cancel-link" onClick={this.closeModal}>Cancel</a>
-          <button href="#" id="upload-btn" data-bypass="true" className="btn btn-primary save" onClick={this.upload} {...disabledAttribute}>
-            <i className="icon icon-upload" /> Upload Attachment
-          </button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/doc-editor/reducers.js b/app/addons/documents/doc-editor/reducers.js
deleted file mode 100644
index 694c0bb..0000000
--- a/app/addons/documents/doc-editor/reducers.js
+++ /dev/null
@@ -1,137 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from "./actiontypes";
-
-const initialState = {
-  doc: null,
-  isLoading: true,
-  isSaving: false,
-  cloneDocModalVisible: false,
-  deleteDocModalVisible: false,
-  uploadModalVisible: false,
-
-  numFilesUploaded: 0,
-  uploadErrorMessage: '',
-  uploadInProgress: false,
-  uploadPercentage: 0,
-
-  docConflictCount: 0
-};
-
-export default function docEditor (state = initialState, action) {
-  const { options, type } = action;
-  switch (type) {
-
-    case ActionTypes.RESET_DOC:
-      return {
-        ...initialState
-      };
-
-    case ActionTypes.DOC_LOADED:
-      const conflictCount = options.doc.get('_conflicts') ? options.doc.get('_conflicts').length : 0;
-      options.doc.unset('_conflicts');
-      return {
-        ...state,
-        isLoading: false,
-        doc: options.doc,
-        docConflictCount: conflictCount,
-      };
-
-    case ActionTypes.SHOW_CLONE_DOC_MODAL:
-      return {
-        ...state,
-        cloneDocModalVisible: true
-      };
-
-    case ActionTypes.HIDE_CLONE_DOC_MODAL:
-      return {
-        ...state,
-        cloneDocModalVisible: false
-      };
-
-    case ActionTypes.SHOW_DELETE_DOC_CONFIRMATION_MODAL:
-      return {
-        ...state,
-        deleteDocModalVisible: true
-      };
-
-    case ActionTypes.HIDE_DELETE_DOC_CONFIRMATION_MODAL:
-      return {
-        ...state,
-        deleteDocModalVisible: false
-      };
-
-    case ActionTypes.SHOW_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadModalVisible: true
-      };
-
-    case ActionTypes.HIDE_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadModalVisible: false
-      };
-
-    case ActionTypes.FILE_UPLOAD_SUCCESS:
-      return {
-        ...state,
-        numFilesUploaded: state.numFilesUploaded + 1
-      };
-
-    case ActionTypes.FILE_UPLOAD_ERROR:
-      return {
-        ...state,
-        uploadInProgress: false,
-        uploadPercentage: 0,
-        uploadErrorMessage: options.error
-      };
-
-    case ActionTypes.RESET_UPLOAD_MODAL:
-      return {
-        ...state,
-        uploadInProgress: false,
-        uploadPercentage: 0,
-        uploadErrorMessage: ''
-      };
-
-    case ActionTypes.START_FILE_UPLOAD:
-      return {
-        ...state,
-        uploadInProgress: true,
-        uploadPercentage: 0,
-        fileUploadErrorMsg: ''
-      };
-
-    case ActionTypes.SET_FILE_UPLOAD_PERCENTAGE:
-      return {
-        ...state,
-        uploadPercentage: options.percent
-      };
-
-    case ActionTypes.SAVING_DOCUMENT:
-      return {
-        ...state,
-        isSaving: true,
-      };
-
-    case ActionTypes.SAVING_DOCUMENT_COMPLETED:
-      return {
-        ...state,
-        isSaving: false,
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/header/header.js b/app/addons/documents/header/header.js
deleted file mode 100644
index c481e23..0000000
--- a/app/addons/documents/header/header.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import Constants from '../constants';
-import { Button, ButtonGroup } from 'react-bootstrap';
-
-export default class BulkDocumentHeaderController extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const {
-      selectedLayout,
-      docType,
-      queryOptionsParams,
-      fetchUrl
-    } = this.props;
-
-    let metadata, json, table;
-    if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-      metadata = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.METADATA)}
-      >
-          Metadata
-      </Button>;
-    } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      return null;
-    }
-
-    // Reduce doesn't allow for include_docs=true, so we'll hide the JSON and table modes
-    // since they force 'include_docs=true' when reduce is checked in the query options panel.
-    const isAllDocsQuery = fetchUrl && fetchUrl.includes('/_all_docs');
-    const isMangoQuery = docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-    if (isAllDocsQuery || isMangoQuery || (!queryOptionsParams.reduce)) {
-      table = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.TABLE ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.TABLE)}
-      >
-        <i className="fonticon-table" /> Table
-      </Button>;
-
-      json = <Button
-        className={selectedLayout === Constants.LAYOUT_ORIENTATION.JSON ? 'active' : ''}
-        onClick={this.toggleLayout.bind(this, Constants.LAYOUT_ORIENTATION.JSON)}
-      >
-        <i className="fonticon-json" /> JSON
-      </Button>;
-    }
-
-    return (
-      <div className="alternative-header">
-        <ButtonGroup className="two-sides-toggle-button">
-          {table}
-          {metadata}
-          {json}
-        </ButtonGroup>
-      </div>
-    );
-  }
-
-  toggleLayout (newLayout) {
-    const {
-      changeLayout,
-      selectedLayout,
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      queryOptionsToggleIncludeDocs
-    } = this.props;
-
-    if (newLayout !== selectedLayout) {
-      // change our layout to JSON, Table, or Metadata
-      changeLayout(newLayout);
-
-      queryOptionsParams.include_docs = newLayout !== Constants.LAYOUT_ORIENTATION.METADATA;
-      if (newLayout === Constants.LAYOUT_ORIENTATION.TABLE) {
-        fetchParams.conflicts = true;
-      } else {
-        delete fetchParams.conflicts;
-      }
-
-      // tell the query options panel we're updating include_docs
-      queryOptionsToggleIncludeDocs(!queryOptionsParams.include_docs);
-      fetchDocs(fetchParams, queryOptionsParams);
-      return;
-    }
-  }
-}
diff --git a/app/addons/documents/helpers.js b/app/addons/documents/helpers.js
deleted file mode 100644
index 27623a9..0000000
--- a/app/addons/documents/helpers.js
+++ /dev/null
@@ -1,168 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-
-import ReactComponentsActions from "../components/actions";
-
-
-// sequence info is an array in couchdb2 with two indexes. On couch 1.x, it's just a string / number
-const getSeqNum = (val) => {
-  return _.isArray(val) ? val[1] : val;
-};
-
-const getNewButtonLinks = (databaseName, partitionKey) => {
-  const addLinks = FauxtonAPI.getExtensions('sidebar:links');
-  const newUrlPrefix = '#' + FauxtonAPI.urls('databaseBaseURL', 'app', FauxtonAPI.url.encode(databaseName));
-  let partitionKeyComponent = '';
-  let partitionKeyQueryParam = '';
-  if (partitionKey) {
-    partitionKeyComponent = '/_partition/' + encodeURIComponent(partitionKey);
-    partitionKeyQueryParam = '?partitionKey=' + encodeURIComponent(partitionKey);
-  }
-
-  const addNewLinks = addLinks.reduce((menuLinks, link) => {
-    menuLinks.push({
-      title: link.title,
-      url: newUrlPrefix + partitionKeyComponent + '/' + link.url,
-      icon: 'fonticon-plus-circled'
-    });
-
-    return menuLinks;
-  }, [{
-    title: 'New Doc',
-    url: newUrlPrefix + '/_new' + partitionKeyQueryParam,
-    icon: 'fonticon-plus-circled'
-  }, {
-    title: 'New View',
-    url: newUrlPrefix + partitionKeyComponent + '/new_view',
-    icon: 'fonticon-plus-circled'
-  }, getMangoLink(databaseName, partitionKey)]);
-
-  return [{
-    title: 'Add New',
-    links: addNewLinks
-  }];
-};
-
-const getMangoLink = (databaseName, partitionKey) => {
-  const newUrlPrefix = '#' + FauxtonAPI.urls('databaseBaseURL', 'app', FauxtonAPI.url.encode(databaseName)) +
-    (partitionKey ? '/_partition/' + encodeURIComponent(partitionKey) : '');
-
-  return {
-    title: app.i18n.en_US['new-mango-index'],
-    url: newUrlPrefix + '/_index',
-    icon: 'fonticon-plus-circled'
-  };
-};
-
-const parseJSON = (str) => {
-  return JSON.parse('"' + str + '"');   // this ensures newlines are converted
-};
-
-const getModifyDatabaseLinks = (databaseName) => {
-  return [{
-    title: 'Replicate Database',
-    icon: 'fonticon-replicate',
-    url: FauxtonAPI.urls('replication', 'app', databaseName)
-  }, {
-    title: 'Delete',
-    icon: 'fonticon-trash',
-    onClick: ReactComponentsActions.showDeleteDatabaseModal.bind(this, {showDeleteModal: true, dbId: databaseName})
-  }];
-};
-
-const truncateDoc = (docString, maxRows) => {
-  let lines = docString.split('\n');
-  let isTruncated = false;
-  if (lines.length > maxRows) {
-    isTruncated = true;
-    lines = lines.slice(0, maxRows);
-    docString = lines.join('\n');
-  }
-  return {
-    isTruncated: isTruncated,
-    content: docString
-  };
-};
-
-const getNewDocUrl = (databaseName, partitionKey) => {
-  const safeDatabaseName = encodeURIComponent(databaseName);
-  let url = FauxtonAPI.urls('new', 'newDocument', safeDatabaseName);
-  if (partitionKey) {
-    url = url + '?partitionKey=' + encodeURIComponent(partitionKey);
-  }
-  return url;
-};
-
-const selectedViewContainsReduceFunction = (designDocs, selectedNavItem) => {
-  if (!selectedNavItem) {
-    return false;
-  }
-
-  let showReduce = false;
-  // If a map/reduce view is selected, check if view contains reduce field
-  if (designDocs && isViewSelected(selectedNavItem)) {
-    const ddocID = '_design/' + selectedNavItem.designDocName;
-    const ddoc = designDocs.find(ddoc => ddoc._id === ddocID);
-    showReduce = ddoc !== undefined && ddoc.views
-        && ddoc.views[selectedNavItem.indexName] !== undefined
-        && ddoc.views[selectedNavItem.indexName].reduce !== undefined;
-  }
-  return showReduce;
-};
-
-const selectedItemIsPartitionedView = (designDocs, selectedNavItem, isDbPartitioned) => {
-  if (!selectedNavItem) {
-    return false;
-  }
-
-  let isPartitioned = false;
-  if (designDocs && isViewSelected(selectedNavItem)) {
-    const ddocID = '_design/' + selectedNavItem.designDocName;
-    const ddoc = designDocs.find(ddoc => ddoc._id === ddocID);
-    if (ddoc) {
-      isPartitioned = isDDocPartitioned(ddoc, isDbPartitioned);
-    }
-  }
-  return isPartitioned;
-};
-
-const isViewSelected = (selectedNavItem) => {
-  return (selectedNavItem.navItem === 'designDoc'
-    && selectedNavItem.designDocSection === 'Views'
-    && selectedNavItem.indexName);
-};
-
-const isDDocPartitioned = (ddoc, isDbPartitioned) => {
-  // By default a design doc is partitioned if the database is partitioned
-  let isDDocPartitioned = isDbPartitioned;
-  // Check if ddoc is explictly set to not partitioned
-  if (isDbPartitioned && ddoc.options && ddoc.options.partitioned === false) {
-    isDDocPartitioned = false;
-  }
-  return isDDocPartitioned;
-};
-
-export default {
-  getSeqNum,
-  getNewButtonLinks,
-  getModifyDatabaseLinks,
-  getNewDocUrl,
-  isDDocPartitioned,
-  parseJSON,
-  truncateDoc,
-  selectedViewContainsReduceFunction,
-  selectedItemIsPartitionedView,
-  isViewSelected
-};
diff --git a/app/addons/documents/index-editor/__tests__/actions.test.js b/app/addons/documents/index-editor/__tests__/actions.test.js
deleted file mode 100644
index c01e469..0000000
--- a/app/addons/documents/index-editor/__tests__/actions.test.js
+++ /dev/null
@@ -1,148 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../../core/api';
-import Actions from '../actions';
-import Documents from '../../resources';
-import testUtils from '../../../../../test/mocha/testUtils';
-import sinon from 'sinon';
-import '../../../documents/base';
-
-const restore = testUtils.restore;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Index Editor Actions', function () {
-
-  describe('delete view', function () {
-    let designDocs, database, designDoc, designDocCollection, designDocId, viewName;
-    beforeEach(function () {
-      FauxtonAPI.reduxDispatch = sinon.stub();
-      database = {
-        safeID: function () { return 'safeid';}
-      };
-
-      viewName = 'test-view';
-      designDocId = '_design/test-doc';
-      designDocCollection = new Documents.AllDocs([{
-        _id: designDocId,
-        _rev: '1-231',
-        views: {
-          'test-view': {
-            map: 'function () {};'
-          },
-          'test-view2': {
-            map: 'function () {};'
-          }
-        }
-      }], {
-        params: { limit: 10 },
-        database: database
-      });
-      designDocs = designDocCollection.models;
-      designDoc = _.head(designDocs);
-    });
-
-    afterEach(function () {
-      restore(FauxtonAPI.navigate);
-    });
-
-    it('saves design doc if has other views', function () {
-      designDoc.save = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      const saveSpy = sinon.spy(designDoc, 'save');
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-
-      Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc
-      });
-
-      sinon.assert.calledOnce(saveSpy);
-    });
-
-    it('deletes design doc if has no other views', function () {
-      designDoc.removeDdocView('test-view2');
-
-      designDoc.destroy = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      const destroySpy = sinon.spy(designDoc, 'destroy');
-      designDocs.remove = function () {};
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-
-      Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc
-      });
-
-      sinon.assert.calledOnce(destroySpy);
-    });
-
-    it('navigates to all docs if was on view', function () {
-      const spy = sinon.spy(FauxtonAPI, 'navigate');
-
-      designDoc.save = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      designDocs.fetch = function () {
-        return FauxtonAPI.Promise.resolve();
-      };
-      return Actions.deleteView({
-        indexName: viewName,
-        database: database,
-        designDocs: designDocs,
-        designDoc: designDoc,
-        isOnIndex: true
-      }).then(() => {
-        sinon.assert.calledWithMatch(spy, /_all_docs/);
-        sinon.assert.calledOnce(spy);
-      });
-    });
-
-    it('saves design doc if it has no view section', function () {
-      const ddoc = { _id: designDocId };
-      const ddocModel = new Documents.Doc(ddoc, { database: database });
-
-      ddocModel.setDdocView('testview', '() => {}', '() => {}');
-      expect(ddocModel.get('views')).toEqual({
-        testview: {
-          map: '() => {}',
-          reduce: '() => {}'
-        }
-      });
-      expect(ddocModel.get('language')).toBe('javascript');
-    });
-
-    it('removes old view only when editting', function () {
-      const viewInfo = {
-        isNewView: false,
-        originalDesignDocName: 'test',
-        designDocId: 'test',
-        originalViewName: 'foo',
-        viewName: 'bar'
-      };
-      expect(Actions.shouldRemoveDdocView(viewInfo)).toBe(true);
-
-      viewInfo.isNewView = true;
-      expect(Actions.shouldRemoveDdocView(viewInfo)).toBe(false);
-    });
-  });
-});
diff --git a/app/addons/documents/index-editor/__tests__/components.test.js b/app/addons/documents/index-editor/__tests__/components.test.js
deleted file mode 100644
index 33936d7..0000000
--- a/app/addons/documents/index-editor/__tests__/components.test.js
+++ /dev/null
@@ -1,275 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {mount, shallow} from 'enzyme';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../../core/api';
-import Views from '../components';
-import '../../base';
-
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('ReduceEditor', () => {
-  describe('getReduceValue', () => {
-    const defaultProps = {
-      reduceOptions: [],
-      hasReduce: false,
-      hasCustomReduce: false,
-      reduce: null,
-      reduceSelectedOption: 'NONE',
-      customReducerSupported: true,
-      updateReduceCode: () => {},
-      selectReduceChanged: () => {}
-    };
-
-    it('returns null for none', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-      />);
-      expect(reduceEl.instance().getReduceValue()).toBeNull();
-    });
-
-    it('returns built in for built in reduce', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-        reduce='_sum'
-        hasReduce={true}
-      />);
-      expect(reduceEl.instance().getReduceValue()).toBe('_sum');
-    });
-
-    it('shows warning when custom reduce is not supported', () => {
-      const reduceEl = shallow(<Views.ReduceEditor
-        {...defaultProps}
-        reduce='function() {}'
-        hasReduce={true}
-        customReducerSupported={false}
-      />);
-      expect(reduceEl.find('div.reduce-editor-warning').exists()).toBe(true);
-    });
-
-  });
-});
-
-describe('DesignDocSelector component', () => {
-  const defaultProps = {
-    designDocList: ['_design/test-doc', '_design/test-doc2'],
-    newDesignDocName: '',
-    selectedDesignDocPartitioned: false,
-    isDbPartitioned: false,
-    newDesignDocPartitioned: false,
-    onChangeNewDesignDocName: () => {},
-    onSelectDesignDoc: () => {}
-  };
-  let selectorEl;
-
-  it('calls onSelectDesignDoc on change', () => {
-    const spy = sinon.spy();
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDDocName={'new-doc'}
-        onSelectDesignDoc={spy}
-      />);
-
-    selectorEl.find('.styled-select select').first().simulate('change', {
-      target: {
-        value: '_design/test-doc'
-      }
-    });
-    sinon.assert.calledOnce(spy);
-  });
-
-  it('shows new design doc field when set to new-doc', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-
-    expect(selectorEl.find('#new-ddoc-section').length).toBe(1);
-  });
-
-  it('hides new design doc field when design doc selected', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'_design/test-doc'}
-      />);
-
-    expect(selectorEl.find('#new-ddoc-section').length).toBe(0);
-  });
-
-  it('always passes validation when design doc selected', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'_design/test-doc'}
-      />);
-
-    expect(selectorEl.instance().validate()).toBe(true);
-  });
-
-  it('fails validation if new doc name entered/not entered', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        newDesignDocName=''
-      />);
-
-    // it shouldn't validate at this point: no new design doc name has been entered
-    expect(selectorEl.instance().validate()).toBe(false);
-  });
-
-  it('passes validation if new doc name entered/not entered', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        newDesignDocName='new-doc-name'
-      />);
-    expect(selectorEl.instance().validate()).toBe(true);
-  });
-
-
-  it('omits doc URL when not supplied', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-    expect(selectorEl.find('.help-link').length).toBe(0);
-  });
-
-  it('includes help doc link when supplied', () => {
-    const docLink = 'http://docs.com';
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        docLink={docLink}
-      />);
-    expect(selectorEl.find('.help-link').length).toBe(1);
-    expect(selectorEl.find('.help-link').prop('href')).toBe(docLink);
-  });
-
-  it('shows Partitioned checkbox only when db is partitioned', () => {
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-      />);
-
-    expect(selectorEl.find('div.ddoc-selector-partitioned').exists()).toBe(false);
-
-    selectorEl.setProps({isDbPartitioned: true});
-    expect(selectorEl.find('div.ddoc-selector-partitioned').exists()).toBe(true);
-  });
-
-  it('calls onChangeNewDesignDocPartitioned when partitioned option changes', () => {
-    const spy = sinon.stub();
-    selectorEl = mount(
-      <Views.DesignDocSelector
-        {...defaultProps}
-        selectedDesignDocName={'new-doc'}
-        isDbPartitioned={true}
-        onChangeNewDesignDocPartitioned={spy}
-      />);
-    selectorEl.find('input#js-ddoc-selector-partitioned').simulate('change');
-    sinon.assert.called(spy);
-  });
-});
-
-describe('IndexEditor', () => {
-  const defaultProps = {
-    isLoading: false,
-    isNewView: false,
-    isNewDesignDoc: false,
-    isDbPartitioned: false,
-    viewName: '',
-    database: { safeID: () => 'test_db' },
-    newDesignDocName: '',
-    newDesignDocPartitioned: false,
-    originalViewName: '',
-    originalDesignDocName: '',
-    designDoc: {},
-    designDocId: '',
-    designDocPartitioned: false,
-    designDocList: [],
-    map: '',
-    reduce: '',
-    designDocs: {},
-    updateNewDesignDocName: () => {},
-    updateMapCode: () => {},
-    selectDesignDoc: () => {},
-    onChangeNewDesignDocName: () => {},
-    changeViewName: () => {},
-    reduceOptions: [],
-    reduceSelectedOption: 'NONE',
-    hasReduce: false,
-    hasCustomReduce: false,
-    updateReduceCode: () => {},
-    selectReduceChanged: () => {}
-  };
-
-  afterEach(() => {
-    sinon.restore();
-  });
-
-  it('calls changeViewName on view name change', () => {
-    const spy = sinon.spy();
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      viewName='new-name'
-      changeViewName={spy}
-    />);
-
-    editorEl.find('#index-name').simulate('change', {
-      target: {
-        value: 'newViewName'
-      }
-    });
-    sinon.assert.calledWith(spy, 'newViewName');
-  });
-
-  it('generates the correct cancel link when db, ddoc and views have special chars', () => {
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      database={{ id: 'db%$1' }}
-      designDocId={'_design/doc/1$2'}
-      viewName={'v?abc/123'}
-    />);
-    const expectedUrl = `/${encodeURIComponent('db%$1')}/_design/${encodeURIComponent('doc/1$2')}/_view/${encodeURIComponent('v?abc/123')}`;
-    expect(editorEl.find('a.index-cancel-link').prop('href')).toMatch(expectedUrl);
-  });
-
-  it('shows warning when trying to save a partitioned view with custom reduce', () => {
-    sinon.stub(FauxtonAPI, 'addNotification');
-    const editorEl = mount(<Views.IndexEditor
-      {...defaultProps}
-      viewName='new-name'
-      designDocId='new-doc'
-      newDesignDocName='test_ddoc'
-      newDesignDocPartitioned={true}
-      isDbPartitioned={true}
-      reduce='function() { /*custom reduce*/ }'
-    />);
-
-    editorEl.find('form.view-query-save').simulate('submit', {
-      preventDefault: () => {}
-    });
-    sinon.assert.calledWithMatch(FauxtonAPI.addNotification, { msg: 'Partitioned views do not support custom reduce functions.' });
-  });
-
-});
diff --git a/app/addons/documents/index-editor/__tests__/reducers.test.js b/app/addons/documents/index-editor/__tests__/reducers.test.js
deleted file mode 100644
index c579010..0000000
--- a/app/addons/documents/index-editor/__tests__/reducers.test.js
+++ /dev/null
@@ -1,351 +0,0 @@
-// Licensed 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.
-
-import Documents from '../../../documents/resources';
-import reducer, { hasCustomReduce, getDesignDocList, getSelectedDesignDocPartitioned,
-  getSaveDesignDoc } from '../reducers';
-import ActionTypes from '../actiontypes';
-import '../../base';
-
-describe('IndexEditor Reducer', () => {
-  describe('map editor', () => {
-    it('new view is assigned the default map code', () => {
-      const action = {
-        type: ActionTypes.EDIT_NEW_INDEX,
-        options: {
-          isNewView: true,
-          //designDocs: {find: () => { return { dDocModel: () => {}}; }}
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.view.map).toBe('function (doc) {\n  emit(doc._id, 1);\n}');
-    });
-  });
-
-  describe('reduce editor', () => {
-    describe('hasCustomReduce', () => {
-      it('is false for no reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(false);
-      });
-
-      it('is false for built in reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};',
-              reduce: '_sum'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(false);
-      });
-
-      it('is true for custom reduce', () => {
-        const designDoc = {
-          _id: '_design/test-doc',
-          views: {
-            'test-view': {
-              map: '() => {};',
-              reduce: 'function (reduce) { reduce(); }'
-            }
-          }
-        };
-        const designDocs = new Documents.AllDocs([designDoc], {
-          params: { limit: 10 },
-          database: {
-            safeID: () => { return 'id';}
-          }
-        });
-        const action = {
-          type: ActionTypes.EDIT_NEW_INDEX,
-          options: {
-            isNewView: false,
-            viewName: 'test-view',
-            designDocs: designDocs,
-            designDocId: designDoc._id
-          }
-        };
-
-        const newState = reducer(undefined, action);
-        expect(hasCustomReduce(newState)).toBe(true);
-      });
-    });
-
-    describe('SELECT_REDUCE_CHANGE', () => {
-      const designDoc = {
-        _id: '_design/test-doc',
-        views: {
-          'test-view': {
-            map: '() => {};'
-          }
-        }
-      };
-      const designDocs = new Documents.AllDocs([designDoc], {
-        params: { limit: 10 },
-        database: {
-          safeID: () => { return 'id';}
-        }
-      });
-      const editAction = {
-        type: ActionTypes.EDIT_NEW_INDEX,
-        options: {
-          isNewView: false,
-          viewName: 'test-view',
-          designDocs: designDocs,
-          designDocId: designDoc._id
-        }
-      };
-
-      it('NONE returns null reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceaction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: 'NONE'
-        };
-        newState = reducer(newState, selectReduceaction);
-        expect(newState.view.reduce).toBe('');
-      });
-
-      it('builtin returns builtin reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceAction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: '_sum'
-        };
-        newState = reducer(newState, selectReduceAction);
-        expect(newState.view.reduce).toBe('_sum');
-      });
-
-      it('custom returns custom reduce', () => {
-        let newState = reducer(undefined, editAction);
-        const selectReduceAction = {
-          type: ActionTypes.SELECT_REDUCE_CHANGE,
-          reduceSelectedOption: 'CUSTOM'
-        };
-        newState = reducer(newState, selectReduceAction);
-        expect(newState.view.reduce).toBe('function (keys, values, rereduce) {\n  if (rereduce) {\n    return sum(values);\n  } else {\n    return values.length;\n  }\n}');
-      });
-    });
-  });
-
-  describe('design doc selector', () => {
-    const designDoc = {
-      _id: '_design/test-doc',
-      views: {
-        'test-view': {
-          map: 'boom'
-        }
-      }
-    };
-
-    const mangoDoc = {
-      "_id": "_design/123mango",
-      "id": "_design/123mango",
-      "key": "_design/123mango",
-      "value": {
-        "rev": "20-9e4bc8b76fd7d752d620bbe6e0ea9a80"
-      },
-      "doc": {
-        "_id": "_design/123mango",
-        "_rev": "20-9e4bc8b76fd7d752d620bbe6e0ea9a80",
-        "views": {
-          "test-view": {
-            "map": "function(doc) {\n  emit(doc._id, 2);\n}"
-          },
-          "new-view": {
-            "map": "function(doc) {\n  if (doc.class === \"mammal\" && doc.diet === \"herbivore\")\n    emit(doc._id, 1);\n}",
-            "reduce": "_sum"
-          }
-        },
-        "language": "query",
-        "indexes": {
-          "newSearch": {
-            "analyzer": "standard",
-            "index": "function(doc){\n index(\"default\", doc._id);\n}"
-          }
-        }
-      }
-    };
-
-    const designDocArray = _.map([designDoc, mangoDoc], (doc) => {
-      return Documents.Doc.prototype.parse(doc);
-    });
-
-    const designDocs = new Documents.AllDocs(designDocArray, {
-      params: { limit: 10 },
-      database: {
-        safeID: () => { return 'id'; }
-      }
-    });
-
-    const editAction = {
-      type: ActionTypes.EDIT_INDEX,
-      options: {
-        isNewView: false,
-        viewName: 'test-view',
-        designDocs: designDocs,
-        designDocId: designDoc._id
-      }
-    };
-
-    it('DESIGN_DOC_CHANGE changes design doc id', () => {
-      let newState = reducer(undefined, editAction);
-      const designDocId = 'another-one';
-      const ddocChangeAction = {
-        type: ActionTypes.DESIGN_DOC_CHANGE,
-        options: {
-          value: designDocId
-        }
-      };
-      newState = reducer(newState, ddocChangeAction);
-      expect(newState.designDocId).toBe(designDocId);
-    });
-
-    it('only filters mango docs', () => {
-      const newState = reducer(undefined, editAction);
-      const designDocs = getDesignDocList(newState);
-
-      expect(designDocs.length).toBe(1);
-      expect(designDocs[0]).toBe('_design/test-doc');
-    });
-  });
-
-  describe('EDIT_INDEX', () => {
-    const designDoc = {
-      _id: '_design/test-doc',
-      views: {
-        'test-view': {
-          map: 'boom'
-        }
-      }
-    };
-    const designDocs = new Documents.AllDocs([designDoc], {
-      params: { limit: 10 },
-      database: {
-        safeID: () => { return 'id';}
-      }
-    });
-
-    it('can set reduce for new design doc', () => {
-      const editAction = {
-        type: ActionTypes.EDIT_INDEX,
-        options: {
-          isNewView: true,
-          isNewDesignDoc: true,
-          viewName: 'test-view',
-          designDocs: designDocs,
-          designDocId: undefined
-        }
-      };
-      let newState = reducer(undefined, editAction);
-
-      const selectReduceAction = {
-        type: ActionTypes.SELECT_REDUCE_CHANGE,
-        reduceSelectedOption: '_sum'
-      };
-      newState = reducer(newState, selectReduceAction);
-      expect(newState.view.reduce).toBe('_sum');
-    });
-  });
-
-  describe('getSelectedDesignDocPartitioned', () => {
-    const designDocs = [
-      {id: '_design/docGlobal', get: () => { return {options: { partitioned: false }}; }},
-      {id: '_design/docPartitioned', get: () => { return {options: { partitioned: true }}; }},
-      {id: '_design/docNoOptions', get: () => { return {};}}
-    ];
-
-    it('returns true for ddocs without partitioned flag on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docNoOptions' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(true);
-    });
-
-    it('returns false for ddocs where partitioned is false on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docGlobal' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(false);
-    });
-
-    it('returns true for ddocs where partitioned is true on partitioned dbs', () => {
-      const isDbPartitioned = true;
-      const state = { designDocs, designDocId: '_design/docPartitioned' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(true);
-    });
-
-    it('any ddoc is global on non-partitioned dbs', () => {
-      const isDbPartitioned = false;
-      const state = { designDocs, designDocId: '_design/docGlobal' };
-      expect(getSelectedDesignDocPartitioned(state, isDbPartitioned)).toBe(false);
-
-      const state2 = { designDocs, designDocId: '_design/docPartitioned' };
-      expect(getSelectedDesignDocPartitioned(state2, isDbPartitioned)).toBe(false);
-
-      const state3 = { designDocs, designDocId: '_design/docNoOptions' };
-      expect(getSelectedDesignDocPartitioned(state3, isDbPartitioned)).toBe(false);
-    });
-
-  });
-
-  describe('getSaveDesignDoc', () => {
-
-    it('only sets partitioned flag when db is partitioned', () => {
-      const state = { designDocId: 'new-doc', newDesignDocPartitioned: true, };
-      const ddoc = getSaveDesignDoc(state, true);
-      expect(ddoc.get('options')).toEqual({ partitioned: true });
-
-      const ddoc2 = getSaveDesignDoc(state, false);
-      expect(ddoc2.get('options')).toBeUndefined();
-    });
-  });
-});
diff --git a/app/addons/documents/index-editor/actions.js b/app/addons/documents/index-editor/actions.js
deleted file mode 100644
index a6cf7e7..0000000
--- a/app/addons/documents/index-editor/actions.js
+++ /dev/null
@@ -1,331 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import Documents from '../resources';
-import ActionTypes from './actiontypes';
-import SidebarActions from '../sidebar/actions';
-
-const selectReduceChanged = (reduceOption) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SELECT_REDUCE_CHANGE,
-    reduceSelectedOption: reduceOption
-  });
-};
-
-const changeViewName = (name) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_NAME_CHANGE,
-    name: name
-  });
-};
-
-const editIndex = (options) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.EDIT_INDEX,
-    options: options
-  });
-};
-
-const dispatchClearIndex = () => {
-  FauxtonAPI.reduxDispatch({ type: ActionTypes.CLEAR_INDEX });
-};
-
-const dispatchFetchDesignDocsBeforeEdit = (options) => {
-  options.designDocs.fetch({reset: true}).then(() => {
-    editIndex(options)(FauxtonAPI.reduxDispatch);
-  }, xhr => {
-    let errorMsg = 'Error';
-    if (xhr.responseJSON && xhr.responseJSON.error === 'not_found') {
-      const databaseName = options.designDocs.database.safeID();
-      errorMsg = `The ${databaseName} database does not exist`;
-      FauxtonAPI.navigate('/', {trigger: true});
-    }
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: "error",
-      clear:  true
-    });
-  });
-};
-
-const shouldRemoveDdocView = (viewInfo) => {
-  return !viewInfo.isNewView &&
-          viewInfo.originalDesignDocName === viewInfo.designDocId &&
-          viewInfo.originalViewName !== viewInfo.viewName;
-};
-
-const saveView = (viewInfo, navigateToURL) => (dispatch) => {
-  const designDoc = viewInfo.designDoc;
-  designDoc.setDdocView(viewInfo.viewName, viewInfo.map, viewInfo.reduce);
-
-  FauxtonAPI.addNotification({
-    msg: 'Saving View...',
-    type: 'info',
-    clear: true
-  });
-
-  // if the view name just changed and it's in the SAME design doc, remove the old one before saving the doc
-  if (shouldRemoveDdocView(viewInfo)) {
-    designDoc.removeDdocView(viewInfo.originalViewName);
-  }
-
-  designDoc.save().then(function () {
-    FauxtonAPI.addNotification({
-      msg: 'View Saved.',
-      type: 'success',
-      clear: true
-    });
-
-    // if the user just saved an existing view to a different design doc, remove the view
-    // from the old design doc and delete if it's empty
-    if (!viewInfo.isNewView && viewInfo.originalDesignDocName !== viewInfo.designDocId) {
-      const oldDesignDoc = findDesignDoc(viewInfo.designDocs, viewInfo.originalDesignDocName);
-      safeDeleteIndex(oldDesignDoc, viewInfo.designDocs, 'views', viewInfo.originalViewName, {
-        onSuccess: function () {
-          SidebarActions.dispatchUpdateDesignDocs(viewInfo.designDocs);
-        }
-      });
-    }
-
-    if (viewInfo.designDocId === 'new-doc') {
-      addDesignDoc(designDoc);
-    }
-    SidebarActions.dispatchUpdateDesignDocs(viewInfo.designDocs);
-    dispatch({ type: ActionTypes.VIEW_SAVED });
-    FauxtonAPI.navigate(navigateToURL, { trigger: true });
-  }, (xhr) => {
-    FauxtonAPI.addNotification({
-      msg: 'Save failed. ' + (xhr.responseJSON ? `Reason: ${xhr.responseJSON.reason}` : ''),
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const addDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_ADD_DESIGN_DOC,
-    designDoc: designDoc.toJSON()
-  });
-};
-
-const deleteView = (options) => {
-
-  function onSuccess () {
-
-    // if the user was on the index that was just deleted, redirect them back to all docs
-    if (options.isOnIndex) {
-      const url = FauxtonAPI.urls('allDocs', 'app', options.database.safeID());
-      FauxtonAPI.navigate(url);
-    }
-
-    SidebarActions.dispatchUpdateDesignDocs(options.designDocs);
-
-    FauxtonAPI.addNotification({
-      msg: 'The <code>' + _.escape(options.indexName) + '</code> view has been deleted.',
-      type: 'info',
-      escape: false,
-      clear: true
-    });
-    SidebarActions.dispatchHideDeleteIndexModal();
-  }
-
-  return safeDeleteIndex(options.designDoc, options.designDocs, 'views', options.indexName, { onSuccess: onSuccess });
-};
-
-const cloneView = (params) => {
-  const targetDesignDoc = getDesignDoc(params.designDocs, params.targetDesignDocName, params.newDesignDocName,
-    params.newDesignDocPartitioned, params.database, params.isDbPartitioned);
-  let indexes = targetDesignDoc.get('views');
-  if (indexes && _.has(indexes, params.newIndexName)) {
-    FauxtonAPI.addNotification({
-      msg: 'That index name is already used in this design doc. Please enter a new name.',
-      type: 'error',
-      clear: true
-    });
-    return;
-  }
-  if (!indexes) {
-    indexes = {};
-  }
-  const sourceDesignDoc = findDesignDoc(params.designDocs, '_design/' + params.sourceDesignDocName);
-  const sourceDesignDocJSON = sourceDesignDoc.toJSON();
-
-  // this sets whatever content is in the source index into the target design doc under the new index name
-  indexes[params.newIndexName] = sourceDesignDocJSON.views[params.sourceIndexName];
-  targetDesignDoc.set({ views: indexes });
-
-  targetDesignDoc.save().then(() => {
-    params.onComplete();
-    FauxtonAPI.addNotification({
-      msg: 'The index has been cloned.',
-      type: 'success',
-      clear: true
-    });
-    SidebarActions.dispatchUpdateDesignDocs(params.designDocs);
-  }, (xhr) => {
-    params.onComplete();
-    const responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Clone failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const gotoEditViewPage = (databaseName, partitionKey, designDocName, indexName) => {
-  FauxtonAPI.navigate('#' + FauxtonAPI.urls('view', 'edit', encodeURIComponent(databaseName),
-    (partitionKey ? encodeURIComponent(partitionKey) : ''),
-    encodeURIComponent(designDocName), encodeURIComponent(indexName)));
-};
-
-const updateMapCode = (code) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_UPDATE_MAP_CODE,
-    code: code
-  });
-};
-
-const updateReduceCode = (code) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.VIEW_UPDATE_REDUCE_CODE,
-    code: code
-  });
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_CHANGE,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_NEW_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.DESIGN_DOC_NEW_PARTITIONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-// safely deletes an index of any type. It only deletes the actual design doc if there are no
-// other indexes of any type left in the doc
-const safeDeleteIndex = (designDoc, designDocs, indexPropName, indexName, options) => {
-  const opts = _.extend({
-    onSuccess: function () { },
-    onError: function (xhr) {
-      const responseText = JSON.parse(xhr.responseText).reason;
-      FauxtonAPI.addNotification({
-        msg: 'Delete failed: ' + responseText,
-        type: 'error',
-        clear: true
-      });
-    }
-  }, options);
-
-  const indexes = designDoc.get(indexPropName) || {};
-  delete indexes[indexName];
-  const newIndexes = {};
-  newIndexes[indexPropName] = indexes;
-  designDoc.set(newIndexes);
-
-  // we either save the design doc with the now-removed index, or we remove it altogether if there are no indexes
-  // of any type left in the design doc
-  const indexTypePropNames = FauxtonAPI.getIndexTypePropNames();
-  const hasRemainingIndex = _.some(indexTypePropNames, function (propName) {
-    return designDoc.get(propName) && _.keys(designDoc.get(propName)).length > 0;
-  });
-
-  let promise;
-  let deleteDesignDoc = false;
-  if (hasRemainingIndex) {
-    promise = designDoc.save();
-  } else {
-    promise = designDoc.destroy();
-    deleteDesignDoc = true;
-  }
-  return promise.then(function () {
-    if (deleteDesignDoc) {
-      designDocs.remove(designDoc.id);
-    }
-    opts.onSuccess();
-  }, opts.onError);
-};
-
-
-
-// ---- helpers ----
-
-const findDesignDoc = (designDocs, designDocName) => {
-  return designDocs.find(function (doc) {
-    return doc.id === designDocName;
-  }).dDocModel();
-};
-
-const getDesignDoc = (designDocs, targetDesignDocName, newDesignDocName, newDesignDocPartitioned, database, isDbPartitioned) => {
-  if (targetDesignDocName === 'new-doc') {
-    const doc = {
-      "_id": "_design/" + newDesignDocName,
-      "views": {},
-      "language": "javascript"
-    };
-    const dDoc = new Documents.Doc(doc, { database: database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  const foundDoc = designDocs.find(function (ddoc) {
-    return ddoc.id === targetDesignDocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-};
-
-
-export default {
-  helpers: {
-    findDesignDoc,
-    getDesignDoc
-  },
-  safeDeleteIndex,
-  selectReduceChanged,
-  changeViewName,
-  editIndex,
-  dispatchClearIndex,
-  dispatchFetchDesignDocsBeforeEdit,
-  shouldRemoveDdocView,
-  saveView,
-  addDesignDoc,
-  deleteView,
-  cloneView,
-  gotoEditViewPage,
-  updateMapCode,
-  updateReduceCode,
-  selectDesignDoc,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned
-};
diff --git a/app/addons/documents/index-editor/actiontypes.js b/app/addons/documents/index-editor/actiontypes.js
deleted file mode 100644
index ef746df..0000000
--- a/app/addons/documents/index-editor/actiontypes.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed 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.
-
-export default {
-  CLEAR_INDEX: 'CLEAR_INDEX',
-  EDIT_INDEX: 'EDIT_INDEX',
-  EDIT_NEW_INDEX: 'EDIT_NEW_INDEX',
-  SELECT_REDUCE_CHANGE: 'SELECT_REDUCE_CHANGE',
-  VIEW_SAVED: 'VIEW_SAVED',
-  VIEW_CREATED: 'VIEW_CREATED',
-  DESIGN_DOC_CHANGE: 'DESIGN_DOC_CHANGE',
-  DESIGN_DOC_NEW_NAME_UPDATED: 'DESIGN_DOC_NEW_NAME_UPDATED',
-  DESIGN_DOC_NEW_PARTITIONED_UPDATED: 'DESIGN_DOC_NEW_PARTITIONED_UPDATED',
-  NEW_DESIGN_DOC: 'NEW_DESIGN_DOC',
-  VIEW_NAME_CHANGE: 'VIEW_NAME_CHANGE',
-  VIEW_ADD_DESIGN_DOC: 'VIEW_ADD_DESIGN_DOC',
-  VIEW_UPDATE_MAP_CODE: 'VIEW_UPDATE_MAP_CODE',
-  VIEW_UPDATE_REDUCE_CODE: 'VIEW_UPDATE_REDUCE_CODE'
-};
diff --git a/app/addons/documents/index-editor/components.js b/app/addons/documents/index-editor/components.js
deleted file mode 100644
index 3cf69bd..0000000
--- a/app/addons/documents/index-editor/components.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-import ReactComponents from '../../components/react-components';
-import DesignDocSelector from './components/DesignDocSelector';
-import IndexEditor from './components/IndexEditor';
-import IndexEditorContainer from './components/IndexEditorContainer';
-import ReduceEditor from './components/ReduceEditor';
-
-const StyledSelect = ReactComponents.StyledSelect;
-
-export default {
-  IndexEditorContainer,
-  IndexEditor,
-  ReduceEditor,
-  DesignDocSelector,
-  StyledSelect
-};
diff --git a/app/addons/documents/index-editor/components/DesignDocSelector.js b/app/addons/documents/index-editor/components/DesignDocSelector.js
deleted file mode 100644
index a524c32..0000000
--- a/app/addons/documents/index-editor/components/DesignDocSelector.js
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const { StyledSelect } = ReactComponents;
-
-export default class DesignDocSelector extends Component {
-
-  constructor(props) {
-    super(props);
-    this.onTogglePartitioned = this.onTogglePartitioned.bind(this);
-  }
-
-  validate() {
-    if (this.props.selectedDesignDocName === 'new-doc' && this.props.newDesignDocName === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please name your design doc.',
-        type: 'error'
-      });
-      this.newDesignDocInput.focus();
-      return false;
-    }
-    return true;
-  }
-
-  getDocList() {
-    if (this.props.designDocList) {
-      return this.props.designDocList.map ((designDoc) => {
-        return (<option key={designDoc} value={designDoc}>{designDoc}</option>);
-      });
-    }
-    return [];
-
-  }
-
-  selectDesignDoc(e) {
-    this.props.onSelectDesignDoc(e.target.value);
-  }
-
-  updateDesignDocName(e) {
-    this.props.onChangeNewDesignDocName(e.target.value);
-  }
-
-  getNewDDocField() {
-    if (this.props.selectedDesignDocName !== 'new-doc') {
-      return;
-    }
-    return (
-      <div id="new-ddoc-section" className="span5">
-        <label className="control-label" htmlFor="new-ddoc">_design/</label>
-        <div className="controls">
-          <input type="text" id="new-ddoc" placeholder="newDesignDoc"
-            ref={(el) => { this.newDesignDocInput = el; }}
-            onChange={this.updateDesignDocName.bind(this)} />
-        </div>
-      </div>
-    );
-  }
-
-  getDocLink() {
-    if (!this.props.docLink) {
-      return null;
-    }
-    return (
-      <a className="help-link" data-bypass="true" href={this.props.docLink} target="_blank" rel="noopener noreferrer">
-        <i className="icon-question-sign" />
-      </a>
-    );
-  }
-
-  onTogglePartitioned() {
-    this.props.onChangeNewDesignDocPartitioned(!this.props.newDesignDocPartitioned);
-  }
-
-  getPartitionedCheckbox() {
-    if (!this.props.isDbPartitioned) {
-      return null;
-    }
-    const isExistingDDoc = this.props.selectedDesignDocName !== 'new-doc';
-    const checked = isExistingDDoc ?
-      this.props.selectedDesignDocPartitioned :
-      this.props.newDesignDocPartitioned;
-    const labelClass = isExistingDDoc ? 'check--disabled' : '';
-    const inputTitle = isExistingDDoc ?
-      (this.props.selectedDesignDocPartitioned ? 'Design document is partitioned' : 'Design document is not partitioned') :
-      (this.props.newDesignDocPartitioned ? 'New document will be partitioned' : 'New document will not be partitioned');
-    return (
-      <div className="ddoc-selector-partitioned">
-        <label className={labelClass} title={inputTitle}>
-          <input
-            id="js-ddoc-selector-partitioned"
-            type="checkbox"
-            title={inputTitle}
-            checked={checked}
-            onChange={this.onTogglePartitioned}
-            style={{margin: '0px 10px 0px 0px'}}
-            disabled={isExistingDDoc}/>
-          Partitioned
-        </label>
-      </div>
-    );
-  }
-
-  render() {
-    const selectContent =
-      <optgroup label="Select a document">
-        <option value="new-doc">New document</option>
-        {this.getDocList()}
-      </optgroup>;
-
-    return (
-      <div className="design-doc-group control-group">
-        <div className="span3">
-          <label htmlFor="ddoc">{this.props.designDocLabel}
-            {this.getDocLink()}
-          </label>
-          <StyledSelect
-            selectChange={this.selectDesignDoc.bind(this)}
-            selectValue={this.props.selectedDesignDocName}
-            selectId={"faux__edit-view__design-doc"}
-            selectContent={selectContent}
-          />
-        </div>
-        {this.getNewDDocField()}
-        {this.getPartitionedCheckbox()}
-      </div>
-    );
-  }
-}
-
-DesignDocSelector.defaultProps = {
-  designDocLabel: 'Design Document',
-  selectedDesignDocName: '',
-  newDesignDocName: ''
-};
-
-DesignDocSelector.propTypes = {
-  designDocList: PropTypes.array.isRequired,
-  onSelectDesignDoc: PropTypes.func.isRequired,
-  onChangeNewDesignDocName: PropTypes.func.isRequired,
-  selectedDesignDocName: PropTypes.string.isRequired,
-  selectedDesignDocPartitioned: PropTypes.bool.isRequired,
-  newDesignDocName: PropTypes.string.isRequired,
-  newDesignDocPartitioned: PropTypes.bool.isRequired,
-  designDocLabel: PropTypes.string,
-  docURL: PropTypes.string
-};
diff --git a/app/addons/documents/index-editor/components/IndexEditor.js b/app/addons/documents/index-editor/components/IndexEditor.js
deleted file mode 100644
index b2a14bf..0000000
--- a/app/addons/documents/index-editor/components/IndexEditor.js
+++ /dev/null
@@ -1,202 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import app from '../../../../app';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-import DesignDocSelector from './DesignDocSelector';
-import ReduceEditor from './ReduceEditor';
-
-const getDocUrl = app.helpers.getDocUrl;
-const {CodeEditorPanel, ConfirmButton, LoadLines} = ReactComponents;
-
-export default class IndexEditor extends Component {
-
-  constructor(props) {
-    super(props);
-    this.saveView = this.saveView.bind(this);
-    this.viewChange = this.viewChange.bind(this);
-    this.updateMapCode = this.updateMapCode.bind(this);
-  }
-
-  // the code editor is a standalone component, so if the user goes from one edit view page to another, we need to
-  // force an update of the editor panel
-  componentDidUpdate(prevProps) {
-    if (this.props.map !== prevProps.map && this.mapEditor) {
-      this.mapEditor.update();
-    }
-  }
-
-  isPartitionedView() {
-    if (this.props.designDocId === 'new-doc') {
-      return this.props.newDesignDocPartitioned;
-    }
-    return this.props.designDocPartitioned;
-  }
-
-  isCustomReduceSupported() {
-    if (this.props.isDbPartitioned && this.props.reduce && !this.props.reduce.startsWith('_')) {
-      const isDDocPartitioned = this.props.designDocId === 'new-doc' ? this.props.newDesignDocPartitioned : this.props.designDocPartitioned;
-      return isDDocPartitioned ? false : true;
-    }
-    return true;
-  }
-
-  saveView(el) {
-    el.preventDefault();
-
-    if (!this.designDocSelector.validate()) {
-      return;
-    }
-
-    if (!this.isCustomReduceSupported()) {
-      FauxtonAPI.addNotification({
-        msg: 'Partitioned views do not support custom reduce functions.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-
-    const encodedPartKey = this.isPartitionedView() && this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const url = FauxtonAPI.urls('view', 'showView', this.props.database.safeID(), encodedPartKey,
-      this.props.saveDesignDoc.safeID(), encodeURIComponent(this.props.viewName));
-    this.props.saveView({
-      database: this.props.database,
-      isNewView: this.props.isNewView,
-      viewName: this.props.viewName,
-      designDoc: this.props.saveDesignDoc,
-      designDocId: this.props.designDocId,
-      isNewDesignDoc: this.props.isNewDesignDoc,
-      originalViewName: this.props.originalViewName,
-      originalDesignDocName: this.props.originalDesignDocName,
-      map: this.mapEditor.getValue(),
-      reduce: this.reduceEditor.getReduceValue(),
-      designDocs: this.props.designDocs
-    }, url);
-  }
-
-  viewChange(el) {
-    this.props.changeViewName(el.target.value);
-  }
-
-  updateMapCode(code) {
-    this.props.updateMapCode(code);
-  }
-
-  getCancelLink() {
-    const encodedDatabase = encodeURIComponent(this.props.database.id);
-    const encodedPartitionKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    if (this.props.designDocId === 'new-doc' || this.props.isNewView) {
-      return '#' + FauxtonAPI.urls('allDocs', 'app', encodedDatabase, encodedPartitionKey);
-    }
-    const encodedDDoc = this.props.designDocId.startsWith('_design/') ?
-      '_design/' + encodeURIComponent(this.props.designDocId.substring(8)) :
-      encodeURIComponent(this.props.designDocId);
-    const encodedView = encodeURIComponent(this.props.viewName);
-    return '#' + FauxtonAPI.urls('view', 'showView', encodedDatabase, encodedPartitionKey, encodedDDoc, encodedView);
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return (
-        <div className="define-view">
-          <LoadLines />
-        </div>
-      );
-    }
-
-    const pageHeader = (this.props.isNewView) ? 'New View' : 'Edit View';
-    const btnLabel = (this.props.isNewView) ? 'Create Document and then Build Index' : 'Save Document and then Build Index';
-    return (
-      <div className="define-view" >
-        <form className="form-horizontal view-query-save" onSubmit={this.saveView}>
-          <h3 className="simple-header">{pageHeader}</h3>
-
-          <div className="new-ddoc-section">
-            <DesignDocSelector
-              ref={(el) => { this.designDocSelector = el; }}
-              designDocList={this.props.designDocList}
-              isDbPartitioned={this.props.isDbPartitioned}
-              selectedDesignDocName={this.props.designDocId}
-              selectedDesignDocPartitioned={this.props.designDocPartitioned}
-              newDesignDocName={this.props.newDesignDocName}
-              newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-              onSelectDesignDoc={this.props.selectDesignDoc}
-              onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-              onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-              docLink={getDocUrl('DESIGN_DOCS')} />
-          </div>
-
-          <div className="control-group">
-            <label htmlFor="index-name">
-              <span>Index name</span>
-              <a
-                className="help-link"
-                data-bypass="true"
-                href={getDocUrl('VIEW_FUNCS')}
-                target="_blank"
-                rel="noopener noreferrer">
-                <i className="icon-question-sign"></i>
-              </a>
-            </label>
-            <input
-              type="text"
-              id="index-name"
-              value={this.props.viewName}
-              onChange={this.viewChange}
-              placeholder="Index name" />
-          </div>
-          <CodeEditorPanel
-            id={'map-function'}
-            ref={(el) => { this.mapEditor = el; }}
-            title={"Map function"}
-            docLink={getDocUrl('MAP_FUNCS')}
-            blur={this.updateMapCode}
-            allowZenMode={false}
-            defaultCode={this.props.map} />
-          <ReduceEditor
-            ref={(el) => { this.reduceEditor = el; }}
-            customReducerSupported={this.isCustomReduceSupported()}
-            {...this.props} />
-          <div className="padded-box">
-            <div className="control-group">
-              <ConfirmButton id="save-view" text={btnLabel} />
-              <a href={this.getCancelLink()} className="index-cancel-link">Cancel</a>
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-}
-
-IndexEditor.propTypes = {
-  isLoading:PropTypes.bool.isRequired,
-  isNewView: PropTypes.bool.isRequired,
-  database: PropTypes.object.isRequired,
-  isDbPartitioned: PropTypes.bool.isRequired,
-  designDocId: PropTypes.string.isRequired,
-  newDesignDocName: PropTypes.string.isRequired,
-  viewName: PropTypes.string.isRequired,
-  isNewDesignDoc: PropTypes.bool.isRequired,
-  originalViewName: PropTypes.string,
-  originalDesignDocName: PropTypes.string,
-  designDocs: PropTypes.object,
-  saveDesignDoc: PropTypes.object,
-  partitionKey: PropTypes.string,
-  updateNewDesignDocName: PropTypes.func.isRequired,
-  changeViewName: PropTypes.func.isRequired,
-  updateMapCode: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-editor/components/IndexEditorContainer.js b/app/addons/documents/index-editor/components/IndexEditorContainer.js
deleted file mode 100644
index 2e7a136..0000000
--- a/app/addons/documents/index-editor/components/IndexEditorContainer.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import IndexEditor from './IndexEditor';
-import Actions from '../actions';
-import { getSaveDesignDoc, getDesignDocList, reduceSelectedOption, hasCustomReduce,
-  getSelectedDesignDocPartitioned } from '../reducers';
-
-const mapStateToProps = ({ indexEditor, databases }, ownProps) => {
-  const isSelectedDDocPartitioned = getSelectedDesignDocPartitioned(indexEditor, databases.isDbPartitioned);
-  return {
-    database: indexEditor.database,
-    isNewView: indexEditor.isNewView,
-    viewName: indexEditor.viewName,
-    designDocs: indexEditor.designDocs,
-    designDocList: getDesignDocList(indexEditor),
-    originalViewName: indexEditor.originalViewName,
-    originalDesignDocName: indexEditor.originalDesignDocName,
-    isNewDesignDoc: indexEditor.isNewDesignDoc,
-    designDocId: indexEditor.designDocId,
-    designDocPartitioned: isSelectedDDocPartitioned,
-    newDesignDocName: indexEditor.newDesignDocName,
-    newDesignDocPartitioned: indexEditor.newDesignDocPartitioned,
-    saveDesignDoc: getSaveDesignDoc(indexEditor, databases.isDbPartitioned),
-    map: indexEditor.view.map,
-    isLoading: indexEditor.isLoading,
-    reduce: indexEditor.view.reduce,
-    reduceOptions: indexEditor.reduceOptions,
-    reduceSelectedOption: reduceSelectedOption(indexEditor),
-    hasCustomReduce: hasCustomReduce(indexEditor),
-    hasReduce: !!indexEditor.view.reduce,
-    isDbPartitioned: databases.isDbPartitioned,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    saveView: (viewInfo, navigateToURL) => {
-      dispatch(Actions.saveView(viewInfo, navigateToURL));
-    },
-
-    changeViewName: (name) => {
-      dispatch(Actions.changeViewName(name));
-    },
-
-    updateMapCode: (code) => {
-      dispatch(Actions.updateMapCode(code));
-    },
-
-    selectDesignDoc: (designDoc) => {
-      dispatch(Actions.selectDesignDoc(designDoc));
-    },
-
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Actions.updateNewDesignDocName(designDocName));
-    },
-
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Actions.updateNewDesignDocPartitioned(isPartitioned));
-    },
-
-    updateReduceCode: (code) => {
-      dispatch(Actions.updateReduceCode(code));
-    },
-
-    selectReduceChanged: (reduceOption) => {
-      dispatch(Actions.selectReduceChanged(reduceOption));
-    }
-  };
-};
-
-const IndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(IndexEditor);
-
-export default IndexEditorContainer;
diff --git a/app/addons/documents/index-editor/components/ReduceEditor.js b/app/addons/documents/index-editor/components/ReduceEditor.js
deleted file mode 100644
index 2520576..0000000
--- a/app/addons/documents/index-editor/components/ReduceEditor.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import app from '../../../../app';
-import ReactComponents from '../../../components/react-components';
-
-const getDocUrl = app.helpers.getDocUrl;
-const {CodeEditorPanel, StyledSelect} = ReactComponents;
-
-export default class ReduceEditor extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  getOptionsList() {
-    return this.props.reduceOptions.map((reduce, i) => {
-      return <option key={i} value={reduce}>{reduce}</option>;
-    });
-  }
-
-  getReduceValue() {
-    if (!this.props.hasReduce) {
-      return null;
-    }
-
-    if (!this.props.hasCustomReduce) {
-      return this.props.reduce;
-    }
-
-    return this.reduceEditor.getValue();
-  }
-
-  getEditor() {
-    return this.reduceEditor.getEditor();
-  }
-
-  updateReduceCode(code) {
-    this.props.updateReduceCode(code);
-  }
-
-  selectChange(event) {
-    this.props.selectReduceChanged(event.target.value);
-  }
-
-  render() {
-    const reduceOptions = this.getOptionsList();
-    let customReduceSection;
-
-    if (this.props.hasCustomReduce && this.props.customReducerSupported) {
-      customReduceSection = <CodeEditorPanel
-        ref={node => this.reduceEditor = node}
-        id='reduce-function'
-        title={'Custom Reduce function'}
-        defaultCode={this.props.reduce}
-        allowZenMode={false}
-        blur={this.updateReduceCode.bind(this)}
-      />;
-    } else if (!this.props.customReducerSupported) {
-      customReduceSection = (
-        <div className="reduce-editor-warning">
-          <label>Partitioned views do not support custom reduce functions.</label>
-        </div>
-      );
-    }
-
-    return (
-      <div>
-        <div className="control-group">
-          <label htmlFor="reduce-function-selector">
-            <span>Reduce (optional)</span>
-            <a
-              className="help-link"
-              data-bypass="true"
-              href={getDocUrl('REDUCE_FUNCS')}
-              target="_blank"
-              rel="noopener noreferrer"
-            >
-              <i className="icon-question-sign"></i>
-            </a>
-          </label>
-          <StyledSelect
-            selectContent={reduceOptions}
-            selectChange={this.selectChange.bind(this)}
-            selectId="reduce-function-selector"
-            selectValue={this.props.reduceSelectedOption} />
-        </div>
-        {customReduceSection}
-      </div>
-    );
-  }
-}
-
-ReduceEditor.defaultProps = {
-  customReducerSupported: true
-};
-
-ReduceEditor.propTypes = {
-  reduceOptions: PropTypes.array.isRequired,
-  hasReduce: PropTypes.bool.isRequired,
-  hasCustomReduce: PropTypes.bool.isRequired,
-  customReducerSupported: PropTypes.bool,
-  reduce: PropTypes.string,
-  reduceSelectedOption: PropTypes.string.isRequired,
-  updateReduceCode: PropTypes.func.isRequired,
-  selectReduceChanged: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-editor/reducers.js b/app/addons/documents/index-editor/reducers.js
deleted file mode 100644
index 51988f6..0000000
--- a/app/addons/documents/index-editor/reducers.js
+++ /dev/null
@@ -1,219 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-import Resources from '../resources';
-import Helpers from '../helpers';
-
-const defaultMap = 'function (doc) {\n  emit(doc._id, 1);\n}';
-const defaultReduce = 'function (keys, values, rereduce) {\n  if (rereduce) {\n    return sum(values);\n  } else {\n    return values.length;\n  }\n}';
-const builtInReducers = ['_sum', '_count', '_stats', '_approx_count_distinct'];
-const allReducers = builtInReducers.concat(['CUSTOM', 'NONE']);
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  isLoading: true,
-  view: { reduce: '', map: defaultMap },
-  database: { id: '0' },
-  designDocId: '',
-  isNewDesignDoc: false,
-  newDesignDocName: '',
-  newDesignDocPartitioned: true,
-  isNewView: false,
-  viewName: '',
-  originalViewName: '',
-  originalDesignDocName: '',
-  reduceOptions: allReducers
-};
-
-function editIndex(state, options) {
-  const newState = {
-    ...state,
-    isLoading: false,
-    newDesignDocName: '',
-    isNewView: options.isNewView,
-    viewName: options.viewName || 'viewName',
-    isNewDesignDoc: options.isNewDesignDoc || false,
-    designDocs: options.designDocs,
-    designDocId: options.designDocId,
-    originalDesignDocName: options.designDocId,
-    database: options.database
-  };
-  newState.originalViewName = newState.viewName;
-  newState.view = getView(newState);
-  return newState;
-}
-
-function getView(state) {
-  if (state.isNewView || state.isNewDesignDoc) {
-    return { reduce: '', map: defaultMap };
-  }
-
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.designDocId == ddoc.id;
-  }).dDocModel();
-  return designDoc.get('views')[state.viewName];
-}
-
-export function getSelectedDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.designDocId === ddoc.id;
-  });
-  if (designDoc) {
-    return Helpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export function reduceSelectedOption(state) {
-  if (!state.view.reduce) {
-    return 'NONE';
-  }
-  if (hasCustomReduce(state)) {
-    return 'CUSTOM';
-  }
-  return state.view.reduce;
-}
-
-export function hasCustomReduce(state) {
-  if (state.view.reduce) {
-    return !builtInReducers.includes(state.view.reduce);
-  }
-  return false;
-}
-
-export function getSaveDesignDoc(state, isDbPartitioned) {
-  if (state.designDocId === 'new-doc') {
-    const doc = {
-      _id: '_design/' + state.newDesignDocName,
-      views: {},
-      language: 'javascript'
-    };
-    const dDoc = new Resources.Doc(doc, { database: state.database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(state.newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  if (!state.designDocs) {
-    return null;
-  }
-
-  const foundDoc = state.designDocs.find(ddoc => {
-    return ddoc.id === state.designDocId;
-  });
-
-  return foundDoc ? foundDoc.dDocModel() : null;
-}
-
-// returns a simple array of design doc IDs. Omits mango docs
-export function getDesignDocList(state) {
-  if (!state.designDocs) {
-    return [];
-  }
-  return state.designDocs.filter(doc => {
-    return !doc.isMangoDoc();
-  }).map(doc => {
-    return doc.id;
-  });
-}
-
-export default function indexEditor(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.CLEAR_INDEX:
-      return {
-        ...initialState
-      };
-
-    case ActionTypes.EDIT_INDEX:
-      return editIndex(state, options);
-
-    case ActionTypes.EDIT_NEW_INDEX:
-      return editIndex(state, options);
-
-    case ActionTypes.VIEW_NAME_CHANGE:
-      return {
-        ...state,
-        viewName: action.name
-      };
-
-    case ActionTypes.SELECT_REDUCE_CHANGE:
-      let newReduce = action.reduceSelectedOption;
-      if (newReduce === 'NONE') {
-        newReduce = '';
-      }
-      if (newReduce === 'CUSTOM') {
-        newReduce = defaultReduce;
-      }
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          reduce: newReduce
-        }
-      };
-
-    case ActionTypes.DESIGN_DOC_CHANGE:
-      return {
-        ...state,
-        designDocId: options.value
-      };
-
-    case ActionTypes.VIEW_SAVED:
-      return state;
-
-    case ActionTypes.VIEW_CREATED:
-      return state;
-
-    case ActionTypes.VIEW_ADD_DESIGN_DOC:
-      return {
-        ...state,
-        designDocId: action.designDoc._id
-      };
-
-    case ActionTypes.VIEW_UPDATE_MAP_CODE:
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          map: action.code
-        }
-      };
-
-    case ActionTypes.VIEW_UPDATE_REDUCE_CODE:
-      return {
-        ...state,
-        view: {
-          ...state.view,
-          reduce: action.code
-        }
-      };
-
-    case ActionTypes.DESIGN_DOC_NEW_NAME_UPDATED:
-      return {
-        ...state,
-        newDesignDocName: options.value
-      };
-
-    case ActionTypes.DESIGN_DOC_NEW_PARTITIONED_UPDATED:
-      return {
-        ...state,
-        newDesignDocPartitioned: options.value
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/index-results/actions/base.js b/app/addons/documents/index-results/actions/base.js
deleted file mode 100644
index c39f1f4..0000000
--- a/app/addons/documents/index-results/actions/base.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from '../actiontypes';
-import { getDocId, getDocRev, isJSONDocBulkDeletable } from "../helpers/shared-helpers";
-
-export const partitionParamNotSupported = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED
-  };
-};
-
-export const partitionParamIsMandatory = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY
-  };
-};
-
-export const nowLoading = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING
-  };
-};
-
-export const resetState = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE
-  };
-};
-
-export const newResultsAvailable = (docs, params, canShowNext, docType, executionStats, warning) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS,
-    docs: docs,
-    params: params,
-    canShowNext: canShowNext,
-    docType: docType,
-    executionStats: executionStats,
-    warning: warning
-  };
-};
-
-export const newSelectedDocs = (selectedDocs = []) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS,
-    selectedDocs: selectedDocs
-  };
-};
-
-export const selectDoc = (doc, selectedDocs) => {
-  // locate the doc in the selected docs array if it exists
-  const indexInSelectedDocs = selectedDocs.findIndex((selectedDoc) => {
-    return selectedDoc._id === doc._id;
-  });
-
-  // if the doc exists in the selectedDocs array, remove it. This occurs
-  // when a user has deselected or unchecked a doc from the list of results.
-  if (indexInSelectedDocs > -1) {
-    selectedDocs.splice(indexInSelectedDocs, 1);
-
-  // otherwise, add the _deleted: true flag and push it on to the array.
-  } else {
-    doc._deleted = true;
-    selectedDocs.push(doc);
-  }
-
-  return newSelectedDocs(selectedDocs);
-};
-
-export const bulkCheckOrUncheck = (docs, selectedDocs, allDocumentsSelected, docType) => {
-  docs.forEach((doc) => {
-    if (!isJSONDocBulkDeletable(doc, docType)) {
-      return;
-    }
-    // find the index of the doc in the selectedDocs array
-    const indexInSelectedDocs = selectedDocs.findIndex((selectedDoc) => {
-      return getDocId(doc, docType) === selectedDoc._id;
-    });
-
-    // remove the doc if we know all the documents are currently selected
-    if (allDocumentsSelected) {
-      selectedDocs.splice(indexInSelectedDocs, 1);
-    // otherwise, add the doc if it doesn't exist in the selectedDocs array
-    } else if (indexInSelectedDocs === -1) {
-      selectedDocs.push({
-        _id: getDocId(doc, docType),
-        _rev: getDocRev(doc, docType),
-        _deleted: true
-      });
-    }
-  });
-
-  return newSelectedDocs(selectedDocs);
-};
-
-export const changeLayout = (newLayout) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT,
-    layout: newLayout
-  };
-};
-
-export const changeTableHeaderAttribute = (newField, selectedFields) => {
-  selectedFields[newField.index] = newField.newSelectedRow;
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE,
-    selectedFieldsTableView: selectedFields
-  };
-};
-
-export const updateResultsStyle = (newStyle) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_SET_STYLE,
-    resultsStyle: newStyle
-  };
-};
diff --git a/app/addons/documents/index-results/actions/fetch.js b/app/addons/documents/index-results/actions/fetch.js
deleted file mode 100644
index 148ee43..0000000
--- a/app/addons/documents/index-results/actions/fetch.js
+++ /dev/null
@@ -1,208 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../../core/api';
-import SidebarActions from '../../sidebar/actions';
-import Constants from '../../constants';
-import { errorReason } from '../helpers/shared-helpers';
-import * as IndexResultsAPI from '../api';
-import { nowLoading, newResultsAvailable, newSelectedDocs,
-  changeLayout, resetState, partitionParamNotSupported, partitionParamIsMandatory } from './base';
-
-const maxDocLimit = 10000;
-
-// This is a helper function to determine what params need to be sent to couch based
-// on what the user entered (i.e. queryOptionsParams) and what fauxton is using to
-// emulate pagination (i.e. fetchParams).
-export const mergeParams = (fetchParams, queryOptionsParams) => {
-  const params = {};
-
-  // determine the final "index" or "position" in the total result list based on the
-  // user's skip and limit inputs.  If queryOptionsParams.limit is empty,
-  // finalDocPosition will be NaN.  That's ok.
-  const finalDocPosition = (queryOptionsParams.skip || 0) + queryOptionsParams.limit;
-
-  // The skip value sent to couch will be the max of our current pagination skip
-  // (i.e. fetchParams.skip) and the user's original skip input (i.e. queryOptionsParams.skip).
-  // The limit will continue to be our pagination limit.
-  params.skip = Math.max(fetchParams.skip, queryOptionsParams.skip || 0);
-  params.limit = fetchParams.limit;
-  if (fetchParams.conflicts) {
-    params.conflicts = true;
-  }
-
-  // Determine the total number of documents remaining based on the user's skip and
-  // limit inputs.  Again, note that this will be NaN if queryOptionsParams.limit is
-  // empty.  That's ok.
-  const totalDocsRemaining = finalDocPosition - params.skip;
-
-  // return the merged params to send to couch and the num docs remaining.
-  return {
-    params: Object.assign({}, queryOptionsParams, params),
-    totalDocsRemaining: totalDocsRemaining
-  };
-};
-
-export const removeOverflowDocsAndCalculateHasNext = (docs, totalDocsRemaining, fetchLimit) => {
-  // Now is the time to determine if we have another page of results
-  // after this set of documents.  We also want to manipulate the array
-  // of docs because we always search with a limit larger than the desired
-  // number of results.  This is necessaary to emulate pagination.
-  let canShowNext = false;
-  if (totalDocsRemaining && docs.length > totalDocsRemaining) {
-    // We know the user manually entered a limit and we've reached the
-    // end of their desired results.  We need to remove any extra results
-    // that were returned because of our pagination emulation logic.
-    docs.splice(totalDocsRemaining);
-  } else if (docs.length === fetchLimit) {
-    // The number of docs returned is equal to our params.limit, which is
-    // one more than our perPage size.  We know that there is another
-    // page of results after this.
-    docs.splice(fetchLimit - 1);
-    canShowNext = true;
-  }
-
-  return {
-    finalDocList: docs,
-    canShowNext
-  };
-};
-
-// All the business logic for fetching docs from couch.
-// Arguments:
-// - queryDocs -> a function that fetches the docs. Accepts fetch params and returns a Promise of {docs[], docType}.
-// - fetchParams -> the internal params fauxton uses to emulate pagination
-// - queryOptionsParams -> manual query params entered by user
-export const fetchDocs = (queryDocs, fetchParams, queryOptionsParams) => {
-  const { params, totalDocsRemaining } = mergeParams(fetchParams, queryOptionsParams);
-  params.limit = Math.min(params.limit, maxDocLimit);
-
-  return (dispatch) => {
-    // first, tell app state that we're loading
-    dispatch(nowLoading());
-
-    // now fetch the results
-    return queryDocs(params).then(({ docs, docType, executionStats, warning, layout }) => {
-      const {
-        finalDocList,
-        canShowNext
-      } = removeOverflowDocsAndCalculateHasNext(docs, totalDocsRemaining, params.limit);
-
-      if (layout) {
-        dispatch(changeLayout(layout));
-      }
-      // dispatch that we're all done
-      dispatch(newResultsAvailable(finalDocList, params, canShowNext, docType, executionStats, warning));
-    }).catch((error) => {
-      if (error && error.message.includes('`partition` parameter is not supported')) {
-        dispatch(partitionParamNotSupported());
-      } else if (error && error.message.includes('`partition` parameter is mandatory')) {
-        dispatch(partitionParamIsMandatory());
-      } else {
-        FauxtonAPI.addNotification({
-          msg: 'Error running query. ' + errorReason(error),
-          type: 'error',
-          clear: true
-        });
-      }
-      dispatch(resetState());
-    });
-  };
-};
-
-
-export const deleteErrorMessage = (ids) => {
-  let msg = 'Failed to delete your document!';
-
-  if (ids) {
-    msg = 'Failed to delete: ' + ids.join(', ');
-  }
-
-  FauxtonAPI.addNotification({
-    msg: msg,
-    type: 'error',
-    clear:  true
-  });
-};
-
-export const validateBulkDelete = (docs) => {
-  const itemsLength = docs.length;
-
-  const msg = (itemsLength === 1) ? 'Are you sure you want to delete this doc?' :
-    'Are you sure you want to delete these ' + itemsLength + ' docs?';
-
-  if (itemsLength === 0) {
-    window.alert('Please select the document rows you want to delete.');
-    return false;
-  }
-
-  if (!window.confirm(msg)) {
-    return false;
-  }
-
-  return true;
-};
-
-export const bulkDeleteDocs = (databaseName, queryDocs, docs, designDocs, fetchParams, queryOptionsParams, docType) => {
-  if (!validateBulkDelete(docs)) {
-    return false;
-  }
-
-  return (dispatch) => {
-    let postPromise, payload;
-    if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-      payload = { docids: docs.map(doc => doc._id) };
-      postPromise = IndexResultsAPI.postToIndexBulkDelete(databaseName, payload);
-    } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-        || docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-      payload = { docs: docs };
-      postPromise = IndexResultsAPI.postToBulkDocs(databaseName, payload);
-    } else {
-      throw new Error('Invalid document type: ' + docType);
-    }
-    return postPromise.then((res) => {
-      if (res.error) {
-        deleteErrorMessage();
-        return;
-      }
-      processBulkDeleteResponse(res, docs, designDocs, docType);
-      dispatch(newSelectedDocs());
-      dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-    });
-  };
-};
-
-export const processBulkDeleteResponse = (res, deletedDocs, designDocs, docType) => {
-  FauxtonAPI.addNotification({
-    msg: 'Successfully deleted your docs',
-    clear:  true
-  });
-
-  let failedDocs = [];
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    if (res.fail) {
-      failedDocs = res.fail.map(doc => doc.id);
-    }
-  } else {
-    failedDocs = res.filter(doc => !!doc.error).map(doc => doc.id);
-  }
-
-  const hasDesignDocs = !!deletedDocs.map(d => d._id).find((_id) => /_design/.test(_id));
-
-  if (failedDocs.length > 0) {
-    deleteErrorMessage(failedDocs);
-  }
-
-  if (designDocs && hasDesignDocs) {
-    SidebarActions.dispatchUpdateDesignDocs(designDocs);
-  }
-};
diff --git a/app/addons/documents/index-results/actions/pagination.js b/app/addons/documents/index-results/actions/pagination.js
deleted file mode 100644
index 8843e20..0000000
--- a/app/addons/documents/index-results/actions/pagination.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../../core/api';
-import { fetchDocs } from './fetch';
-import ActionTypes from '../actiontypes';
-
-export const toggleShowAllColumns = () => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS
-  };
-};
-
-export const setPerPage = (amount) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE,
-    perPage: amount
-  };
-};
-
-export const resetFetchParamsBeforePerPageChange = (fetchParams, queryOptionsParams, amount) => {
-  return Object.assign({}, fetchParams, {
-    limit: amount + 1,
-    skip: queryOptionsParams.skip || 0
-  });
-};
-
-export const updatePerPageResults = (queryDocs, fetchParams, queryOptionsParams, amount) => {
-  // Set the query limit to the perPage + 1 so we know if there is
-  // a next page.  We also need to reset to the beginning of all
-  // possible pages since our logic to paginate backwards can't handle
-  // changing perPage amounts.
-  fetchParams = resetFetchParamsBeforePerPageChange(fetchParams, queryOptionsParams, amount);
-
-  return (dispatch) => {
-    dispatch(setPerPage(amount));
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const incrementSkipForPageNext = (fetchParams, perPage) => {
-  return Object.assign({}, fetchParams, {
-    skip: fetchParams.skip + perPage
-  });
-};
-
-export const paginateNext = (queryDocs, fetchParams, queryOptionsParams, perPage) => {
-  // add the perPage to the previous skip.
-  fetchParams = incrementSkipForPageNext(fetchParams, perPage);
-
-  return (dispatch) => {
-    dispatch({
-      type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT
-    });
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const decrementSkipForPagePrevious = (fetchParams, perPage) => {
-  return Object.assign({}, fetchParams, {
-    skip: Math.max(fetchParams.skip - perPage, 0)
-  });
-};
-
-export const paginatePrevious = (queryDocs, fetchParams, queryOptionsParams, perPage) => {
-  // subtract the perPage to the previous skip.
-  fetchParams = decrementSkipForPagePrevious(fetchParams, perPage);
-
-  return (dispatch) => {
-    dispatch({
-      type: ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS
-    });
-    dispatch(fetchDocs(queryDocs, fetchParams, queryOptionsParams));
-  };
-};
-
-export const resetPagination = (perPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE) => {
-  return setPerPage(perPage);
-};
diff --git a/app/addons/documents/index-results/actions/queryoptions.js b/app/addons/documents/index-results/actions/queryoptions.js
deleted file mode 100644
index fc3c60a..0000000
--- a/app/addons/documents/index-results/actions/queryoptions.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from '../actiontypes';
-import { fetchDocs } from './fetch';
-
-const updateQueryOptions = (queryOptions) => {
-  return {
-    type: ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS,
-    options: queryOptions
-  };
-};
-
-export const resetFetchParamsBeforeExecute = (perPage) => {
-  return {
-    limit: perPage + 1,
-    skip: 0
-  };
-};
-
-export const queryOptionsExecute = (queryDocs, queryOptionsParams, perPage) => {
-  const fetchParams = resetFetchParamsBeforeExecute(perPage);
-  return fetchDocs(queryDocs, fetchParams, queryOptionsParams);
-};
-
-export const queryOptionsToggleVisibility = (newVisibility) => {
-  return updateQueryOptions({
-    isVisible: newVisibility
-  });
-};
-
-export const queryOptionsToggleReduce = (previousReduce) => {
-  if (previousReduce) {
-    return updateQueryOptions({
-      reduce: !previousReduce
-    });
-  }
-  // Disables includeDocs if reduce is changing to true
-  return updateQueryOptions({
-    reduce: !previousReduce,
-    includeDocs: false
-  });
-
-};
-
-export const queryOptionsUpdateGroupLevel = (newGroupLevel) => {
-  return updateQueryOptions({
-    groupLevel: newGroupLevel
-  });
-};
-
-export const queryOptionsToggleByKeys = (previousShowByKeys) => {
-  return updateQueryOptions({
-    showByKeys: !previousShowByKeys,
-    showBetweenKeys: !!previousShowByKeys
-  });
-};
-
-export const queryOptionsToggleBetweenKeys = (previousShowBetweenKeys) => {
-  return updateQueryOptions({
-    showBetweenKeys: !previousShowBetweenKeys,
-    showByKeys: !!previousShowBetweenKeys
-  });
-};
-
-export const queryOptionsUpdateBetweenKeys = (newBetweenKeys) => {
-  return updateQueryOptions({
-    betweenKeys: newBetweenKeys
-  });
-};
-
-export const queryOptionsUpdateByKeys = (newByKeys) => {
-  return updateQueryOptions({
-    byKeys: newByKeys
-  });
-};
-
-export const queryOptionsToggleDescending = (previousDescending) => {
-  return updateQueryOptions({
-    descending: !previousDescending
-  });
-};
-
-export const queryOptionsUpdateSkip = (newSkip) => {
-  return updateQueryOptions({
-    skip: newSkip
-  });
-};
-
-export const queryOptionsUpdateLimit = (newLimit) => {
-  return updateQueryOptions({
-    limit: newLimit
-  });
-};
-
-export const queryOptionsToggleIncludeDocs = (previousIncludeDocs) => {
-  return updateQueryOptions({
-    includeDocs: !previousIncludeDocs
-  });
-};
-
-export const queryOptionsFilterOnlyDdocs = () => {
-  return updateQueryOptions({
-    betweenKeys: {
-      include: false,
-      startkey: '"_design"',
-      endkey: '"_design0"'
-    },
-    showBetweenKeys: true,
-    showByKeys: false
-  });
-};
-
-export const queryOptionsRemoveFilterOnlyDdocs = () => {
-  return updateQueryOptions({
-    betweenKeys: {},
-    showBetweenKeys: false,
-    showByKeys: false
-  });
-};
-
-export const queryOptionsToggleStable = previous => {
-  return updateQueryOptions({
-    stable: !previous
-  });
-};
-
-export const queryOptionsChangeUpdate = value => {
-  return updateQueryOptions({
-    update: value.toString()
-  });
-};
diff --git a/app/addons/documents/index-results/actiontypes.js b/app/addons/documents/index-results/actiontypes.js
deleted file mode 100644
index fbd9aa2..0000000
--- a/app/addons/documents/index-results/actiontypes.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed 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.
-
-export default {
-  INDEX_RESULTS_NEW_RESULTS: 'INDEX_RESULTS_NEW_RESULTS',
-  INDEX_RESULTS_RESET: 'INDEX_RESULTS_RESET',
-  INDEX_RESULTS_SELECT_DOC: 'INDEX_RESULTS_SELECT_DOC',
-  INDEX_RESULTS_CLEAR_RESULTS: 'INDEX_RESULTS_CLEAR_RESULTS',
-  INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS: 'INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS',
-  INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE: 'INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE',
-  INDEX_RESULTS_CLEAR_SELECTED_ITEMS: 'INDEX_RESULTS_CLEAR_SELECTED_ITEMS',
-  INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW: 'INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW',
-  INDEX_RESULTS_REDUX_NEW_RESULTS: 'INDEX_RESULTS_REDUX_NEW_RESULTS',
-  INDEX_RESULTS_REDUX_IS_LOADING: 'INDEX_RESULTS_REDUX_IS_LOADING',
-  INDEX_RESULTS_REDUX_CHANGE_LAYOUT: 'INDEX_RESULTS_REDUX_CHANGE_LAYOUT',
-  INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS: 'INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS',
-  INDEX_RESULTS_REDUX_SET_PER_PAGE: 'INDEX_RESULTS_REDUX_SET_PER_PAGE',
-  INDEX_RESULTS_REDUX_PAGINATE_NEXT: 'INDEX_RESULTS_REDUX_PAGINATE_NEXT',
-  INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS: 'INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS',
-  INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS: 'INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS',
-  INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE: 'INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE',
-  INDEX_RESULTS_REDUX_RESET_STATE: 'INDEX_RESULTS_REDUX_RESET_STATE',
-  INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS: 'INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS',
-  INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED: 'INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED',
-  INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY: 'INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY',
-  INDEX_RESULTS_SET_STYLE: 'INDEX_RESULTS_SET_STYLE'
-};
diff --git a/app/addons/documents/index-results/api.js b/app/addons/documents/index-results/api.js
deleted file mode 100644
index b8bcd8f..0000000
--- a/app/addons/documents/index-results/api.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed 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.
-
-import '@webcomponents/url';
-import {get, post} from '../../../core/ajax';
-import app from '../../../app';
-import Constants from '../constants';
-import FauxtonAPI from '../../../core/api';
-
-export const queryAllDocs = (fetchUrl, partitionKey, params) => {
-  // Exclude params 'group', 'reduce' and 'group_level' if present since they not allowed for '_all_docs'
-  Object.assign(params, {reduce: undefined, group: undefined, group_level: undefined});
-  const query = app.utils.queryString(params);
-  const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
-  return get(url).then(json => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.rows,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW
-    };
-  });
-};
-
-export const queryMapReduceView = (fetchUrl, params) => {
-  // Adds the 'reduce' param in case it's not defined
-  if (params.reduce === undefined) {
-    params.reduce = false;
-  }
-  // reduce cannot be true when include_docs is true
-  if (params.include_docs && params.reduce) {
-    params.reduce = false;
-    params.group = undefined;
-    params.group_level = undefined;
-  }
-  // removes params not supported by partitioned views
-  const isPartitioned = fetchUrl.includes('/_partition/');
-  if (isPartitioned) {
-    params.stable = undefined;
-    params.conflicts = undefined;
-  }
-  const query = app.utils.queryString(params);
-  const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
-  return get(url).then(json => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.rows,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-      layout: undefined
-    };
-  });
-};
-
-export const postToBulkDocs = (databaseName, payload) => {
-  const url = FauxtonAPI.urls('bulk_docs', 'server', databaseName);
-  return post(url, payload);
-};
-
-export const postToIndexBulkDelete = (databaseName, payload) => {
-  const url = FauxtonAPI.urls('mango', 'index-server-bulk-delete', encodeURIComponent(databaseName));
-  return post(url, payload);
-};
diff --git a/app/addons/documents/index-results/components/pagination/PaginationFooter.js b/app/addons/documents/index-results/components/pagination/PaginationFooter.js
deleted file mode 100644
index 5f1c663..0000000
--- a/app/addons/documents/index-results/components/pagination/PaginationFooter.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import PagingControls from './PagingControls.js';
-import PerPageSelector from './PerPageSelector.js';
-import TableControls from './TableControls';
-
-export default class PaginationFooter extends React.Component {
-  constructor(props) {
-    super(props);
-  }
-
-  getPageNumberText () {
-    const { docs, pageStart, pageEnd } = this.props;
-
-    if (docs.length === 0) {
-      return <span>Showing 0 documents.</span>;
-    }
-
-    return <span>Showing document {pageStart} - {pageEnd}.</span>;
-  }
-
-  perPageChange (amount) {
-    const { updatePerPageResults, fetchParams, queryOptionsParams } = this.props;
-    updatePerPageResults(amount, fetchParams, queryOptionsParams);
-  }
-
-  nextClicked (event) {
-    event.preventDefault();
-
-    const { canShowNext, fetchParams, queryOptionsParams, paginateNext, perPage } = this.props;
-    if (canShowNext) {
-      paginateNext(fetchParams, queryOptionsParams, perPage);
-    }
-  }
-
-  previousClicked (event) {
-    event.preventDefault();
-
-    const { canShowPrevious, fetchParams, queryOptionsParams, paginatePrevious, perPage } = this.props;
-    if (canShowPrevious) {
-      paginatePrevious(fetchParams, queryOptionsParams, perPage);
-    }
-  }
-
-  render () {
-    const {
-      showPrioritizedEnabled,
-      hasResults,
-      prioritizedEnabled,
-      displayedFields,
-      perPage,
-      canShowNext,
-      canShowPrevious,
-      toggleShowAllColumns
-    } = this.props;
-
-    return (
-      <footer className="index-pagination pagination-footer">
-        <PagingControls
-          nextClicked={this.nextClicked.bind(this)}
-          previousClicked={this.previousClicked.bind(this)}
-          canShowNext={canShowNext}
-          canShowPrevious={canShowPrevious} />
-
-        <div className="footer-controls">
-          <div className="page-controls">
-            {showPrioritizedEnabled && hasResults ?
-              <TableControls
-                prioritizedEnabled={prioritizedEnabled}
-                displayedFields={displayedFields}
-                toggleShowAllColumns={toggleShowAllColumns} /> : null}
-          </div>
-          <PerPageSelector perPageChange={this.perPageChange.bind(this)} perPage={perPage} />
-          <div className="current-docs">
-            {this.getPageNumberText()}
-          </div>
-        </div>
-      </footer>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/pagination/PagingControls.js b/app/addons/documents/index-results/components/pagination/PagingControls.js
deleted file mode 100644
index 4be683e..0000000
--- a/app/addons/documents/index-results/components/pagination/PagingControls.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default function PagingControls ({ nextClicked, previousClicked, canShowPrevious, canShowNext }) {
-  let canShowPreviousClassName = '';
-  let canShowNextClassName = '';
-
-  if (!canShowPrevious) {
-    canShowPreviousClassName = 'disabled';
-  }
-
-  if (!canShowNext) {
-    canShowNextClassName = 'disabled';
-  }
-
-  return (
-    <div className="documents-pagination">
-      <ul className="pagination">
-        <li className={canShowPreviousClassName} >
-          <a id="previous" onClick={previousClicked} className="icon fonticon-left-open" href="#" data-bypass="true"></a>
-        </li>
-        <li className={canShowNextClassName} >
-          <a id="next" onClick={nextClicked} className="icon fonticon-right-open" href="#" data-bypass="true"></a>
-        </li>
-      </ul>
-    </div>
-  );
-}
-
-PagingControls.propTypes = {
-  nextClicked: PropTypes.func.isRequired,
-  previousClicked: PropTypes.func.isRequired,
-  canShowPrevious: PropTypes.bool.isRequired,
-  canShowNext: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/index-results/components/pagination/PerPageSelector.js b/app/addons/documents/index-results/components/pagination/PerPageSelector.js
deleted file mode 100644
index 97373f6..0000000
--- a/app/addons/documents/index-results/components/pagination/PerPageSelector.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class PerPageSelector extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  perPageChange (e) {
-    const perPage = parseInt(e.target.value, 10);
-    this.props.perPageChange(perPage);
-  }
-
-  getOptions () {
-    return _.map(this.props.options, (i) => {
-      return (<option value={i} key={i}>{i}</option>);
-    });
-  }
-
-  render () {
-    return (
-      <div id="per-page">
-        <label htmlFor="select-per-page" className="drop-down inline">
-          {this.props.label} &nbsp;
-          <select id="select-per-page" onChange={this.perPageChange.bind(this)} value={this.props.perPage.toString()} className="input-small">
-            {this.getOptions()}
-          </select>
-        </label>
-      </div>
-    );
-  }
-
-}
-
-PerPageSelector.defaultProps = {
-  label: 'Documents per page: ',
-  options: [5, 10, 20, 30, 50, 100]
-};
-
-PerPageSelector.propTypes = {
-  perPage: PropTypes.number.isRequired,
-  perPageChange: PropTypes.func.isRequired,
-  label: PropTypes.string,
-  options: PropTypes.array
-};
diff --git a/app/addons/documents/index-results/components/pagination/TableControls.js b/app/addons/documents/index-results/components/pagination/TableControls.js
deleted file mode 100644
index 58a5740..0000000
--- a/app/addons/documents/index-results/components/pagination/TableControls.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class TableControls extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  getAmountShownFields () {
-    const fields = this.props.displayedFields;
-
-    if (fields.shown === fields.allFieldCount) {
-      return (
-        <div className="pull-left shown-fields">
-          Showing {fields.shown} columns.
-        </div>
-      );
-    }
-
-    return (
-      <div className="pull-left shown-fields">
-        Showing {fields.shown} of {fields.allFieldCount} columns.
-      </div>
-    );
-  }
-
-  render () {
-    const { prioritizedEnabled, toggleShowAllColumns } = this.props;
-
-    return (
-      <div className="footer-table-control">
-        {this.getAmountShownFields()}
-        <div className="footer-doc-control-prioritized-wrapper pull-left">
-          <label htmlFor="footer-doc-control-prioritized">
-            <input
-              id="footer-doc-control-prioritized"
-              checked={prioritizedEnabled}
-              onChange={toggleShowAllColumns}
-              type="checkbox">
-            </input>
-            Show all columns.
-          </label>
-        </div>
-      </div>
-    );
-  }
-}
-
-TableControls.propTypes = {
-  prioritizedEnabled: PropTypes.bool.isRequired,
-  displayedFields: PropTypes.object.isRequired,
-  toggleShowAllColumns: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js b/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js
deleted file mode 100644
index 48f09b9..0000000
--- a/app/addons/documents/index-results/components/queryoptions/AdditionalParams.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-
-export default class AdditionalParams extends React.Component {
-  updateSkip (e) {
-    e.preventDefault();
-    let val = e.target.value;
-
-    //check skip is only numbers
-    if (!/^\d*$/.test(val)) {
-      FauxtonAPI.addNotification({
-        msg: 'Skip can only be a number',
-        type: 'error'
-      });
-      val = this.props.skip;
-    }
-
-    this.props.updateSkip(val);
-  }
-
-  updateLimit (e) {
-    e.preventDefault();
-    this.props.updateLimit(e.target.value);
-  }
-
-  toggleDescending () {
-    this.props.toggleDescending(this.props.descending);
-  }
-
-  render () {
-    return (
-      <div className="query-group" id="query-options-additional-params">
-        <div className="add-on additionalParams">Additional Parameters</div>
-        <div className="row-fluid fieldsets">
-          <div className="dropdown inline">
-            <label className="drop-down">
-              Limit
-              <select id="qoLimit" onChange={this.updateLimit.bind(this)} name="limit" value={this.props.limit} className="input-small">
-                <option value="none">None</option>
-                <option value={5}>5</option>
-                <option value={10}>10</option>
-                <option value={20}>20</option>
-                <option value={30}>30</option>
-                <option value={50}>50</option>
-                <option value={100}>100</option>
-                <option value={500}>500</option>
-              </select>
-            </label>
-          </div>
-        </div>
-        <div className="row-fluid fieldsets">
-          <div className="checkbox inline">
-            <input id="qoDescending" type="checkbox" onChange={this.toggleDescending.bind(this)} checked={this.props.descending} />
-            <label htmlFor="qoDescending">Descending</label>
-          </div>
-          <div className="dropdown inline">
-            <label htmlFor="qoSkip" className="drop-down">
-              Skip
-              <input value={this.props.skip} onChange={this.updateSkip.bind(this)} className="input-small" type="number" id="qoSkip" placeholder="# of rows" />
-            </label>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js b/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js
deleted file mode 100644
index 1fb2f90..0000000
--- a/app/addons/documents/index-results/components/queryoptions/KeySearchFields.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-export default class KeySearchFields extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  toggleByKeys () {
-    this.props.toggleByKeys();
-  }
-
-  toggleBetweenKeys () {
-    this.props.toggleBetweenKeys();
-  }
-
-  updateBetweenKeys () {
-    this.props.updateBetweenKeys({
-      startkey: this.startkey.value,
-      endkey: this.endkey.value,
-      include: this.props.betweenKeys.include
-    });
-  }
-
-  updateInclusiveEnd () {
-    this.props.updateBetweenKeys({
-      include: !this.props.betweenKeys.include,
-      startkey: this.props.betweenKeys.startkey,
-      endkey: this.props.betweenKeys.endkey
-    });
-  }
-
-  updateByKeys (e) {
-    this.props.updateByKeys(e.target.value);
-  }
-
-  render () {
-    let keysGroupClass = 'controls-group well js-query-keys-wrapper ';
-    let byKeysClass = 'row-fluid js-keys-section ';
-    let betweenKeysClass = byKeysClass;
-    let byKeysButtonClass = 'drop-down btn ';
-    let betweenKeysButtonClass = byKeysButtonClass;
-
-    if (!this.props.showByKeys && !this.props.showBetweenKeys) {
-      keysGroupClass += 'hide';
-    }
-
-    if (!this.props.showByKeys) {
-      byKeysClass += 'hide';
-    } else {
-      byKeysButtonClass += 'active';
-    }
-
-    if (!this.props.showBetweenKeys) {
-      betweenKeysClass += 'hide';
-    } else {
-      betweenKeysButtonClass += 'active';
-    }
-
-    return (
-      <div className="query-group" id="query-options-key-search">
-        <div className="add-on">Keys</div>
-        <div className="btn-group toggle-btns row-fluid">
-          <label style={{width: '101px'}} id="byKeys" onClick={this.toggleByKeys.bind(this)} className={byKeysButtonClass}>By Key(s)</label>
-          <label style={{width: '101px'}} id="betweenKeys" onClick={this.toggleBetweenKeys.bind(this)} className={betweenKeysButtonClass}>Between Keys</label>
-        </div>
-
-        <div className={keysGroupClass}>
-          <div className={byKeysClass} id="js-showKeys">
-            <div className="controls controls-row">
-              <label htmlFor="keys-input" className="drop-down">A key, or an array of keys.</label>
-              <textarea value={this.props.byKeys} onChange={this.updateByKeys.bind(this)} id="keys-input" className="input-xxlarge" rows="5" type="text"
-                placeholder='Enter either a single key ["123"] or an array of keys ["123", "456"]. A key value is the first parameter emitted in a map function. For example emit("123", 1) the key is "123".'></textarea>
-              <div id="keys-error" className="inline-block js-keys-error"></div>
-            </div>
-          </div>
-
-          <div className={betweenKeysClass} id="js-showStartEnd">
-            <div className="controls controls-row">
-              <div>
-                <label htmlFor="startkey" className="drop-down">Start key</label>
-                <input
-                  id="startkey"
-                  ref={node => this.startkey = node}
-                  type="text"
-                  onChange={this.updateBetweenKeys.bind(this)}
-                  value={this.props.betweenKeys.startkey}
-                  placeholder='e.g., "1234"' />
-              </div>
-              <div>
-                <label htmlFor="endkey" className="drop-down">End key</label>
-                <input
-                  id="endkey"
-                  ref={node => this.endkey = node}
-                  onChange={this.updateBetweenKeys.bind(this)}
-                  value={this.props.betweenKeys.endkey}
-                  type="text"
-                  placeholder='e.g., "1234"'/>
-                <div className="controls include-end-key-row checkbox controls-row inline">
-                  <input
-                    id="qoIncludeEndKeyInResults"
-                    type="checkbox"
-                    onChange={this.updateInclusiveEnd.bind(this)}
-                    checked={this.props.betweenKeys.include}/>
-                  <label htmlFor="qoIncludeEndKeyInResults">Include End Key in results</label>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js b/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js
deleted file mode 100644
index 179acf7..0000000
--- a/app/addons/documents/index-results/components/queryoptions/MainFieldsView.js
+++ /dev/null
@@ -1,176 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class MainFieldsView extends React.Component {
-  constructor(props) {
-    super(props);
-    this.toggleStable = this.toggleStable.bind(this);
-    this.onUpdateChange = this.onUpdateChange.bind(this);
-    this.toggleIncludeDocs = this.toggleIncludeDocs.bind(this);
-
-    this.updateOptions = [
-      {value: 'true', label: 'true'},
-      {value: 'lazy', label: 'lazy'},
-      {value: 'false', label: 'false'}
-    ];
-  }
-
-  toggleIncludeDocs() {
-    this.props.toggleIncludeDocs(this.props.includeDocs);
-  }
-
-  onUpdateChange(e) {
-    this.props.changeUpdateField(e.target.value);
-  }
-
-  groupLevelChange(e) {
-    this.props.updateGroupLevel(e.target.value);
-  }
-
-  groupLevel() {
-    if (!this.props.reduce) {
-      return null;
-    }
-
-    return (
-      <label className="drop-down inline" id="qoGroupLevelGroup">
-          Group Level
-        <select onChange={this.groupLevelChange.bind(this)} id="qoGroupLevel" value={this.props.groupLevel}
-          name="group_level" className="input-small">
-          <option value="0">None</option>
-          <option value="1">1</option>
-          <option value="2">2</option>
-          <option value="3">3</option>
-          <option value="4">4</option>
-          <option value="5">5</option>
-          <option value="6">6</option>
-          <option value="7">7</option>
-          <option value="8">8</option>
-          <option value="9">9</option>
-          <option value="exact">Exact</option>
-        </select>
-      </label>
-    );
-  }
-
-  toggleReduce() {
-    this.props.toggleReduce(this.props.reduce);
-  }
-
-  toggleStable() {
-    this.props.toggleStable(this.props.stable);
-  }
-
-  includeDocsOption() {
-    const {includeDocs, reduce} = this.props;
-    return (
-      <div className="checkbox inline">
-        <input disabled={reduce} onChange={this.toggleIncludeDocs} id="qoIncludeDocs"
-          name="include_docs" type="checkbox" checked={includeDocs}/>
-        <label className={reduce ? 'disabled' : ''} htmlFor="qoIncludeDocs" id="qoIncludeDocsLabel">Include
-            Docs</label>
-      </div>
-    );
-  }
-
-  reduceOption() {
-    const {showReduce, reduce} = this.props;
-    if (!showReduce) {
-      return null;
-    }
-
-    return (
-      <span>
-        <div className="checkbox inline">
-          <input id="qoReduce" name="reduce" onChange={this.toggleReduce.bind(this)} type="checkbox"
-            checked={reduce}/>
-          <label htmlFor="qoReduce">Reduce</label>
-        </div>
-        {this.groupLevel()}
-      </span>
-    );
-  }
-
-  stableOption() {
-    let {enableStable, stable} = this.props;
-
-    if (!enableStable) {
-      // makes sure Stable option always appears unchecked when disabled
-      stable = false;
-    }
-
-    return (
-      <div className="checkbox inline">
-        <input onChange={this.toggleStable} id="qoStable" name="stable"
-          type="checkbox" checked={stable} disabled={!enableStable}/>
-        <label className={enableStable ? '' : 'disabled'} htmlFor="qoStable" id="qoStableLabel">Stable</label>
-      </div>
-    );
-  }
-
-  updateOption() {
-    const { update } = this.props;
-    const selectOptions = this.updateOptions.map(option => {
-      return <option key={option.value} value={option.value}>{option.label}</option>;
-    });
-    return (
-      <div className="dropdown inline">
-        <label className="drop-down">
-          Update
-          <select className="input-small" id="qoUpdate" value={update} onChange={this.onUpdateChange}>
-            {selectOptions}
-          </select>
-        </label>
-      </div>
-    );
-  }
-
-  render() {
-    return (
-      <div className="query-group" id="query-options-main-fields">
-        <span className="add-on">
-          Query Options
-          <a className="help-link" href={this.props.docURL} target="_blank" rel="noopener noreferrer" data-bypass="true">
-            <i className="icon-question-sign"/>
-          </a>
-        </span>
-        <div className="row-fluid fieldsets">
-          {this.includeDocsOption()}
-          {this.reduceOption()}
-        </div>
-        <div className="row-fluid fieldsets">
-          {this.stableOption()}
-          {this.updateOption()}
-        </div>
-      </div>
-    );
-  }
-
-}
-
-MainFieldsView.propTypes = {
-  toggleIncludeDocs: PropTypes.func.isRequired,
-  includeDocs: PropTypes.bool.isRequired,
-  reduce: PropTypes.bool.isRequired,
-  toggleReduce: PropTypes.func,
-  updateGroupLevel: PropTypes.func,
-  docURL: PropTypes.string.isRequired,
-  stable: PropTypes.bool.isRequired,
-  toggleStable: PropTypes.func.isRequired,
-  update: PropTypes.string.isRequired,
-  changeUpdateField: PropTypes.func.isRequired,
-  showReduce: PropTypes.bool.isRequired,
-  enableStable: PropTypes.bool.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/QueryButtons.js b/app/addons/documents/index-results/components/queryoptions/QueryButtons.js
deleted file mode 100644
index 712f79a..0000000
--- a/app/addons/documents/index-results/components/queryoptions/QueryButtons.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default class QueryButtons extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  hideTray () {
-    this.props.onCancel();
-  }
-
-  render () {
-    return (
-      <div className="controls-group query-group">
-        <div id="button-options" className="controls controls-row">
-          <button type="submit" className="btn btn-secondary">Run Query</button>
-          <a onClick={this.hideTray.bind(this)} className="btn btn-cancelDark">Cancel</a>
-        </div>
-      </div>
-    );
-  }
-}
-
-QueryButtons.propTypes = {
-  onCancel: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/queryoptions/QueryOptions.js b/app/addons/documents/index-results/components/queryoptions/QueryOptions.js
deleted file mode 100644
index 3c63c92..0000000
--- a/app/addons/documents/index-results/components/queryoptions/QueryOptions.js
+++ /dev/null
@@ -1,187 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import GeneralComponents from '../../../../components/react-components';
-import Constants from '../../../constants';
-import MainFieldsView from './MainFieldsView';
-import KeySearchFields from './KeySearchFields';
-import AdditionalParams from './AdditionalParams';
-import QueryButtons from './QueryButtons';
-
-const { ToggleHeaderButton, TrayContents } = GeneralComponents;
-
-export default class QueryOptions extends React.Component {
-  constructor(props) {
-    super(props);
-    const {
-      ddocsOnly,
-      queryOptionsApplyFilterOnlyDdocs
-    } = props;
-
-    if (ddocsOnly) {
-      queryOptionsApplyFilterOnlyDdocs();
-    }
-  }
-
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    const {
-      ddocsOnly,
-      queryOptionsApplyFilterOnlyDdocs,
-      queryOptionsRemoveFilterOnlyDdocs,
-    } = this.props;
-
-    if (!ddocsOnly && nextProps.ddocsOnly) {
-      queryOptionsApplyFilterOnlyDdocs();
-    } else if (ddocsOnly && !nextProps.ddocsOnly) {
-      queryOptionsRemoveFilterOnlyDdocs();
-    }
-  }
-
-  componentWillUnmount() {
-    const {
-      ddocsOnly,
-      queryOptionsRemoveFilterOnlyDdocs
-    } = this.props;
-    if (ddocsOnly) {
-      // Remove filter it was set before
-      queryOptionsRemoveFilterOnlyDdocs();
-    }
-  }
-
-  executeQuery (e) {
-    if (e) { e.preventDefault(); }
-    this.closeTray();
-
-    const {
-      queryOptionsExecute,
-      queryOptionsParams,
-      perPage,
-      resetPagination,
-      selectedLayout,
-      changeLayout
-    } = this.props;
-
-    // reset pagination back to the beginning but hold on to the current perPage
-    resetPagination(perPage);
-
-    // We may have to change the layout based on include_docs.
-    const isMetadata = selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA;
-    if (isMetadata && queryOptionsParams.include_docs) {
-      changeLayout(Constants.LAYOUT_ORIENTATION.TABLE);
-    } else if (!isMetadata && !queryOptionsParams.include_docs) {
-      changeLayout(Constants.LAYOUT_ORIENTATION.METADATA);
-    }
-
-    // finally, run the query
-    queryOptionsExecute(queryOptionsParams, perPage);
-  }
-
-  toggleTrayVisibility () {
-    this.props.queryOptionsToggleVisibility(!this.props.contentVisible);
-  }
-
-  closeTray () {
-    this.props.queryOptionsToggleVisibility(false);
-  }
-
-  getTray () {
-    return (
-      <TrayContents closeTray={this.closeTray.bind(this)} contentVisible={this.props.contentVisible}
-        className="query-options" id="query-options-tray"
-        container={this}>
-
-        <form onSubmit={this.executeQuery.bind(this)} className="js-view-query-update custom-inputs">
-          <MainFieldsView
-            includeDocs={this.props.includeDocs}
-            toggleIncludeDocs={this.props.queryOptionsToggleIncludeDocs}
-            showReduce={this.props.showReduce}
-            reduce={this.props.reduce}
-            toggleReduce={this.props.queryOptionsToggleReduce}
-            groupLevel={this.props.groupLevel}
-            updateGroupLevel={this.props.queryOptionsUpdateGroupLevel}
-            docURL={FauxtonAPI.constants.DOC_URLS.GENERAL}
-            enableStable={this.props.enableStable}
-            stable={this.props.stable}
-            toggleStable={this.props.queryOptionsToggleStable}
-            update={this.props.update}
-            changeUpdateField={this.props.queryOptionsChangeUpdate}
-          />
-          <KeySearchFields
-            key={1}
-            showByKeys={this.props.showByKeys}
-            showBetweenKeys={this.props.showBetweenKeys}
-            toggleByKeys={this.props.queryOptionsToggleByKeys}
-            toggleBetweenKeys={this.props.queryOptionsToggleBetweenKeys}
-            betweenKeys={this.props.betweenKeys}
-            updateBetweenKeys={this.props.queryOptionsUpdateBetweenKeys}
-            byKeys={this.props.byKeys}
-            updateByKeys={this.props.queryOptionsUpdateByKeys} />
-          <AdditionalParams
-            descending={this.props.descending}
-            toggleDescending={this.props.queryOptionsToggleDescending}
-            skip={this.props.skip}
-            updateSkip={this.props.queryOptionsUpdateSkip}
-            updateLimit={this.props.queryOptionsUpdateLimit}
-            limit={this.props.limit} />
-          <QueryButtons onCancel={this.closeTray.bind(this)} />
-        </form>
-      </TrayContents>
-    );
-  }
-
-  showAsActive() {
-    const { reduce, betweenKeys, byKeys, descending, skip, limit, stable, update } = this.props;
-    return !!((betweenKeys && betweenKeys.startkey) ||
-      byKeys || (limit && limit != 'none') || skip || reduce || descending || stable || update !== 'true');
-  }
-
-  render () {
-
-    return (
-      <div id="header-query-options">
-        <div id="query-options">
-          <div>
-            <ToggleHeaderButton
-              toggleCallback={this.toggleTrayVisibility.bind(this)}
-              containerClasses="header-control-box control-toggle-queryoptions"
-              title="Query Options"
-              fonticon="fonticon-gears"
-              text="Options"
-              active={this.showAsActive()} />
-            {this.getTray()}
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-QueryOptions.propTypes = {
-  contentVisible: PropTypes.bool.isRequired,
-  queryOptionsApplyFilterOnlyDdocs: PropTypes.func.isRequired,
-  queryOptionsRemoveFilterOnlyDdocs: PropTypes.func.isRequired,
-  queryOptionsExecute: PropTypes.func.isRequired,
-  queryOptionsParams: PropTypes.object.isRequired,
-  perPage: PropTypes.number.isRequired,
-  resetPagination: PropTypes.func.isRequired,
-  selectedLayout: PropTypes.string.isRequired,
-  changeLayout: PropTypes.func.isRequired,
-  queryOptionsToggleVisibility: PropTypes.func.isRequired,
-  queryOptionsToggleStable: PropTypes.func.isRequired,
-  queryOptionsChangeUpdate: PropTypes.func.isRequired,
-  stable: PropTypes.bool.isRequired,
-  update: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/IndexResults.js b/app/addons/documents/index-results/components/results/IndexResults.js
deleted file mode 100644
index 01982fa..0000000
--- a/app/addons/documents/index-results/components/results/IndexResults.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import ResultsScreen from './ResultsScreen';
-
-export default class IndexResults extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidMount () {
-    const {
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      fetchAtStartup
-    } = this.props;
-
-    // Fetch docs if requested
-    if (fetchAtStartup) {
-      fetchDocs(fetchParams, queryOptionsParams);
-    }
-  }
-
-  UNSAFE_componentWillUpdate (nextProps) {
-    const {
-      fetchDocs,
-      fetchParams,
-      queryOptionsParams,
-      ddocsOnly,
-      fetchUrl,
-      resetState,
-      partitionKey
-    } = nextProps;
-
-    // Indicates the selected sidebar item has changed, so it needs to fetch the new list of docs
-    if (this.props.ddocsOnly !== ddocsOnly || this.props.fetchUrl !== fetchUrl || this.props.partitionKey !== partitionKey) {
-      resetState();
-      // Need to reset skip and reduce here because 'resetState()'
-      // won't change props until the next update cycle
-      fetchDocs({...fetchParams, skip: 0},
-        {...queryOptionsParams, reduce: undefined, group: undefined, group_level: undefined});
-    }
-  }
-
-  componentWillUnmount () {
-    const { resetState } = this.props;
-    resetState();
-  }
-
-  deleteSelectedDocs () {
-    const { bulkDeleteDocs, fetchParams, selectedDocs, queryOptionsParams } = this.props;
-    bulkDeleteDocs(selectedDocs, fetchParams, queryOptionsParams);
-  }
-
-  isSelected (id) {
-    const { selectedDocs } = this.props;
-    // check whether this id exists in our array of selected docs
-    return selectedDocs.findIndex((doc) => {
-      return id === doc._id;
-    }) > -1;
-  }
-
-  docChecked (_id, _rev) {
-    if (!_id) {
-      return;
-    }
-    const { selectDoc, selectedDocs } = this.props;
-
-    // dispatch an action to push this doc on to the array of selected docs
-    const doc = {
-      _id: _id,
-      _rev: _rev
-    };
-
-    selectDoc(doc, selectedDocs);
-  }
-
-  toggleSelectAll () {
-    const {
-      docs,
-      selectedDocs,
-      allDocumentsSelected,
-      bulkCheckOrUncheck
-    } = this.props;
-
-    bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected);
-  }
-
-  render () {
-    const { results } = this.props;
-
-    return (
-      <ResultsScreen
-        removeItem={this.deleteSelectedDocs.bind(this)}
-        isSelected={this.isSelected.bind(this)}
-        docChecked={this.docChecked.bind(this)}
-        isListDeletable={results.hasBulkDeletableDoc}
-        toggleSelectAll={this.toggleSelectAll.bind(this)}
-        {...this.props} />
-    );
-  }
-}
-
-IndexResults.propTypes = {
-  fetchAtStartup: PropTypes.bool.isRequired,
-  fetchDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/NoResultsScreen.js b/app/addons/documents/index-results/components/results/NoResultsScreen.js
deleted file mode 100644
index c01fb01..0000000
--- a/app/addons/documents/index-results/components/results/NoResultsScreen.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export default function NoResultsScreen ({ text, isWarning }) {
-  const warningMsg = (
-    <div className='no-results-screen-warning'>
-      <i className='fonticon-attention-circled'></i>
-      {text}
-    </div>
-  );
-  return (
-    <div className="no-results-screen">
-      {isWarning ? warningMsg : null}
-      <div className="watermark-logo"></div>
-      {!isWarning ? <h3>{text}</h3> :  null}
-    </div>
-  );
-}
-
-NoResultsScreen.propTypes = {
-  text: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/components/results/ResultsScreen.js b/app/addons/documents/index-results/components/results/ResultsScreen.js
deleted file mode 100644
index d5220cb..0000000
--- a/app/addons/documents/index-results/components/results/ResultsScreen.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import Constants from '../../../constants';
-import Components from '../../../../components/react-components';
-import { ResultsToolBar } from '../../../components/results-toolbar';
-import NoResultsScreen from './NoResultsScreen';
-import TableView from './TableView';
-
-const { LoadLines, Document } = Components;
-
-export default class ResultsScreen extends React.Component {
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-  }
-
-  componentDidUpdate() {
-    prettyPrint();
-  }
-
-  onClick(id, doc) {
-    if (doc.url) {
-      FauxtonAPI.navigate(doc.url);
-    }
-  }
-
-  getUrlFragment(url) {
-    if (!this.props.isEditable) {
-      return null;
-    }
-
-    return (
-      <a href={url}>
-        <i className="fonticon-pencil"></i>
-      </a>
-    );
-  }
-
-  getDocumentList() {
-    const noop = () => { };
-    const data = this.props.results.results;
-    return _.map(data, (doc, i) => {
-      return (
-        <Document
-          key={doc.id + i}
-          doc={doc}
-          onClick={this.props.isEditable ? this.onClick : noop}
-          keylabel={doc.keylabel}
-          docContent={doc.content}
-          docType={this.props.docType}
-          checked={this.props.isSelected(doc.id)}
-          header={doc.header}
-          docChecked={this.props.docChecked}
-          isDeletable={doc.isDeletable}
-          docIdentifier={doc.id}
-          resultsStyle={this.props.resultsStyle}
-        >
-          {doc.url ? this.getUrlFragment(`#${doc.url}`) : doc.url}
-        </Document>
-      );
-    });
-  }
-
-  getDocumentStyleView() {
-    let classNames = 'view';
-
-    if (this.props.isListDeletable) {
-      classNames = `${classNames} show-select`;
-    }
-
-    return (
-      <div className={classNames}>
-        <div id="doc-list">{this.getDocumentList()}</div>
-      </div>
-    );
-  }
-
-  getTableStyleView() {
-    return (
-      <div>
-        <TableView
-          onClick={this.onClick}
-          docChecked={this.props.docChecked}
-          isSelected={this.props.isSelected}
-          isListDeletable={this.props.isListDeletable}
-          data={this.props.results}
-          isLoading={this.props.isLoading}
-          removeItem={this.props.removeItem}
-          isChecked={this.props.allDocumentsSelected}
-          hasSelectedItem={this.props.hasSelectedItem}
-          toggleSelect={this.toggleSelectAll}
-          changeField={this.props.changeTableHeaderAttribute}
-          resultsStyle={this.props.resultsStyle}
-          title="Select all docs that can be..."
-        />
-      </div>
-    );
-  }
-
-  getMainView() {
-    if (this.props.isLoading) {
-      return (
-        <div className="loading-lines-wrapper">
-          <LoadLines />
-        </div>
-      );
-    } else if (!this.props.noResultsWarning && this.props.hasResults) {
-      if (this.props.selectedLayout === Constants.LAYOUT_ORIENTATION.JSON) {
-        return this.getDocumentStyleView();
-      }
-      return this.getTableStyleView();
-    }
-  }
-
-  getNoResultScreen() {
-    if (!this.props.isLoading) {
-      if (this.props.noResultsWarning) {
-        return (
-          <NoResultsScreen
-            text={this.props.noResultsWarning}
-            isWarning={true}
-          />
-        );
-      } else if (!this.props.hasResults) {
-        return <NoResultsScreen text={this.props.textEmptyIndex} />;
-      }
-    }
-  }
-
-  render() {
-    return (
-      <div className="document-result-screen">
-        {this.getNoResultScreen()}
-        <ResultsToolBar {...this.props} />
-        {this.getMainView()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/results/TableRow.js b/app/addons/documents/index-results/components/results/TableRow.js
deleted file mode 100644
index 32614fe..0000000
--- a/app/addons/documents/index-results/components/results/TableRow.js
+++ /dev/null
@@ -1,163 +0,0 @@
-// Licensed 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../../../core/api';
-import Components from '../../../../components/react-components';
-import Constants from '../../../constants';
-import uuid from 'uuid';
-
-const { Copy } = Components;
-
-export default class TableRow extends React.Component {
-  static defaultProps = {
-    textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED
-  };
-
-  constructor (props) {
-    super(props);
-    this.state = {
-      checked: this.props.isSelected
-    };
-  }
-
-  onChange () {
-    this.props.docChecked(this.props.el.id, this.props.el._rev);
-  }
-
-  getRowContents (element, rowNumber) {
-    const el = element.content;
-
-    const row = this.props.data.selectedFields.map(function (k, i) {
-
-      const key = 'tableview-data-cell-' + rowNumber + k + i + el[k];
-      const stringified = ['object', 'boolean'].includes(typeof el[k]) ?
-        JSON.stringify(el[k], null, '  ') : el[k];
-
-      const classNames = classnames({
-        'showall': this.props.textOverflow === Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_FULL,
-        'small-font': this.props.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_SMALL,
-        'large-font': this.props.fontSize === Constants.INDEX_RESULTS_STYLE.FONT_SIZE_LARGE
-      });
-
-      return (
-        <td key={key} title={stringified} className={classNames} onClick={this.onClick.bind(this)}>
-          {stringified}
-        </td>
-      );
-    }.bind(this));
-
-    return row;
-  }
-
-  maybeGetCheckboxCell (el, i) {
-    return (
-      <td className="tableview-checkbox-cell" key={"tableview-checkbox-cell-" + i}>
-        {el.isDeletable ? <input
-          id={"checkbox-" + this.props.docIdentifier}
-          checked={this.props.isSelected}
-          type="checkbox"
-          onChange={this.onChange.bind(this)} /> : null}
-      </td>
-    );
-  }
-
-  getAdditionalInfoRow (el) {
-    const attachmentCount = Object.keys(el._attachments || {}).length;
-    let attachmentIndicator = null;
-    let textAttachments = null;
-
-    const conflictCount = Object.keys(el._conflicts || {}).length;
-    let conflictIndicator = null;
-    let textConflicts = null;
-
-
-    if (attachmentCount) {
-      textAttachments = attachmentCount === 1 ? attachmentCount + ' Attachment' : attachmentCount + ' Attachments';
-      attachmentIndicator = (
-        <div style={{display: 'inline', marginLeft: '5px'}} title={textAttachments}>
-          <i className="icon fonticon-paperclip"></i>{attachmentCount}
-        </div>
-      );
-    }
-
-    if (conflictCount) {
-      textConflicts = conflictCount === 1 ? conflictCount + ' Conflict' : conflictCount + ' Conflicts';
-      conflictIndicator = (
-        <div className="tableview-conflict" data-conflicts-indicator style={{display: 'inline'}} title={textConflicts}>
-          <i
-            style={{fontSize: '17px'}}
-            className="icon icon-code-fork"></i>{conflictCount}
-        </div>
-      );
-    }
-
-    return (
-      <td className="tableview-el-last" onClick={this.onClick.bind(this)}>
-        {conflictIndicator}
-        {attachmentIndicator}
-      </td>
-    );
-  }
-
-  getCopyButton (el) {
-    const text = JSON.stringify(el, null, '  ');
-    return (
-      <td title={text} className="tableview-el-copy">
-        <Copy
-          title={text}
-          text={text}
-          uniqueKey={uuid.v4()}
-          onClipboardClick={this.showCopiedMessage} />
-      </td>
-    );
-  }
-
-  showCopiedMessage () {
-    FauxtonAPI.addNotification({
-      msg: 'The document content has been copied to the clipboard.',
-      type: 'success',
-      clear: true
-    });
-  }
-
-  onClick (e) {
-    this.props.onClick(this.props.el._id, this.props.el, e);
-  }
-
-  render () {
-    const i = this.props.index;
-    const docContent = this.props.el.content;
-    const el = this.props.el;
-
-    return (
-      <tr key={"tableview-content-row-" + i}>
-        {this.maybeGetCheckboxCell(el, i)}
-        {this.getCopyButton(docContent)}
-        {this.getRowContents(el, i)}
-        {this.getAdditionalInfoRow(docContent)}
-      </tr>
-    );
-  }
-}
-
-TableRow.propTypes = {
-  docIdentifier: PropTypes.string.isRequired,
-  docChecked: PropTypes.func.isRequired,
-  isSelected: PropTypes.bool.isRequired,
-  index: PropTypes.number.isRequired,
-  data: PropTypes.object.isRequired,
-  onClick: PropTypes.func.isRequired,
-  textOverflow: PropTypes.string
-};
diff --git a/app/addons/documents/index-results/components/results/TableView.js b/app/addons/documents/index-results/components/results/TableView.js
deleted file mode 100644
index 3197839..0000000
--- a/app/addons/documents/index-results/components/results/TableView.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import TableRow from './TableRow';
-import WrappedAutocomplete from './WrappedAutocomplete';
-
-export default class TableView extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  getContentRows () {
-    const data = this.props.data.results;
-    const { textOverflow, fontSize } = this.props.resultsStyle;
-    return data.map(function (el, i) {
-      return (
-        <TableRow
-          onClick={this.props.onClick}
-          key={"tableview-row-component-" + i}
-          index={i}
-          el={el}
-          docIdentifier={el.id || "tableview-row-component-" + i}
-          docChecked={this.props.docChecked}
-          isSelected={this.props.isSelected(el.id)}
-          data={this.props.data}
-          textOverflow={textOverflow}
-          fontSize={fontSize} />
-      );
-    }.bind(this));
-  }
-
-  getOptionFieldRows (filtered) {
-    const notSelectedFields = this.props.data.notSelectedFields;
-
-    if (!notSelectedFields) {
-      return filtered.map(function (el, i) {
-        return <th key={'header-el-' + i}>{el}</th>;
-      });
-    }
-
-    return filtered.map(function (el, i) {
-      return (
-        <th key={'header-el-' + i}>
-          {this.getDropdown(
-            el,
-            this.props.data.schema,
-            i,
-            this.props.changeField,
-            this.props.data.selectedFields
-          )}
-        </th>
-      );
-    }.bind(this));
-  }
-
-  getDropdown (selectedField, notSelectedFields, i, changeField, selectedFields) {
-
-    return (
-      <WrappedAutocomplete
-        selectedField={selectedField}
-        notSelectedFields={notSelectedFields}
-        index={i}
-        changeField={changeField}
-        selectedFields={selectedFields} />
-    );
-  }
-
-  getHeader () {
-    const selectedFields = this.props.data.selectedFields;
-    const row = this.getOptionFieldRows(selectedFields);
-
-    return (
-      <tr key="tableview-content-row-header">
-        <th className="tableview-header-el-checkbox"></th>
-        <th className="tableview-el-copy"></th>
-        {row}
-        <th className="tableview-el-last"></th>
-      </tr>
-    );
-  }
-
-  render () {
-    return (
-      <div className="table-view-docs">
-        <table className="table table-striped">
-          <thead>
-            {this.getHeader()}
-          </thead>
-          <tbody>
-            {this.getContentRows()}
-          </tbody>
-        </table>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/index-results/components/results/WrappedAutocomplete.js b/app/addons/documents/index-results/components/results/WrappedAutocomplete.js
deleted file mode 100644
index 17c9814..0000000
--- a/app/addons/documents/index-results/components/results/WrappedAutocomplete.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactSelect from "react-select";
-
-export default function WrappedAutocomplete ({
-  selectedField,
-  notSelectedFields,
-  index,
-  changeField,
-  selectedFields
-}) {
-  const options = notSelectedFields.map((el) => {
-    return {value: el, label: el};
-  });
-
-  return (
-    <div className="table-container-autocomplete">
-      <div className="table-select-wrapper">
-        <ReactSelect
-          value={selectedField}
-          options={options}
-          clearable={false}
-          onChange={(el) => {
-            changeField({newSelectedRow: el.value, index: index}, selectedFields);
-          }}
-        />
-      </div>
-    </div>
-  );
-}
diff --git a/app/addons/documents/index-results/containers/ApiBarContainer.js b/app/addons/documents/index-results/containers/ApiBarContainer.js
deleted file mode 100644
index 72e3065..0000000
--- a/app/addons/documents/index-results/containers/ApiBarContainer.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import app from '../../../../app';
-import { ApiBarWrapper } from '../../../components/layouts';
-import { getQueryOptionsParams } from '../reducers';
-import FauxtonAPI from '../../../../core/api';
-
-const mapStateToProps = ({indexResults}, {docUrl, endpoint, endpointAddQueryOptions}) => {
-  if (!docUrl) {
-    docUrl = FauxtonAPI.constants.DOC_URLS.GENERAL;
-  }
-
-  if (endpoint && endpointAddQueryOptions) {
-    const query = app.utils.queryString(getQueryOptionsParams(indexResults));
-    if (query) {
-      endpoint = endpoint.indexOf('?') == -1 ? `${endpoint}?${query}` : `${endpoint}&${query}`;
-    }
-  }
-  return { docUrl, endpoint };
-};
-
-const ApiBarContainer = connect (
-  mapStateToProps
-)(ApiBarWrapper);
-
-export default ApiBarContainer;
-
-ApiBarContainer.propTypes = {
-  databaseName: PropTypes.string,
-  docUrl: PropTypes.string,
-  endpoint: PropTypes.string,
-  endpointAddQueryOptions: PropTypes.bool
-};
diff --git a/app/addons/documents/index-results/containers/IndexResultsContainer.js b/app/addons/documents/index-results/containers/IndexResultsContainer.js
deleted file mode 100644
index f0eca76..0000000
--- a/app/addons/documents/index-results/containers/IndexResultsContainer.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import IndexResults from '../components/results/IndexResults';
-import { fetchDocs, bulkDeleteDocs } from '../actions/fetch';
-import { queryOptionsToggleIncludeDocs } from '../actions/queryoptions';
-import {
-  selectDoc,
-  changeLayout,
-  bulkCheckOrUncheck,
-  changeTableHeaderAttribute,
-  resetState,
-  updateResultsStyle
-} from '../actions/base';
-import {
-  getDocs,
-  getSelectedDocs,
-  getIsLoading,
-  getHasResults,
-  getDataForRendering,
-  getIsEditable,
-  getSelectedLayout,
-  getAllDocsSelected,
-  getHasDocsSelected,
-  getNumDocsSelected,
-  getTextEmptyIndex,
-  getDocType,
-  getFetchParams,
-  getQueryOptionsParams,
-  getResultsStyle
-} from '../reducers';
-
-
-const mapStateToProps = ({indexResults}, ownProps) => {
-  return {
-    noResultsWarning: indexResults.noResultsWarning,
-    docs: getDocs(indexResults),
-    selectedDocs: getSelectedDocs(indexResults),
-    isLoading: getIsLoading(indexResults),
-    hasResults: getHasResults(indexResults),
-    results: getDataForRendering(indexResults, ownProps.databaseName, ownProps.deleteEnabled),
-    isEditable: getIsEditable(indexResults),
-    selectedLayout: getSelectedLayout(indexResults),
-    allDocumentsSelected: getAllDocsSelected(indexResults),
-    hasSelectedItem: getHasDocsSelected(indexResults),
-    numDocsSelected: getNumDocsSelected(indexResults),
-    textEmptyIndex: getTextEmptyIndex(indexResults),
-    docType: getDocType(indexResults),
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults),
-    partitionKey: ownProps.partitionKey,
-    resultsStyle: getResultsStyle(indexResults)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    fetchDocs: (fetchParams, queryOptionsParams) => {
-      dispatch(fetchDocs(ownProps.queryDocs, fetchParams, queryOptionsParams));
-    },
-    selectDoc: (doc, selectedDocs) => {
-      dispatch(selectDoc(doc, selectedDocs));
-    },
-    bulkDeleteDocs: (docs, fetchParams, queryOptionsParams) => {
-      dispatch(bulkDeleteDocs(ownProps.databaseName,
-        ownProps.queryDocs,
-        docs,
-        ownProps.designDocs,
-        fetchParams,
-        queryOptionsParams,
-        ownProps.docType));
-    },
-    changeLayout: (newLayout) => {
-      dispatch(changeLayout(newLayout));
-    },
-    bulkCheckOrUncheck: (docs, selectedDocs, allDocumentsSelected) => {
-      dispatch(bulkCheckOrUncheck(docs, selectedDocs, allDocumentsSelected, ownProps.docType));
-    },
-    changeTableHeaderAttribute: (newField, selectedFields) => {
-      dispatch(changeTableHeaderAttribute(newField, selectedFields));
-    },
-    resetState: () => {
-      dispatch(resetState());
-    },
-    queryOptionsToggleIncludeDocs: (previousIncludeDocs) => {
-      dispatch(queryOptionsToggleIncludeDocs(previousIncludeDocs));
-    },
-    updateResultsStyle: (newStyle) => {
-      dispatch(updateResultsStyle(newStyle));
-    }
-  };
-};
-
-const IndexResultsContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(IndexResults);
-
-export default IndexResultsContainer;
-
-IndexResultsContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired,
-  docType: PropTypes.string.isRequired
-};
diff --git a/app/addons/documents/index-results/containers/PaginationContainer.js b/app/addons/documents/index-results/containers/PaginationContainer.js
deleted file mode 100644
index 5221d99..0000000
--- a/app/addons/documents/index-results/containers/PaginationContainer.js
+++ /dev/null
@@ -1,83 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import PaginationFooter from '../components/pagination/PaginationFooter';
-import {
-  toggleShowAllColumns,
-  updatePerPageResults,
-  paginateNext,
-  paginatePrevious
-} from '../actions/pagination';
-import {
-  getDocs,
-  getSelectedDocs,
-  getHasResults,
-  getFetchParams,
-  getPageStart,
-  getPageEnd,
-  getPerPage,
-  getPrioritizedEnabled,
-  getShowPrioritizedEnabled,
-  getDisplayedFields,
-  getCanShowNext,
-  getCanShowPrevious,
-  getQueryOptionsParams
-} from '../reducers';
-
-
-const mapStateToProps = ({indexResults}, ownProps) => {
-  return {
-    docs: getDocs(indexResults),
-    selectedDocs: getSelectedDocs(indexResults),
-    hasResults: getHasResults(indexResults),
-    pageStart: getPageStart(indexResults),
-    pageEnd: getPageEnd(indexResults),
-    perPage: getPerPage(indexResults),
-    prioritizedEnabled: getPrioritizedEnabled(indexResults),
-    showPrioritizedEnabled: getShowPrioritizedEnabled(indexResults),
-    displayedFields: getDisplayedFields(indexResults, ownProps.databaseName),
-    canShowNext: getCanShowNext(indexResults),
-    canShowPrevious: getCanShowPrevious(indexResults),
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    toggleShowAllColumns: () => {
-      dispatch(toggleShowAllColumns());
-    },
-    updatePerPageResults: (amount, fetchParams, queryOptionsParams) => {
-      dispatch(updatePerPageResults(ownProps.queryDocs, fetchParams, queryOptionsParams, amount));
-    },
-    paginateNext: (fetchParams, queryOptionsParams, perPage) => {
-      dispatch(paginateNext(ownProps.queryDocs, fetchParams, queryOptionsParams, perPage));
-    },
-    paginatePrevious: (fetchParams, queryOptionsParams, perPage) => {
-      dispatch(paginatePrevious(ownProps.queryDocs, fetchParams, queryOptionsParams, perPage));
-    }
-  };
-};
-
-const PaginationFooterContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(PaginationFooter);
-
-export default PaginationFooterContainer;
-
-PaginationFooterContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/containers/QueryOptionsContainer.js b/app/addons/documents/index-results/containers/QueryOptionsContainer.js
deleted file mode 100644
index 2c1d4fa..0000000
--- a/app/addons/documents/index-results/containers/QueryOptionsContainer.js
+++ /dev/null
@@ -1,156 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import DocHelpers from '../../helpers';
-import QueryOptions from '../components/queryoptions/QueryOptions';
-import { changeLayout, resetState } from '../actions/base';
-import { resetPagination } from '../actions/pagination';
-import {
-  queryOptionsExecute,
-  queryOptionsToggleReduce,
-  queryOptionsUpdateGroupLevel,
-  queryOptionsToggleByKeys,
-  queryOptionsToggleBetweenKeys,
-  queryOptionsUpdateBetweenKeys,
-  queryOptionsUpdateByKeys,
-  queryOptionsToggleDescending,
-  queryOptionsUpdateSkip,
-  queryOptionsUpdateLimit,
-  queryOptionsToggleIncludeDocs,
-  queryOptionsToggleVisibility,
-  queryOptionsFilterOnlyDdocs,
-  queryOptionsRemoveFilterOnlyDdocs,
-  queryOptionsToggleStable,
-  queryOptionsChangeUpdate,
-} from '../actions/queryoptions';
-import {
-  getQueryOptionsPanel,
-  getFetchParams,
-  getQueryOptionsParams,
-  getPerPage,
-  getSelectedLayout
-} from '../reducers';
-
-const showReduce = (designDocs, selectedNavItem) => {
-  return DocHelpers.selectedViewContainsReduceFunction(designDocs, selectedNavItem);
-};
-
-const enableStable = (designDocs, selectedNavItem, isDbPartitioned) => {
-  if (DocHelpers.isViewSelected(selectedNavItem)) {
-    const enableStable = !DocHelpers.selectedItemIsPartitionedView(designDocs, selectedNavItem, isDbPartitioned);
-    return enableStable;
-  }
-  return true;
-};
-
-const mapStateToProps = ({indexResults, sidebar, databases}, ownProps) => {
-  const queryOptionsPanel = getQueryOptionsPanel(indexResults);
-  return {
-    contentVisible: queryOptionsPanel.isVisible,
-    includeDocs: queryOptionsPanel.includeDocs,
-    showReduce: showReduce(sidebar.designDocList, ownProps.selectedNavItem),
-    reduce: queryOptionsPanel.reduce,
-    groupLevel: queryOptionsPanel.groupLevel,
-    showByKeys: queryOptionsPanel.showByKeys,
-    showBetweenKeys: queryOptionsPanel.showBetweenKeys,
-    betweenKeys: queryOptionsPanel.betweenKeys,
-    byKeys: queryOptionsPanel.byKeys,
-    descending: queryOptionsPanel.descending,
-    skip: queryOptionsPanel.skip,
-    limit: queryOptionsPanel.limit,
-    enableStable: enableStable(sidebar.designDocList, ownProps.selectedNavItem, databases.isDbPartitioned),
-    stable: queryOptionsPanel.stable,
-    update: queryOptionsPanel.update,
-    fetchParams: getFetchParams(indexResults),
-    queryOptionsParams: getQueryOptionsParams(indexResults),
-    perPage: getPerPage(indexResults),
-    selectedLayout: getSelectedLayout(indexResults),
-    ddocsOnly: ownProps.ddocsOnly
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    resetPagination: (perPage) => {
-      dispatch(resetPagination(perPage));
-    },
-    queryOptionsToggleReduce: (previousReduce) => {
-      dispatch(queryOptionsToggleReduce(previousReduce));
-    },
-    queryOptionsUpdateGroupLevel: (newGroupLevel) => {
-      dispatch(queryOptionsUpdateGroupLevel(newGroupLevel));
-    },
-    queryOptionsToggleByKeys: (previousShowByKeys) => {
-      dispatch(queryOptionsToggleByKeys(previousShowByKeys));
-    },
-    queryOptionsToggleBetweenKeys: (previousShowBetweenKeys) => {
-      dispatch(queryOptionsToggleBetweenKeys(previousShowBetweenKeys));
-    },
-    queryOptionsUpdateBetweenKeys: (newBetweenKeys) => {
-      dispatch(queryOptionsUpdateBetweenKeys(newBetweenKeys));
-    },
-    queryOptionsUpdateByKeys: (newByKeys) => {
-      dispatch(queryOptionsUpdateByKeys(newByKeys));
-    },
-    queryOptionsToggleDescending: (previousDescending) => {
-      dispatch(queryOptionsToggleDescending(previousDescending));
-    },
-    queryOptionsUpdateSkip: (newSkip) => {
-      dispatch(queryOptionsUpdateSkip(newSkip));
-    },
-    queryOptionsUpdateLimit: (newLimit) => {
-      dispatch(queryOptionsUpdateLimit(newLimit));
-    },
-    queryOptionsToggleIncludeDocs: (previousIncludeDocs) => {
-      dispatch(queryOptionsToggleIncludeDocs(previousIncludeDocs));
-    },
-    queryOptionsToggleVisibility: (newVisibility) => {
-      dispatch(queryOptionsToggleVisibility(newVisibility));
-    },
-    queryOptionsExecute: (queryOptionsParams, perPage) => {
-      dispatch(queryOptionsExecute(ownProps.queryDocs, queryOptionsParams, perPage));
-    },
-    queryOptionsApplyFilterOnlyDdocs: () => {
-      dispatch(queryOptionsFilterOnlyDdocs());
-    },
-    queryOptionsRemoveFilterOnlyDdocs: () => {
-      dispatch(queryOptionsRemoveFilterOnlyDdocs());
-    },
-
-    queryOptionsToggleStable: previous =>{
-      dispatch(queryOptionsToggleStable(previous));
-    },
-
-    queryOptionsChangeUpdate: stale => {
-      dispatch(queryOptionsChangeUpdate(stale));
-    },
-    changeLayout: (newLayout) => {
-      dispatch(changeLayout(newLayout));
-    },
-    resetState: () => {
-      dispatch(resetState());
-    }
-  };
-};
-
-const QueryOptionsContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(QueryOptions);
-
-export default QueryOptionsContainer;
-
-QueryOptionsContainer.propTypes = {
-  queryDocs: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/index-results/helpers/json-view.js b/app/addons/documents/index-results/helpers/json-view.js
deleted file mode 100644
index 3d1f858..0000000
--- a/app/addons/documents/index-results/helpers/json-view.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-import { hasBulkDeletableDoc, getDocUrl, getDocId, getDocRev } from "./shared-helpers";
-import MangoHelper from "../../mango/mango.helper";
-
-export const getJsonViewData = (docs, { databaseName, docType, deleteEnabled = true }) => {
-
-  // expand on this when refactoring views to use redux
-  const stagedResults = docs.map((doc) => {
-    if (docType === "MangoIndex") {
-      return {
-        header: MangoHelper.getIndexName(doc),
-        content: MangoHelper.getIndexContent(doc),
-        id: doc.type === 'special' ? '_all_docs' : doc.ddoc,
-        keylabel: '',
-        url: doc.id ? getDocUrl('app', doc.id, databaseName) : null,
-        isDeletable: deleteEnabled ? doc.type !== 'special' : false,
-        isEditable: false
-      };
-    }
-    const docID = getDocId(doc, docType);
-    return {
-      header: docID,
-      content: JSON.stringify(doc, null, ' '),
-      id: docID || (doc.key && doc.key.toString()),
-      _rev: getDocRev(doc, docType),
-      keylabel: 'id',
-      url: docID ? getDocUrl('app', docID, databaseName) : null,
-      isDeletable: deleteEnabled,
-      isEditable: true
-    };
-  });
-
-  return {
-    displayedFields: null,
-    hasBulkDeletableDoc: hasBulkDeletableDoc(docs, docType),
-    results: stagedResults
-  };
-};
diff --git a/app/addons/documents/index-results/helpers/shared-helpers.js b/app/addons/documents/index-results/helpers/shared-helpers.js
deleted file mode 100644
index 86d139b..0000000
--- a/app/addons/documents/index-results/helpers/shared-helpers.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed 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.
-
-import app from "../../../../app";
-import FauxtonAPI from "../../../../core/api";
-import Constants from '../../constants';
-
-const getDocUrl = (context, id, databaseName) => {
-  if (context === undefined) {
-    context = 'server';
-  }
-
-  // new without id make a POST to the DB and not a PUT on a DB
-  let safeId = app.utils.getSafeIdForDoc(id);
-  if (!safeId) {
-    safeId = '';
-  }
-  const safeDatabaseName = encodeURIComponent(databaseName);
-
-  return FauxtonAPI.urls('document', context, safeDatabaseName, safeId, '?conflicts=true');
-};
-
-const isJSONDocEditable = (doc, docType) => {
-
-  if (!doc) {
-    return;
-  }
-
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return false;
-  }
-
-  if (!Object.keys(doc).length) {
-    return false;
-  }
-
-  if (!doc._id) {
-    return false;
-  }
-
-  return true;
-};
-
-const isJSONDocBulkDeletable = (doc, docType) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return doc.type !== 'special';
-  }
-  const result = (doc._id || doc.id) && (doc._rev || (doc.value && doc.value.rev));
-  return !!result;
-};
-
-const hasBulkDeletableDoc = (docs, docType) => {
-  const doc = docs.find((doc) => {
-    return isJSONDocBulkDeletable(doc, docType);
-  });
-
-  return !!doc;
-};
-
-// if we've previously set the perPage in local storage, default to that.
-const getDefaultPerPage = () => {
-  if (window.localStorage) {
-    const storedPerPage = app.utils.localStorageGet('fauxton:perpageredux');
-    if (storedPerPage) {
-      return parseInt(storedPerPage, 10);
-    }
-  }
-  return FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
-};
-
-const isGhostDoc = (doc) => {
-  // ghost docs are empty results where all properties were
-  // filtered away by mango
-  return !doc || !doc.attributes || !Object.keys(doc.attributes).length;
-};
-
-const getDocId = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-    return doc.id || doc._id;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return doc.type === 'special' ? '_all_docs' : doc.ddoc;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-    return doc._id;
-  }
-  return doc.id || doc._id;
-};
-
-const getDocRev = (doc, docType = Constants.INDEX_RESULTS_DOC_TYPE.VIEW) => {
-  if (docType === Constants.INDEX_RESULTS_DOC_TYPE.VIEW) {
-    if (doc.value) {
-      return doc.value.rev;
-    }
-    return doc._rev;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX) {
-    return undefined;
-  } else if (docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-    return doc._rev;
-  }
-  return undefined;
-};
-
-const errorReason = (error) => {
-  return 'Reason: ' + ((error && error.message) || 'n/a');
-};
-
-export {
-  getDocUrl,
-  isGhostDoc,
-  isJSONDocEditable,
-  isJSONDocBulkDeletable,
-  hasBulkDeletableDoc,
-  getDefaultPerPage,
-  getDocId,
-  getDocRev,
-  errorReason
-};
diff --git a/app/addons/documents/index-results/helpers/table-view.js b/app/addons/documents/index-results/helpers/table-view.js
deleted file mode 100644
index bb735ce..0000000
--- a/app/addons/documents/index-results/helpers/table-view.js
+++ /dev/null
@@ -1,181 +0,0 @@
-// Licensed 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.
-
-import Constants from "../../constants";
-import {
-  isJSONDocBulkDeletable,
-  isJSONDocEditable,
-  hasBulkDeletableDoc,
-  getDocUrl,
-  getDocId,
-  getDocRev
-} from "./shared-helpers";
-
-export const getPseudoSchema = (docs) => {
-  let cache = [];
-
-  docs.forEach((doc) => {
-    Object.keys(doc).forEach(function (k) {
-      cache.push(k);
-    });
-  });
-
-  cache = _.uniq(cache);
-
-  // always begin with _id
-  let i = cache.indexOf('_id');
-  if (i !== -1) {
-    cache.splice(i, 1);
-    cache.unshift('_id');
-  }
-
-  return cache;
-};
-
-export const getPrioritizedFields = (docs, max) => {
-  let res = docs.reduce((acc, el) => {
-    acc = acc.concat(Object.keys(el));
-    return acc;
-  }, []);
-
-  res = _.countBy(res, (el) => {
-    return el;
-  });
-
-  delete res.id;
-  delete res._rev;
-
-  res = Object.keys(res).reduce((acc, el) => {
-    acc.push([res[el], el]);
-    return acc;
-  }, []);
-
-  res = sortByTwoFields(res);
-  res = res.slice(0, max);
-
-  return res.reduce((acc, el) => {
-    acc.push(el[1]);
-    return acc;
-  }, []);
-};
-
-export const sortByTwoFields = (elements) => {
-  // given:
-  // var a = [[2, "b"], [3, "z"], [1, "a"], [3, "a"]]
-  // it sorts to:
-  // [[3, "a"], [3, "z"], [2, "b"], [1, "a"]]
-  // note that the arrays with 3 got the first two arrays
-  // _and_ that the second values in the array with 3 are also sorted
-
-  const _recursiveSort = (a, b, index) => {
-    if (a[index] === b[index]) {
-      return index < 2 ? _recursiveSort(a, b, index + 1) : 0;
-    }
-
-    // second elements asc
-    if (index === 1) {
-      return (a[index] < b[index]) ? -1 : 1;
-    }
-
-    // first elements desc
-    return (a[index] < b[index]) ? 1 : -1;
-  };
-
-  return elements.sort((a, b) => {
-    return _recursiveSort(a, b, 0);
-  });
-};
-
-export const getNotSelectedFields = (selectedFields, allFields) => {
-  const without = _.without.bind(this, allFields);
-  return without.apply(this, selectedFields);
-};
-
-export const getFullTableViewData = (docs, options) => {
-  let notSelectedFieldsTableView = null,
-      selectedFieldsTableView = options.selectedFieldsTableView,
-      showAllFieldsTableView = options.showAllFieldsTableView,
-      schema;  // array containing the unique attr keys in the results.  always begins with _id.
-
-  // only use the "doc" attribute as this resulted from an include_docs fetch
-  const normalizedDocs = docs.map((doc) => { return doc.doc || doc; });
-  // build the schema container based on the normalized data
-  schema = getPseudoSchema(normalizedDocs);
-
-  // if we don't know what attr/columns to display, build the list
-  if (selectedFieldsTableView && selectedFieldsTableView.length === 0) {
-    selectedFieldsTableView = getPrioritizedFields(normalizedDocs, 5);
-  }
-
-  // set the notSelectedFields to the subset excluding meta and selected attributes
-  const schemaWithoutMetaDataFields = _.without(schema, '_attachments');
-  notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
-
-  // if we're showing all attr/columns, we revert the notSelectedFields to null and set
-  // the selected fields to everything excluding meta.
-  if (showAllFieldsTableView) {
-    notSelectedFieldsTableView = null;
-    selectedFieldsTableView = schemaWithoutMetaDataFields;
-  }
-
-  return {
-    schema,
-    normalizedDocs,
-    selectedFieldsTableView,
-    notSelectedFieldsTableView
-  };
-};
-
-export const getMetaDataTableView = (docs) => {
-  const schema = getPseudoSchema(docs);
-  return {
-    schema,
-    normalizedDocs: docs,  // no need to massage the docs for metadata
-    selectedFieldsTableView: schema,
-    notSelectedFieldsTableView: null
-  };
-};
-
-export const getTableViewData = (docs, options) => {
-  const isMetaData = Constants.LAYOUT_ORIENTATION.METADATA === options.selectedLayout;
-  const {
-    schema,
-    normalizedDocs,
-    selectedFieldsTableView,
-    notSelectedFieldsTableView
-  } = isMetaData ? getMetaDataTableView(docs) : getFullTableViewData(docs, options);
-
-  const res = normalizedDocs.map(function (doc) {
-    return {
-      content: doc,
-      id: getDocId(doc, options.docType),
-      _rev: getDocRev(doc, options.docType),
-      header: '',
-      keylabel: '',
-      url: doc._id || doc.id ? getDocUrl('app', doc._id || doc.id, options.databaseName) : null,
-      isDeletable: options.deleteEnabled ? isJSONDocBulkDeletable(doc, options.docType) : false,
-      isEditable: isJSONDocEditable(doc, options.docType)
-    };
-  });
-
-  return {
-    notSelectedFields: notSelectedFieldsTableView,
-    selectedFields: selectedFieldsTableView,
-    hasBulkDeletableDoc: options.deleteEnabled ? hasBulkDeletableDoc(normalizedDocs, options.docType) : false,
-    schema: schema,
-    results: res,
-    displayedFields: isMetaData ? null : {
-      shown: _.uniq(selectedFieldsTableView).length,
-      allFieldCount: _.without(schema, '_attachments').length
-    }
-  };
-};
diff --git a/app/addons/documents/index-results/reducers.js b/app/addons/documents/index-results/reducers.js
deleted file mode 100644
index 817ae6e..0000000
--- a/app/addons/documents/index-results/reducers.js
+++ /dev/null
@@ -1,404 +0,0 @@
-// Licensed 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.
-
-import app from "../../../app";
-import ActionTypes from './actiontypes';
-import Constants from '../constants';
-import {getJsonViewData} from './helpers/json-view';
-import {getTableViewData} from './helpers/table-view';
-import {getDefaultPerPage, getDocId, isJSONDocBulkDeletable} from './helpers/shared-helpers';
-
-const initialState = {
-  noResultsWarning: '',
-  docs: [],  // raw documents returned from couch
-  selectedDocs: [],  // documents selected for manipulation
-  isLoading: false,
-  tableView: {
-    selectedFieldsTableView: [],  // current columns to display
-    showAllFieldsTableView: false, // do we show all possible columns?
-  },
-  isEditable: true,  // can the user manipulate the results returned?
-  selectedLayout: Constants.LAYOUT_ORIENTATION.METADATA,
-  textEmptyIndex: 'No Documents Found',
-  docType: Constants.INDEX_RESULTS_DOC_TYPE.VIEW,
-  resultsStyle: loadStyle(),
-  fetchParams: {
-    limit: getDefaultPerPage() + 1,
-    skip: 0
-  },
-  pagination: {
-    pageStart: 1,  // index of first doc in this page of results
-    currentPage: 1,  // what page of results are we showing?
-    perPage: getDefaultPerPage(),
-    canShowNext: false  // flag indicating if we can show a next page
-  },
-  queryOptionsPanel: {
-    isVisible: false,
-    showByKeys: false,
-    showBetweenKeys: false,
-    includeDocs: false,
-    betweenKeys: {
-      include: true,
-      startkey: '',
-      endkey: ''
-    },
-    byKeys: '',
-    descending: false,
-    skip: '',
-    limit: 'none',
-    reduce: false,
-    groupLevel: 'exact',
-    showReduce: false,
-    stable: false,
-    update: 'true'
-  }
-};
-
-function loadStyle() {
-  let style = app.utils.localStorageGet('fauxton:results_style');
-  if (!style) {
-    style = {
-      textOverflow: Constants.INDEX_RESULTS_STYLE.TEXT_OVERFLOW_TRUNCATED,
-      fontSize: Constants.INDEX_RESULTS_STYLE.FONT_SIZE_MEDIUM
-    };
-  }
-  return style;
-}
-
-function storeStyle(style) {
-  app.utils.localStorageSet('fauxton:results_style', style);
-}
-
-export default function resultsState(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.INDEX_RESULTS_SET_STYLE:
-      const newStyle = {
-        ...state.resultsStyle,
-        ...action.resultsStyle
-      };
-      storeStyle(newStyle);
-      return {
-        ...state,
-        resultsStyle: newStyle
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE:
-      return {
-        ...initialState,
-        noResultsWarning: state.noResultsWarning,
-        selectedLayout: state.selectedLayout,
-        selectedDocs: [],
-        fetchParams: {
-          limit: getDefaultPerPage() + 1,
-          skip: 0
-        },
-        pagination: Object.assign({}, initialState.pagination, {
-          perPage: state.pagination.perPage
-        }),
-        queryOptionsPanel: Object.assign({}, initialState.queryOptionsPanel,
-          state.queryOptionsPanel, {reduce: false, groupLevel: 'exact', showReduce: false}),
-        isLoading: false,
-        resultsStyle: state.resultsStyle
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING:
-      return {
-        ...state,
-        isLoading: true
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED:
-      return Object.assign({}, state, {
-        noResultsWarning: 'The selected index does not support partitions. Switch back to global mode.'
-      });
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY:
-      return Object.assign({}, state, {
-        noResultsWarning: 'The selected index requires a partition key. Use the selector at the top to enter a partition key.'
-      });
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS:
-      return {
-        ...state,
-        selectedDocs: action.selectedDocs
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS:
-      let selectedLayout = state.selectedLayout;
-      // Change layout if it's set to METADATA because this option is not available for Mango queries
-      if (action.docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
-        if (state.selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA) {
-          selectedLayout = Constants.LAYOUT_ORIENTATION.TABLE;
-        }
-      }
-      return {
-        ...state,
-        docs: action.docs,
-        isLoading: false,
-        noResultsWarning: '',
-        isEditable: true, //TODO: determine logic for this
-        fetchParams: Object.assign({}, state.fetchParams, action.params),
-        pagination: Object.assign({}, state.pagination, {
-          canShowNext: action.canShowNext
-        }),
-        docType: action.docType,
-        selectedLayout: selectedLayout,
-        executionStats: action.executionStats,
-        warning: action.warning
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT:
-      return {
-        ...state,
-        selectedLayout: action.layout
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS:
-      return {
-        ...state,
-        tableView: Object.assign({}, state.tableView, {
-          showAllFieldsTableView: !state.tableView.showAllFieldsTableView,
-          cachedFieldsTableView: state.tableView.selectedFieldsTableView
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE:
-      return {
-        ...state,
-        tableView: Object.assign({}, state.tableView, {
-          selectedFieldsTableView: action.selectedFieldsTableView
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE:
-      app.utils.localStorageSet('fauxton:perpageredux', action.perPage);
-      return {
-        ...state,
-        pagination: Object.assign({}, initialState.pagination, {
-          perPage: action.perPage
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT:
-      return {
-        ...state,
-        pagination: Object.assign({}, state.pagination, {
-          pageStart: state.pagination.pageStart + state.pagination.perPage,
-          currentPage: state.pagination.currentPage + 1
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS:
-      return {
-        ...state,
-        pagination: Object.assign({}, state.pagination, {
-          pageStart: state.pagination.pageStart - state.pagination.perPage,
-          currentPage: state.pagination.currentPage - 1
-        })
-      };
-
-    case ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS:
-      // includeDocs or reduce should be mutually exclusive
-      if (action.options.includeDocs && action.options.reduce) {
-        // includeDocs has precedence if both are set at the same time
-        action.options.reduce = false;
-      } else if (action.options.includeDocs && state.queryOptionsPanel.reduce) {
-        // Switch off reduce when includeDocs is being set to true
-        action.options.reduce = false;
-      } else if (action.options.reduce && state.queryOptionsPanel.includeDocs) {
-        // Switch off includeDocs when reduce is being set to true
-        action.options.includeDocs = false;
-      }
-      return {
-        ...state,
-        queryOptionsPanel: Object.assign({}, state.queryOptionsPanel, action.options)
-      };
-
-    default:
-      return state;
-  }
-}
-
-// we don't want to muddy the waters with autogenerated mango docs
-export const removeGeneratedMangoDocs = (doc) => {
-  return doc.language !== 'query';
-};
-
-// transform the docs in to a state ready for rendering on the page
-export const getDataForRendering = (state, databaseName, deleteEnabled = true) => {
-  const {docs} = state;
-  const options = {
-    databaseName: databaseName,
-    selectedLayout: state.selectedLayout,
-    selectedFieldsTableView: state.tableView.selectedFieldsTableView,
-    showAllFieldsTableView: state.tableView.showAllFieldsTableView,
-    docType: state.docType,
-    deleteEnabled: deleteEnabled
-  };
-
-  const docsWithoutGeneratedMangoDocs = docs.filter(removeGeneratedMangoDocs);
-
-  if (Constants.LAYOUT_ORIENTATION.JSON === options.selectedLayout) {
-    return getJsonViewData(docsWithoutGeneratedMangoDocs, options);
-  }
-  return getTableViewData(docsWithoutGeneratedMangoDocs, options);
-
-};
-
-// Should we show the input checkbox where the user can elect to display
-// all possible columns in the table view?
-export const getShowPrioritizedEnabled = (state) => {
-  return state.selectedLayout === Constants.LAYOUT_ORIENTATION.TABLE;
-};
-
-// returns the index of the last result in the total possible results.
-export const getPageEnd = (state) => {
-  if (!getHasResults(state)) {
-    return false;
-  }
-  return state.pagination.pageStart + state.docs.length - 1;
-};
-
-// do we have any docs in the state tree currently?
-export const getHasResults = (state) => {
-  return !state.isLoading && state.docs.length > 0;
-};
-
-// helper function to determine if all selectable docs on the current page are selected.
-export const getAllDocsSelected = (state) => {
-  if (state.docs.length === 0 || state.selectedDocs.length === 0) {
-    return false;
-  }
-
-  // Iterate over the results and determine if each one is included
-  // in the selectedDocs array.
-  //
-  // This is O(n^2) which makes me unhappy.  We know
-  // that the number of docs will never be that large due to the
-  // per page limitations we force on the user.
-  //
-  // We need to use a for loop here instead of a forEach since there
-  // is no way to short circuit Array.prototype.forEach.
-
-  for (let i = 0; i < state.docs.length; i++) {
-    const doc = state.docs[i];
-    if (!isJSONDocBulkDeletable(doc, state.docType)) {
-      //Only check selectable docs
-      continue;
-    }
-    // Helper function for finding index of a doc in the current
-    // selected docs list.
-    const exists = (selectedDoc) => {
-      return getDocId(doc, state.docType) === selectedDoc._id;
-    };
-
-    if (!state.selectedDocs.some(exists)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-// are there any documents selected in the state tree?
-export const getHasDocsSelected = (state) => {
-  return state.selectedDocs.length > 0;
-};
-
-// how many documents are selected in the state tree?
-export const getNumDocsSelected = (state) => {
-  return state.selectedDocs.length;
-};
-
-// is there a previous page of results?  We only care if the current page
-// of results is greater than 1 (i.e. the first page of results).
-export const getCanShowPrevious = (state) => {
-  return state.pagination.currentPage > 1;
-};
-
-export const getDisplayedFields = (state, databaseName) => {
-  return getDataForRendering(state, databaseName).displayedFields || {};
-};
-
-export const getQueryOptionsParams = (state) => {
-  const {queryOptionsPanel} = state;
-  const params = {};
-
-  if (queryOptionsPanel.includeDocs) {
-    params.include_docs = queryOptionsPanel.includeDocs;
-  }
-
-  if (queryOptionsPanel.showBetweenKeys) {
-    const betweenKeys = queryOptionsPanel.betweenKeys;
-    params.inclusive_end = betweenKeys.include;
-    if (betweenKeys.startkey && betweenKeys.startkey != '') {
-      params.start_key = betweenKeys.startkey;
-    }
-    if (betweenKeys.endkey && betweenKeys.endkey != '') {
-      params.end_key = betweenKeys.endkey;
-    }
-  } else if (queryOptionsPanel.showByKeys) {
-    if (queryOptionsPanel.byKeys.trim()) {
-      params.keys = queryOptionsPanel.byKeys.replace(/\r?\n/g, '');
-    }
-  }
-
-  if (queryOptionsPanel.limit !== 'none') {
-    params.limit = parseInt(queryOptionsPanel.limit, 10);
-  }
-
-  if (queryOptionsPanel.skip) {
-    params.skip = parseInt(queryOptionsPanel.skip, 10);
-  }
-
-  if (queryOptionsPanel.descending) {
-    params.descending = queryOptionsPanel.descending;
-  }
-
-  if (queryOptionsPanel.reduce) {
-    params.reduce = true;
-
-    if (queryOptionsPanel.groupLevel === 'exact') {
-      params.group = true;
-    } else {
-      params.group_level = queryOptionsPanel.groupLevel;
-    }
-  }
-
-  // Only add UPDATE and STABLE parameters when different than
-  // their respective default values. This prevent errors in
-  // older CouchDB versions that don't support these parameters.
-  if (queryOptionsPanel.update !== undefined && queryOptionsPanel.update !== 'true') {
-    params.update = queryOptionsPanel.update;
-  }
-  if (queryOptionsPanel.stable === true) {
-    params.stable = queryOptionsPanel.stable;
-  }
-
-  return params;
-};
-
-// Here be simple getters
-export const getDocs = state => state.docs;
-export const getSelectedDocs = state => state.selectedDocs;
-export const getIsLoading = state => state.isLoading;
-export const getIsEditable = state => state.isEditable;
-export const getSelectedLayout = state => state.selectedLayout;
-export const getTextEmptyIndex = state => state.textEmptyIndex;
-export const getDocType = state => state.docType;
-export const getPageStart = state => state.pagination.pageStart;
-export const getPrioritizedEnabled = state => state.tableView.showAllFieldsTableView;
-export const getCanShowNext = state => state.pagination.canShowNext;
-export const getQueryOptionsPanel = state => state.queryOptionsPanel;
-export const getPerPage = state => state.pagination.perPage;
-export const getFetchParams = state => state.fetchParams;
-export const getResultsStyle = state => state.resultsStyle;
diff --git a/app/addons/documents/layouts.js b/app/addons/documents/layouts.js
deleted file mode 100644
index 9c39f13..0000000
--- a/app/addons/documents/layouts.js
+++ /dev/null
@@ -1,290 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import SidebarControllerContainer from "./sidebar/SidebarControllerContainer";
-import HeaderDocsLeft from './components/header-docs-left';
-import ChangesContainer from './changes/components/ChangesContainer';
-import ChangesTabContentContainer from './changes/components/ChangesTabContentContainer';
-import IndexEditorComponents from "./index-editor/components";
-import DesignDocInfoContainer from './designdocinfo/components/DesignDocInfoContainer';
-import RightAllDocsHeader from './components/header-docs-right';
-import IndexResultsContainer from './index-results/containers/IndexResultsContainer';
-import PaginationContainer from './index-results/containers/PaginationContainer';
-import ApiBarContainer from './index-results/containers/ApiBarContainer';
-import { queryAllDocs, queryMapReduceView } from './index-results/api';
-import PartitionKeySelectorContainer from './partition-key/container';
-import Constants from './constants';
-import Helpers from './helpers';
-
-export const TabsSidebarHeader = ({
-  hideQueryOptions,
-  hideJumpToDoc,
-  database,
-  dbName,
-  dropDownLinks,
-  docURL,
-  endpoint,
-  endpointAddQueryOptions,
-  fetchUrl,
-  ddocsOnly,
-  queryDocs,
-  selectedNavItem,
-  showPartitionKeySelector,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  let partKeySelector = null;
-  if (showPartitionKeySelector) {
-    partKeySelector = (<PartitionKeySelectorContainer
-      databaseName={dbName}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={onPartitionKeySelected}
-      onGlobalModeSelected={onGlobalModeSelected}
-      globalMode={globalMode}/>
-    );
-  }
-
-  return (
-    <header className="two-panel-header">
-      <div className="flex-layout flex-row">
-        <div id="header-docs-left">
-          <HeaderDocsLeft
-            dbName={dbName}
-            partitionKey={partitionKey}
-            dropDownLinks={dropDownLinks}
-          />
-        </div>
-        <div className="right-header-wrapper flex-layout flex-row flex-body">
-          <div style={{flex:1, padding: '18px 6px 12px 12px'}}>
-            {partKeySelector}
-          </div>
-          <div id="right-header" className="flex-fill">
-            <RightAllDocsHeader
-              hideQueryOptions={hideQueryOptions}
-              hideJumpToDoc={hideJumpToDoc}
-              database={database}
-              fetchUrl={fetchUrl}
-              ddocsOnly={ddocsOnly}
-              queryDocs={queryDocs}
-              partitionKey={partitionKey}
-              selectedNavItem={selectedNavItem} />
-          </div>
-          <ApiBarContainer docURL={docURL} endpoint={endpoint} endpointAddQueryOptions={endpointAddQueryOptions} />
-          <div id="notification-center-btn" className="flex-fill">
-            <NotificationCenterButton />
-          </div>
-        </div>
-      </div>
-    </header>
-  );
-};
-
-TabsSidebarHeader.propTypes = {
-  dbName: PropTypes.string.isRequired,
-  dropDownLinks: PropTypes.array.isRequired,
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  showIncludeAllDocs: PropTypes.bool,
-  hideQueryOptions: PropTypes.bool,
-  hideJumpToDoc: PropTypes.bool,
-  database: PropTypes.object.isRequired,
-  queryDocs: PropTypes.func,
-  selectedNavItem: PropTypes.object,
-  showPartitionKeySelector: PropTypes.bool.isRequired,
-  partitionKey: PropTypes.string,
-  onPartitionKeySelected: PropTypes.func,
-  onGlobalModeSelected: PropTypes.func,
-  globalMode: PropTypes.bool
-};
-
-TabsSidebarHeader.defaultProps = {
-  hideHeaderBar: false,
-  showPartitionKeySelector: false
-};
-
-export const TabsSidebarContent = ({
-  hideFooter,
-  lowerContent,
-  upperContent,
-  fetchUrl,
-  databaseName,
-  queryDocs,
-  selectedNavItem,
-  partitionKey
-}) => {
-  return (
-    <div className="with-sidebar tabs-with-sidebar content-area">
-      <aside id="sidebar-content" className="scrollable">
-        <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-      </aside>
-      <section id="dashboard-content" className="flex-layout flex-col">
-        <div id="dashboard-upper-content">
-          {upperContent}
-        </div>
-        <div id="dashboard-lower-content" className="flex-body">
-          {lowerContent}
-        </div>
-        <div id="footer">
-          {!hideFooter ? <PaginationContainer
-            databaseName={databaseName}
-            fetchUrl={fetchUrl}
-            queryDocs={queryDocs} /> : null}
-        </div>
-      </section>
-    </div>
-  );
-};
-TabsSidebarContent.defaultProps = {
-  hideFooter: false
-};
-
-TabsSidebarContent.propTypes = {
-  hideFooter: PropTypes.bool,
-  lowerContent: PropTypes.object,
-  upperContent: PropTypes.object,
-  selectedNavItem: PropTypes.object
-};
-
-export const DocsTabsSidebarLayout = ({
-  database,
-  designDocs,
-  docURL,
-  endpoint,
-  dbName,
-  dropDownLinks,
-  fetchUrl,
-  ddocsOnly,
-  deleteEnabled = true,
-  selectedNavItem,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  const partitionFilter = selectedNavItem.navItem === 'all-docs' && partitionKey ? partitionKey : '';
-  let queryDocs = (params) => { return queryAllDocs(fetchUrl, partitionFilter, params); };
-  if (Helpers.isViewSelected(selectedNavItem)) {
-    queryDocs = (params) => { return queryMapReduceView(fetchUrl, params); };
-  }
-  const lowerContent = <IndexResultsContainer
-    fetchUrl={fetchUrl}
-    designDocs={designDocs}
-    ddocsOnly={ddocsOnly}
-    databaseName={dbName}
-    fetchAtStartup={true}
-    queryDocs={queryDocs}
-    docType={Constants.INDEX_RESULTS_DOC_TYPE.VIEW}
-    deleteEnabled={deleteEnabled}
-    partitionKey={partitionKey} />;
-
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        endpointAddQueryOptions={true}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        fetchUrl={fetchUrl}
-        ddocsOnly={ddocsOnly}
-        queryDocs={queryDocs}
-        selectedNavItem={selectedNavItem}
-        showPartitionKeySelector={!ddocsOnly}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-      <TabsSidebarContent
-        lowerContent={lowerContent}
-        fetchUrl={fetchUrl}
-        databaseName={dbName}
-        queryDocs={queryDocs}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-export const ChangesSidebarLayout = ({ docURL, database, endpoint, dbName, dropDownLinks, selectedNavItem, partitionKey }) => {
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        hideQueryOptions={true}
-      />
-      <TabsSidebarContent
-        upperContent={<ChangesTabContentContainer />}
-        lowerContent={<ChangesContainer databaseName={dbName}/>}
-        hideFooter={true}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-export const ViewsTabsSidebarLayout = ({showEditView, database, docURL, endpoint,
-  dbName, dropDownLinks, selectedNavItem, designDocInfo, partitionKey }) => {
-
-  const content = showEditView ?
-    <IndexEditorComponents.IndexEditorContainer partitionKey={partitionKey}/> :
-    <DesignDocInfoContainer
-      designDocInfo={designDocInfo}
-      designDocName={selectedNavItem.designDocName}/>;
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        endpoint={endpoint}
-        docURL={docURL}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        partitionKey={partitionKey}
-        queryDocs={() => { }}
-        hideQueryOptions={true}
-        hideJumpToDoc={true}
-      />
-      <TabsSidebarContent
-        lowerContent={content}
-        hideFooter={true}
-        selectedNavItem={selectedNavItem}
-        partitionKey={partitionKey}
-      />
-    </div>
-  );
-};
-
-ViewsTabsSidebarLayout.defaultProps = {
-  showEditView: true
-};
-
-ViewsTabsSidebarLayout.propTypes = {
-  showEditView: PropTypes.bool,
-  docURL: PropTypes.string.isRequired,
-  endpoint: PropTypes.string,
-  dbName: PropTypes.string.isRequired,
-  dropDownLinks: PropTypes.array.isRequired,
-  designDocInfo: PropTypes.object
-};
diff --git a/app/addons/documents/mango/__tests__/mango.api.test.js b/app/addons/documents/mango/__tests__/mango.api.test.js
deleted file mode 100644
index 000235e..0000000
--- a/app/addons/documents/mango/__tests__/mango.api.test.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// Licensed 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.
-
-import fetchMock from 'fetch-mock';
-import Constants from '../../constants';
-import * as MangoAPI from '../mango.api';
-import '../../base';
-
-describe('Mango API', () => {
-
-  const paginationLimit = 6;
-
-  afterEach(() => {
-    fetchMock.reset();
-  });
-
-  describe('mangoQueryDocs', () => {
-    it('returns document type INDEX_RESULTS_DOC_TYPE.MANGO_QUERY', () => {
-      fetchMock.mock("*", { times: 2 });
-      return MangoAPI.mangoQueryDocs('myDB', '', {}, {}).then((res) => {
-        expect(res.docType).toBe(Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY);
-      });
-    });
-  });
-
-  describe('mangoQuery', () => {
-    it('adds partition key to the query URL when one is set', () => {
-      fetchMock.postOnce('./myDB/_partition/part1/_find', {
-        status: 200,
-        body: { ok: true }
-      }).catch({
-        status: 500,
-        body: { ok: false }
-      });
-      return MangoAPI.mangoQuery('myDB', 'part1', {}, {}).then(() => {
-        expect(fetchMock.done()).toBe(true);
-      });
-    });
-
-    it('does not add partition key to the query URL when one is set', () => {
-      fetchMock.postOnce('./myDB/_find', {
-        status: 200,
-        body: { ok: true }
-      }).catch({
-        status: 500,
-        body: { ok: false }
-      });
-      return MangoAPI.mangoQuery('myDB', '', {}, {}).then(() => {
-        expect(fetchMock.done()).toBe(true);
-      });
-    });
-  });
-
-  describe('mergeFetchParams', () => {
-    it('adjusts the query "skip" field based on pagination fetch params', () => {
-      // 1st page and query's skip is zero
-      let mergedParams = MangoAPI.mergeFetchParams({skip: 0}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(0);
-
-      // 1st page and query's skip is non-zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 3}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(3);
-
-      // non-1st page and query's skip is zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 0}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(5);
-
-      // non-1st page and query's skip is non-zero
-      mergedParams = MangoAPI.mergeFetchParams({skip: 3}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.skip).toBe(8);
-
-    });
-
-    it('uses ZERO when query limit is ZERO', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 0}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(0);
-    });
-
-    it('uses pagination limit when query limit is not provided', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-    });
-
-    it('uses pagination limit if query limit has not been reached', () => {
-      let mergedParams = MangoAPI.mergeFetchParams({limit: 50}, {skip: 5, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-
-      mergedParams = MangoAPI.mergeFetchParams({limit: 50}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(paginationLimit);
-    });
-
-    it('respects query limit when value is lower than docs per page', () => {
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 3}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(3);
-    });
-
-    it('respects query limit when value is greater than docs per page', () => {
-      // Simulates loading of 3rd page
-      const mergedParams = MangoAPI.mergeFetchParams({limit: 17}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(2);
-    });
-
-    it('respects query limit when value is a multipe of docs per page', () => {
-      // 1st page
-      let mergedParams = MangoAPI.mergeFetchParams({limit: 5}, {skip: 0, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(5);
-
-      // non-1st page
-      mergedParams = MangoAPI.mergeFetchParams({limit: 15}, {skip: 10, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(5);
-    });
-
-    it('works correctly with both skip and limit query params', () => {
-      // Simulates loading of 3rd page
-      const mergedParams = MangoAPI.mergeFetchParams({skip:10, limit: 17}, {skip: 15, limit: paginationLimit});
-      expect(mergedParams.limit).toBe(2);
-      expect(mergedParams.skip).toBe(25);
-    });
-
-  });
-
-  describe('fetchIndexes', () => {
-    it('returns document type INDEX_RESULTS_DOC_TYPE.MANGO_INDEX', () => {
-      fetchMock.once("*", {});
-      return MangoAPI.fetchIndexes('myDB', {}).then((res) => {
-        expect(res.docType).toBe(Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX);
-      });
-    });
-  });
-});
diff --git a/app/addons/documents/mango/__tests__/mango.components.test.js b/app/addons/documents/mango/__tests__/mango.components.test.js
deleted file mode 100644
index 738add6..0000000
--- a/app/addons/documents/mango/__tests__/mango.components.test.js
+++ /dev/null
@@ -1,246 +0,0 @@
-// Licensed 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.
-
-import { mount, shallow } from 'enzyme';
-import React from 'react';
-import { Provider } from 'react-redux';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import thunk from 'redux-thunk';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../../core/api';
-import utils from '../../../../../test/mocha/testUtils';
-import databasesReducer from '../../../databases/reducers';
-import indexResultsReducer from '../../index-results/reducers';
-import Views from '../mango.components';
-import MangoQueryEditor from '../components/MangoQueryEditor';
-import MangoIndexEditor from '../components/MangoIndexEditor';
-import mangoReducer from '../mango.reducers';
-import '../../base';
-
-const restore = utils.restore;
-const databaseName = 'testdb';
-
-describe('MangoIndexEditorContainer', function () {
-
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({
-      mangoQuery: mangoReducer,
-      indexResults: indexResultsReducer,
-      databases: databasesReducer
-    }),
-    applyMiddleware(...middlewares)
-  );
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').withArgs('mango').returns('mock-url');
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('has a default index definition', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoIndexEditorContainer
-          description="foo"
-          databaseName={databaseName} />
-      </Provider>
-    );
-
-    const indexEditor = wrapper.find(MangoIndexEditor);
-    expect(indexEditor.exists()).toBe(true);
-    if (indexEditor.exists()) {
-      const json = JSON.parse(indexEditor.props().queryIndexCode);
-      expect(json.index.fields[0]).toBe('foo');
-    }
-  });
-
-  it('shows partitioned option only for partitioned databases', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoIndexEditorContainer
-          description="foo"
-          databaseName={databaseName} />
-      </Provider>
-    );
-    const indexEditor = wrapper.find(MangoIndexEditor);
-    expect(indexEditor.exists()).toBe(true);
-    if (indexEditor.exists()) {
-      const json = JSON.parse(indexEditor.props().queryIndexCode);
-      expect(json.index.fields[0]).toBe('foo');
-    }
-  });
-
-});
-
-describe('MangoIndexEditor', function () {
-  const defaultProps = {
-    isLoading: false,
-    databaseName: 'db1',
-    isDbPartitioned: false,
-    saveIndex: () => {},
-    queryIndexCode: '{ "selector": {} }',
-    partitionKey: '',
-    loadIndexTemplates: () => {},
-    clearResults: () => {},
-    loadIndexList: () => {}
-  };
-
-  it('shows partitioned option only for partitioned databases', function () {
-    const wrapperNotPartitioned = shallow(
-      <MangoIndexEditor
-        {...defaultProps}
-      />
-    );
-    expect(wrapperNotPartitioned.find('#js-partitioned-index').exists()).toBe(false);
-
-    const wrapperPartitioned = shallow(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-      />
-    );
-    expect(wrapperPartitioned.find('#js-partitioned-index').exists()).toBe(true);
-  });
-
-  it('does not add "partitioned" field for non-partitioned dbs', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).not.toMatch('"partitioned":');
-  });
-
-  it('adds "partitioned: true" field when creating a partitioned index', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).toMatch('"partitioned":true');
-  });
-
-  it('adds "partitioned: false" field when creating a global index', function () {
-    const saveIndexStub = sinon.stub();
-    const wrapper = mount(
-      <MangoIndexEditor
-        {...defaultProps}
-        isDbPartitioned={true}
-        saveIndex={saveIndexStub}
-      />
-    );
-    wrapper.find('#js-partitioned-index').simulate('change');
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(saveIndexStub);
-    const { indexCode } = saveIndexStub.firstCall.args[0];
-    expect(indexCode.length).toBeGreaterThan(0);
-    expect(indexCode).toMatch('"partitioned":false');
-  });
-});
-
-describe('MangoQueryEditorContainer', function () {
-
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ mangoQuery: mangoReducer, indexResults: indexResultsReducer }),
-    applyMiddleware(...middlewares)
-  );
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').returns('mock-url');
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('has a default query', function () {
-    const wrapper = mount(
-      <Provider store={store}>
-        <Views.MangoQueryEditorContainer
-          description="foo"
-          editorTitle="mock-title"
-          databaseName={databaseName} />
-      </Provider>
-    );
-    const queryEditor = wrapper.find(MangoQueryEditor);
-    expect(queryEditor.exists()).toBe(true);
-    if (queryEditor.exists()) {
-      const query = JSON.parse(queryEditor.props().queryFindCode);
-      expect(query.selector).toHaveProperty('_id');
-    }
-  });
-});
-
-describe('MangoQueryEditor', function () {
-  const defaultProps = {
-    description: 'desc',
-    editorTitle: 'title',
-    queryFindCode: '{}',
-    queryFindCodeChanged: false,
-    databaseName: 'db1',
-    partitionKey: '',
-    runExplainQuery: () => {},
-    runQuery: () => {},
-    manageIndexes: () => {},
-    loadQueryHistory: () => {},
-    clearResults: () => {}
-  };
-
-  it('runs explain query with partition when one is set', function () {
-    const runExplainQueryStub = sinon.stub();
-    const wrapper = mount(
-      <MangoQueryEditor
-        {...defaultProps}
-        partitionKey='part1'
-        runExplainQuery={runExplainQueryStub}
-      />
-    );
-
-    wrapper.find('#explain-btn').simulate('click', { preventDefault: () => {} });
-    sinon.assert.called(runExplainQueryStub);
-    const { partitionKey } = runExplainQueryStub.firstCall.args[0];
-    expect(partitionKey).toBe('part1');
-  });
-
-  it('runs explain query with partition when one is set', function () {
-    const runQueryStub = sinon.stub();
-    const wrapper = mount(
-      <MangoQueryEditor
-        {...defaultProps}
-        partitionKey='part1'
-        runQuery={runQueryStub}
-      />
-    );
-
-    wrapper.find('form.form-horizontal').simulate('submit', { preventDefault: () => {} });
-    sinon.assert.called(runQueryStub);
-    const { partitionKey } = runQueryStub.firstCall.args[0];
-    expect(partitionKey).toBe('part1');
-  });
-});
diff --git a/app/addons/documents/mango/components/ExecutionStats.js b/app/addons/documents/mango/components/ExecutionStats.js
deleted file mode 100644
index 48b815a..0000000
--- a/app/addons/documents/mango/components/ExecutionStats.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import { Popover, OverlayTrigger } from 'react-bootstrap';
-
-export default class ExecutionStats extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  humanizeDuration(milliseconds) {
-    if (milliseconds < 1000) {
-      return Math.round(milliseconds) + ' ms';
-    }
-    let seconds = milliseconds / 1000;
-    if (seconds < 60) {
-      return Math.floor(seconds) + ' seconds';
-    }
-    const minutes = Math.floor(seconds / 60);
-    seconds = Math.floor(seconds - (minutes * 60));
-
-    const minuteText = minutes > 1 ? 'minutes' : 'minute';
-    const secondsText = seconds > 1 ? 'seconds' : 'second';
-
-    return [minutes, ' ', minuteText, ', ', seconds, ' ', secondsText].join('');
-  }
-
-  getWarning(warnings) {
-    if (warnings) {
-      const lines = warnings.split('\n').map((warnText, i) => {
-        return <React.Fragment key={i}>{warnText}<br/></React.Fragment>;
-      });
-      return <span>{lines}</span>;
-    }
-  }
-
-  warningPopupComponent(warningText) {
-    if (warningText) {
-      return (<div className="warning">
-        <i className="fonticon-attention-circled"></i> {warningText}
-      </div>);
-    }
-  }
-
-  executionStatsLine(title, value, alwaysShow = false, units = "") {
-    if (typeof value === 'number') {
-      const hasValue = value === 0 && !alwaysShow ? "false" : "true";
-      return <div data-status={hasValue}>{title + ": "}<span className="value">{value.toLocaleString()} {units}</span></div>;
-    }
-    return null;
-  }
-
-  executionStatsPopupComponent(executionStats) {
-    if (!executionStats) return null;
-    return (
-      <div className="execution-stats-popup-component">
-        {/* keys examined always 0 so hide it for now */}
-        {/* {this.executionStatsLine("keys examined", executionStats.total_keys_examined)} */}
-        {this.executionStatsLine("documents examined", executionStats.total_docs_examined)}
-        {this.executionStatsLine("documents examined (quorum)", executionStats.total_quorum_docs_examined)}
-        {this.executionStatsLine("results returned", executionStats.results_returned, true)}
-        {this.executionStatsLine("execution time", Math.round(executionStats.execution_time_ms), false, "ms")}
-      </div>
-    );
-  }
-
-  popup(executionStats, warningText) {
-    return (
-      <Popover id="popover-execution-stats" title="Execution Statistics">
-        <div className="execution-stats-popup">
-          {this.executionStatsPopupComponent(executionStats)}
-          {this.warningPopupComponent(warningText)}
-        </div>
-      </Popover>
-    );
-  }
-
-  render() {
-    const {
-      executionStats,
-      warning
-    } = this.props;
-
-    const warningText = this.getWarning(warning);
-
-    let warningComponent = null;
-    if (warningText) {
-      warningComponent = <i className="fonticon-attention-circled"></i>;
-    }
-
-    let executionStatsComponent = null;
-    if (executionStats) {
-      executionStatsComponent = (
-        <span className="execution-stats-component">Executed in {this.humanizeDuration(executionStats.execution_time_ms)}</span>
-      );
-    } else if (warningText) {
-      executionStatsComponent = (
-        <span className="execution-stats-component">Warning</span>
-      );
-    }
-
-    const popup = this.popup(executionStats, warningText);
-    return (
-      <OverlayTrigger trigger={['hover', 'focus', 'click']} placement="right" overlay={popup}>
-        <span className="execution-stats">
-          {warningComponent}
-          {executionStatsComponent}
-        </span>
-      </OverlayTrigger>
-    );
-  }
-}
-
-ExecutionStats.propTypes = {
-  executionStats: PropTypes.object,
-  warning: PropTypes.string
-};
diff --git a/app/addons/documents/mango/components/ExplainPage.js b/app/addons/documents/mango/components/ExplainPage.js
deleted file mode 100644
index cf44918..0000000
--- a/app/addons/documents/mango/components/ExplainPage.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from "react";
-
-export default class ExplainPage extends Component {
-  componentDidMount () {
-    prettyPrint();
-  }
-
-  componentDidUpdate () {
-    prettyPrint();
-  }
-
-  render () {
-    return (
-      <div>
-        <pre className="prettyprint">{JSON.stringify(this.props.explainPlan, null, ' ')}</pre>
-      </div>
-    );
-  }
-}
-
-ExplainPage.propTypes = {
-  explainPlan: PropTypes.object.isRequired
-};
diff --git a/app/addons/documents/mango/components/MangoIndexEditor.js b/app/addons/documents/mango/components/MangoIndexEditor.js
deleted file mode 100644
index 28ba57d..0000000
--- a/app/addons/documents/mango/components/MangoIndexEditor.js
+++ /dev/null
@@ -1,192 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import ReactSelect from 'react-select';
-import '../../../../../assets/js/plugins/prettify';
-import app from '../../../../app';
-import FauxtonAPI from '../../../../core/api';
-import ReactComponents from '../../../components/react-components';
-
-const PaddedBorderedBox = ReactComponents.PaddedBorderedBox;
-const CodeEditorPanel = ReactComponents.CodeEditorPanel;
-const ConfirmButton = ReactComponents.ConfirmButton;
-const LoadLines = ReactComponents.LoadLines;
-const getDocUrl = app.helpers.getDocUrl;
-
-export default class MangoIndexEditor extends Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      partitionedSelected: true
-    };
-    this.onTemplateSelected = this.onTemplateSelected.bind(this);
-    this.onTogglePartitioned = this.onTogglePartitioned.bind(this);
-    this.saveIndex = this.saveIndex.bind(this);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-    this.props.loadIndexTemplates();
-    this.props.clearResults();
-    this.props.loadIndexList({
-      fetchParams: { ...this.props.fetchParams, skip: 0 }
-    });
-  }
-
-  componentDidUpdate(prevProps) {
-    prettyPrint();
-    if (prevProps.templates != this.props.templates) {
-      // Explicitly set value because updating 'CodeEditorPanel.defaultCode' won't change the editor once it's already loaded.
-      this.setEditorValue(this.props.templates[0].value);
-    }
-  }
-
-  setEditorValue(newValue = '') {
-    if (this.codeEditor) {
-      return this.codeEditor.getEditor().setValue(newValue);
-    }
-  }
-
-  getEditorValue() {
-    return this.codeEditor.getValue();
-  }
-
-  editorHasErrors() {
-    return this.codeEditor.getEditor().hasErrors();
-  }
-
-  onTemplateSelected(selectedItem) {
-    this.setEditorValue(selectedItem.value);
-  }
-
-  onTogglePartitioned() {
-    this.setState({partitionedSelected: !this.state.partitionedSelected});
-  }
-
-  partitionedCheckobx() {
-    if (!this.props.isDbPartitioned) {
-      return null;
-    }
-    return (
-      <label>
-        <input
-          id="js-partitioned-index"
-          type="checkbox"
-          checked={this.state.partitionedSelected}
-          onChange={this.onTogglePartitioned}
-          style={{margin: '0px 10px 0px 0px'}} />
-        Partitioned
-      </label>
-    );
-  }
-
-  editor() {
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const editQueryURL = '#' + FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(this.props.databaseName), encodedPartKey);
-    return (
-      <div className="mango-editor-wrapper">
-        <form className="form-horizontal" onSubmit={this.saveIndex}>
-          <div className="padded-box">
-            <ReactSelect
-              className="mango-select"
-              options={this.props.templates}
-              ref={node => this.templates = node}
-              placeholder="Examples"
-              searchable={false}
-              clearable={false}
-              autosize={false}
-              onChange={this.onTemplateSelected}
-            />
-          </div>
-          <PaddedBorderedBox>
-            <CodeEditorPanel
-              id="query-field"
-              ref={node => this.codeEditor = node}
-              title="Index"
-              docLink={getDocUrl('MANGO_INDEX')}
-              defaultCode={this.props.queryIndexCode} />
-            {this.partitionedCheckobx()}
-          </PaddedBorderedBox>
-          <div className="padded-box">
-            <div className="control-group">
-              <ConfirmButton text="Create index" id="create-index-btn" showIcon={false} />
-              <a className="edit-link" href={editQueryURL}>edit query</a>
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-    return this.editor();
-  }
-
-  saveIndex(event) {
-    event.preventDefault();
-
-    const showInvalidCodeMsg = () => {
-      FauxtonAPI.addNotification({
-        msg: 'Please fix the Javascript errors and try again.',
-        type: 'error',
-        clear: true
-      });
-    };
-    if (this.editorHasErrors()) {
-      showInvalidCodeMsg();
-      return;
-    }
-
-    let indexCode = this.getEditorValue();
-    if (this.props.isDbPartitioned) {
-      // Set the partitioned property if not yet set
-      try {
-        const json = JSON.parse(indexCode);
-        if (json.partitioned !== true && json.partitioned !== false) {
-          json.partitioned = this.state.partitionedSelected;
-        }
-        indexCode = JSON.stringify(json);
-      } catch (err) {
-        showInvalidCodeMsg();
-      }
-    }
-
-    this.props.saveIndex({
-      databaseName: this.props.databaseName,
-      indexCode: indexCode,
-      fetchParams: this.props.fetchParams
-    });
-  }
-}
-
-MangoIndexEditor.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  databaseName: PropTypes.string.isRequired,
-  isDbPartitioned: PropTypes.bool.isRequired,
-  saveIndex: PropTypes.func.isRequired,
-  queryIndexCode: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string,
-  loadIndexTemplates: PropTypes.func.isRequired,
-  clearResults: PropTypes.func.isRequired,
-  loadIndexList: PropTypes.func.isRequired
-};
-
-MangoIndexEditor.defaultProps = {
-  isLoading: true,
-  isDbPartitioned: false
-};
diff --git a/app/addons/documents/mango/components/MangoIndexEditorContainer.js b/app/addons/documents/mango/components/MangoIndexEditorContainer.js
deleted file mode 100644
index 79ca587..0000000
--- a/app/addons/documents/mango/components/MangoIndexEditorContainer.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import * as IndexResultActions from '../../index-results/actions/fetch';
-import * as IndexResultBaseActions from '../../index-results/actions/base';
-import MangoIndexEditor from './MangoIndexEditor';
-import Helpers from '../mango.helper';
-import Actions from '../mango.actions';
-import * as MangoAPI from '../mango.api';
-
-const mapStateToProps = ({ mangoQuery, indexResults, databases }, ownProps) => {
-  return {
-    description: ownProps.description,
-    databaseName: ownProps.databaseName,
-    queryIndexCode: Helpers.formatCode(mangoQuery.queryIndexCode),
-    templates: mangoQuery.queryIndexTemplates,
-    fetchParams: indexResults.fetchParams,
-    partitionKey: ownProps.partitionKey,
-    isLoading: databases.isLoadingDbInfo,
-    isDbPartitioned: databases.isDbPartitioned
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    saveIndex: (options) => {
-      dispatch(Actions.saveIndex(options));
-    },
-    loadIndexList: (options) => {
-      const queryIndexes = (params) => { return MangoAPI.fetchIndexes(ownProps.databaseName, params); };
-      dispatch(IndexResultActions.fetchDocs(queryIndexes, options.fetchParams, {}));
-    },
-    clearResults: () => {
-      dispatch(IndexResultBaseActions.resetState());
-    },
-    loadIndexTemplates: () => {
-      dispatch(Actions.loadIndexTemplates());
-    }
-  };
-};
-
-const MangoIndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MangoIndexEditor);
-
-export default MangoIndexEditorContainer;
diff --git a/app/addons/documents/mango/components/MangoQueryEditor.js b/app/addons/documents/mango/components/MangoQueryEditor.js
deleted file mode 100644
index a702955..0000000
--- a/app/addons/documents/mango/components/MangoQueryEditor.js
+++ /dev/null
@@ -1,196 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from "react";
-import ReactSelect from "react-select";
-import "../../../../../assets/js/plugins/prettify";
-import app from "../../../../app";
-import FauxtonAPI from "../../../../core/api";
-import ReactComponents from "../../../components/react-components";
-import ExecutionStats from './ExecutionStats';
-
-const PaddedBorderedBox = ReactComponents.PaddedBorderedBox;
-const CodeEditorPanel = ReactComponents.CodeEditorPanel;
-const getDocUrl = app.helpers.getDocUrl;
-
-export default class MangoQueryEditor extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    prettyPrint();
-    this.props.loadQueryHistory({ databaseName: this.props.databaseName });
-    // Clear results list in case it was populated by other pages
-    this.props.clearResults();
-
-    // Add key binding to run query when doing Ctrl-Enter
-    const editor = this.codeEditor.codeEditor.editor;
-    const runQueryCmdName = "runQuery";
-    if (!editor.commands.byName[runQueryCmdName]) {
-      editor.commands.addCommand({
-        name: runQueryCmdName,
-        bindKey: {win: 'Ctrl-Enter', mac: 'Command-Option-Enter'},
-        exec: () => {
-          this.runQuery({preventDefault: () => {}});
-        },
-        readOnly: true
-      });
-    }
-  }
-
-  componentDidUpdate (prevProps) {
-    prettyPrint();
-    if (prevProps.history != this.props.history) {
-      // Explicitly set value because updating 'CodeEditorPanel.defaultCode' won't change the editor once it's already loaded.
-      this.setEditorValue(this.props.history[0].value);
-    }
-  }
-
-  setEditorValue (newValue = '') {
-    return this.codeEditor.getEditor().setValue(newValue);
-  }
-
-  getEditorValue () {
-    return this.codeEditor.getValue();
-  }
-
-  editorHasErrors () {
-    return this.codeEditor.getEditor().hasErrors();
-  }
-
-  onHistorySelected(selectedItem) {
-    this.setEditorValue(selectedItem.value);
-  }
-
-  editor() {
-    return (
-      <div className="mango-editor-wrapper">
-        <form className="form-horizontal" onSubmit={(ev) => {this.runQuery(ev);}}>
-          <div className="padded-box">
-            <ReactSelect
-              className="mango-select"
-              options={this.props.history}
-              ref={node => this.history = node}
-              placeholder="Query history"
-              searchable={false}
-              clearable={false}
-              autosize={false}
-              onChange={(elem) => {this.onHistorySelected(elem);}}
-            />
-          </div>
-          <PaddedBorderedBox>
-            <CodeEditorPanel
-              id="query-field"
-              ref={node => this.codeEditor = node}
-              title={this.props.editorTitle}
-              docLink={getDocUrl('MANGO_SEARCH')}
-              defaultCode={this.props.queryFindCode} />
-          </PaddedBorderedBox>
-          <div className="padded-box">
-            <div className="control-group">
-              <button type="submit" id="create-index-btn" className="btn btn-primary btn-space">Run Query</button>
-              <button type="button" id="explain-btn" className="btn btn-secondary btn-space"
-                onClick={(ev) => {this.runExplain(ev);} }>Explain</button>
-              <a className="edit-link" style={{} } onClick={(ev) => {this.manageIndexes(ev);}}>manage indexes</a>
-            </div>
-            <div>
-              <ExecutionStats {...this.props} />
-            </div>
-          </div>
-        </form>
-      </div>
-    );
-  }
-
-  render () {
-    if (this.props.isLoading) {
-      return (
-        <div className="mango-editor-wrapper">
-          <ReactComponents.LoadLines />
-        </div>
-      );
-    }
-
-    return this.editor();
-  }
-
-  notifyOnQueryError() {
-    if (this.editorHasErrors()) {
-      FauxtonAPI.addNotification({
-        msg:  'Please fix the Javascript errors and try again.',
-        type: 'error',
-        clear: true
-      });
-
-      return true;
-    }
-    return false;
-  }
-
-  manageIndexes(event) {
-    event.preventDefault();
-
-    this.props.manageIndexes();
-
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const manageIndexURL = '#' + FauxtonAPI.urls('mango', 'index-app',
-      encodeURIComponent(this.props.databaseName), encodedPartKey);
-    FauxtonAPI.navigate(manageIndexURL);
-  }
-
-  runExplain(event) {
-    event.preventDefault();
-
-    if (this.notifyOnQueryError()) {
-      return;
-    }
-
-    this.props.runExplainQuery({
-      databaseName: this.props.databaseName,
-      partitionKey: this.props.partitionKey,
-      queryCode: this.getEditorValue()
-    });
-  }
-
-  runQuery (event) {
-    event.preventDefault();
-
-    if (this.notifyOnQueryError()) {
-      return;
-    }
-    this.props.clearResults();
-    this.props.runQuery({
-      databaseName: this.props.databaseName,
-      partitionKey: this.props.partitionKey,
-      queryCode: JSON.parse(this.getEditorValue()),
-      fetchParams: {...this.props.fetchParams, skip: 0}
-    });
-  }
-}
-
-MangoQueryEditor.propTypes = {
-  description: PropTypes.string.isRequired,
-  editorTitle: PropTypes.string.isRequired,
-  queryFindCode: PropTypes.string.isRequired,
-  queryFindCodeChanged: PropTypes.bool,
-  databaseName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string,
-  runExplainQuery: PropTypes.func.isRequired,
-  runQuery: PropTypes.func.isRequired,
-  manageIndexes: PropTypes.func.isRequired,
-  loadQueryHistory: PropTypes.func.isRequired,
-  clearResults: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/mango/components/MangoQueryEditorContainer.js b/app/addons/documents/mango/components/MangoQueryEditorContainer.js
deleted file mode 100644
index ede0e56..0000000
--- a/app/addons/documents/mango/components/MangoQueryEditorContainer.js
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import FauxtonAPI from "../../../../core/api";
-import * as IndexResultActions from '../../index-results/actions/fetch';
-import * as IndexResultBaseActions from '../../index-results/actions/base';
-import MangoQueryEditor from './MangoQueryEditor';
-import Helpers from '../mango.helper';
-import Actions from '../mango.actions';
-import * as MangoAPI from '../mango.api';
-
-const getAvailableQueryIndexes = ({ availableIndexes }) => {
-  if (!availableIndexes) {
-    return [];
-  }
-  return availableIndexes.filter(({ type }) => {
-    return ['json', 'special'].includes(type);
-  });
-};
-
-const getAvailableAdditionalIndexes = ({ additionalIndexes }) => {
-  if (!additionalIndexes) {
-    return [];
-  }
-  const indexes = FauxtonAPI.getExtensions('mango:additionalIndexes')[0];
-  if (!indexes) {
-    return;
-  }
-
-  return additionalIndexes.filter((el) => {
-    return el.get('type').indexOf(indexes.type) !== -1;
-  });
-};
-
-const mapStateToProps = (state, ownProps) => {
-  const mangoQuery = state.mangoQuery;
-  const indexResults = state.indexResults;
-
-  return {
-    databaseName: ownProps.databaseName,
-    queryFindCode: Helpers.formatCode(mangoQuery.queryFindCode),
-    queryFindCodeChanged: mangoQuery.queryFindCodeChanged,
-    availableIndexes: getAvailableQueryIndexes(mangoQuery),
-    additionalIndexes: getAvailableAdditionalIndexes(mangoQuery),
-    isLoading: mangoQuery.isLoading,
-    history: mangoQuery.history,
-    description: ownProps.description,
-    editorTitle: ownProps.editorTitle,
-    additionalIndexesText: ownProps.additionalIndexesText,
-    fetchParams: indexResults.fetchParams,
-    executionStats: indexResults.executionStats,
-    warning: indexResults.warning,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch/*, ownProps*/) => {
-  return {
-    loadQueryHistory: (options) => {
-      dispatch(Actions.loadQueryHistory(options));
-    },
-
-    runExplainQuery: (options) => {
-      dispatch(Actions.runExplainQuery(options));
-    },
-
-    runQuery: (options) => {
-      const queryDocs = (params) => {
-        return MangoAPI.mangoQueryDocs(options.databaseName, options.partitionKey, options.queryCode, params);
-      };
-
-      dispatch(Actions.hideQueryExplain());
-      dispatch(Actions.newQueryFindCode(options));
-      dispatch(IndexResultActions.fetchDocs(queryDocs, options.fetchParams, {}));
-    },
-
-    clearResults: () => {
-      dispatch(IndexResultBaseActions.resetState());
-    },
-
-    manageIndexes: () => {
-      dispatch(Actions.hideQueryExplain());
-    }
-
-  };
-};
-
-const MangoQueryEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MangoQueryEditor);
-
-export default MangoQueryEditorContainer;
diff --git a/app/addons/documents/mango/mango.actions.js b/app/addons/documents/mango/mango.actions.js
deleted file mode 100644
index be79bd4..0000000
--- a/app/addons/documents/mango/mango.actions.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./mango.actiontypes";
-import * as IndexResultActions from "../index-results/actions/fetch";
-import * as MangoAPI from "./mango.api";
-
-export default {
-
-  loadQueryHistory: function (options) {
-    return {
-      type: ActionTypes.MANGO_LOAD_QUERY_HISTORY,
-      options: options
-    };
-  },
-
-  newQueryFindCode: function (options) {
-    return {
-      type: ActionTypes.MANGO_NEW_QUERY_FIND_CODE,
-      options: options
-    };
-  },
-
-  showQueryExplain: function (options) {
-    return {
-      type: ActionTypes.MANGO_SHOW_EXPLAIN_RESULTS,
-      options: options
-    };
-  },
-
-  hideQueryExplain: function () {
-    return {
-      type: ActionTypes.MANGO_HIDE_EXPLAIN_RESULTS
-    };
-  },
-
-  newQueryCreateIndexTemplate: function (options) {
-    return {
-      type: ActionTypes.MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE,
-      options: options
-    };
-  },
-
-  loadIndexTemplates: function (options) {
-    return {
-      type: ActionTypes.MANGO_LOAD_INDEX_TEMPLATES,
-      options: options
-    };
-  },
-
-  requestSaveIndex: function () {
-    return {
-      type: ActionTypes.MANGO_SAVE_INDEX_REQUEST
-    };
-  },
-
-  saveIndex: function ({ databaseName, indexCode, fetchParams }) {
-    FauxtonAPI.addNotification({
-      msg: 'Saving index for query...',
-      type: 'info',
-      clear: true
-    });
-
-    return (dispatch) => {
-      // Notifies index save operation was requested
-      dispatch(this.requestSaveIndex());
-
-      return MangoAPI.createIndex(databaseName, indexCode)
-        .then(() => {
-          const runQueryURL = '#' + FauxtonAPI.urls('mango', 'query-app',
-            app.utils.safeURLName(databaseName), '');
-
-          const queryIndexes = (params) => { return MangoAPI.fetchIndexes(databaseName, params); };
-          dispatch(IndexResultActions.fetchDocs(queryIndexes, fetchParams, {}));
-
-          FauxtonAPI.addNotification({
-            msg: 'Index is ready for querying. <a href="' + runQueryURL + '">Run a Query.</a>',
-            type: 'success',
-            clear: true,
-            escape: false
-          });
-        })
-        .catch((error) => {
-          FauxtonAPI.addNotification({
-            msg: 'Failed to create index. ' + this.errorReason(error),
-            type: 'error',
-            clear: true
-          });
-        });
-    };
-  },
-
-  errorReason: function (error) {
-    return 'Reason: ' + ((error && error.message) || 'n/a');
-  },
-
-  runExplainQuery: function ({ databaseName, partitionKey, queryCode }) {
-    return (dispatch) => {
-      return MangoAPI.fetchQueryExplain(databaseName, partitionKey, queryCode)
-        .then((explainPlan) => {
-          dispatch(this.showQueryExplain({ explainPlan }));
-        }).catch(() => {
-          FauxtonAPI.addNotification({
-            msg: 'There was an error fetching the query plan.',
-            type: 'error',
-            clear: true
-          });
-        });
-    };
-  }
-
-};
diff --git a/app/addons/documents/mango/mango.actiontypes.js b/app/addons/documents/mango/mango.actiontypes.js
deleted file mode 100644
index 12d9343..0000000
--- a/app/addons/documents/mango/mango.actiontypes.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed 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.
-
-export default {
-  MANGO_NEW_QUERY_FIND_CODE: 'MANGO_NEW_QUERY_FIND_CODE',
-  MANGO_LOAD_QUERY_HISTORY: 'MANGO_LOAD_QUERY_HISTORY',
-  MANGO_LOAD_INDEX_TEMPLATES: 'MANGO_LOAD_INDEX_TEMPLATES',
-  MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE: 'MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE',
-  MANGO_SAVE_INDEX_REQUEST: 'MANGO_SAVE_INDEX_REQUEST',
-  MANGO_SHOW_EXPLAIN_RESULTS: 'MANGO_SHOW_EXPLAIN_RESULTS',
-  MANGO_HIDE_EXPLAIN_RESULTS: 'MANGO_HIDE_EXPLAIN_RESULTS',
-};
diff --git a/app/addons/documents/mango/mango.api.js b/app/addons/documents/mango/mango.api.js
deleted file mode 100644
index 59cbebf..0000000
--- a/app/addons/documents/mango/mango.api.js
+++ /dev/null
@@ -1,128 +0,0 @@
-// Licensed 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.
-
-import app from "../../../app";
-import {post, get} from '../../../core/ajax';
-import FauxtonAPI from "../../../core/api";
-import Constants from '../constants';
-
-export const fetchQueryExplain = (databaseName, partitionKey, queryCode) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  const url = FauxtonAPI.urls('mango', 'explain-server', encodeURIComponent(databaseName), encodedPartKey);
-
-  return post(url, queryCode, {rawBody: true}).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return json;
-  });
-};
-
-export const createIndex = (databaseName, indexCode) => {
-  const url = FauxtonAPI.urls('mango', 'index-server',
-    app.utils.safeURLName(databaseName));
-
-  return post(url, indexCode, {rawBody: true}).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return json;
-  });
-};
-
-export const fetchIndexes = (databaseName, params) => {
-  const query = app.utils.queryString(params);
-  let url = FauxtonAPI.urls('mango', 'index-server', app.utils.safeURLName(databaseName));
-  url = `${url}${url.includes('?') ? '&' : '?'}${query}`;
-
-  return get(url).then((json) => {
-    if (json.error) {
-      throw new Error('(' + json.error + ') ' + json.reason);
-    }
-    return {
-      docs: json.indexes,
-      docType: Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX,
-      layout: Constants.LAYOUT_ORIENTATION.JSON
-    };
-  });
-};
-
-// assume all databases being accessed are on the same
-// host / CouchDB version
-let supportsExecutionStatsCache = null;
-const supportsExecutionStats = (databaseName) => {
-  if (supportsExecutionStatsCache === null) {
-    return new FauxtonAPI.Promise((resolve) => {
-      mangoQuery(databaseName, '', {
-        selector: {
-          "_id": {"$gt": "a" }
-        },
-        execution_stats: true
-      }, {limit: 1})
-        .then(resp => {
-          supportsExecutionStatsCache = resp.status == 200;
-          resolve(supportsExecutionStatsCache);
-        });
-    });
-  }
-  return Promise.resolve(supportsExecutionStatsCache);
-};
-
-// Determines what params need to be sent to couch based on the Mango query entered
-// by the user and what fauxton is using to emulate pagination (fetchParams).
-export const mergeFetchParams = (queryCode, fetchParams) => {
-  // Since Fauxton pagination's 'limit' is always (docs-per-page + 1), this ensures
-  // (page-number * docs-per-page) doesn't exceed the query's 'limit' value.
-  let limit = fetchParams.limit;
-  const docsPerPage = fetchParams.limit - 1;
-  const pageNumber = Math.floor(fetchParams.skip / docsPerPage) + 1;
-  const docsOverLimit = (pageNumber * docsPerPage) - queryCode.limit;
-  if (docsOverLimit >= 0) {
-    limit = docsPerPage - docsOverLimit;
-  }
-
-  return {
-    ...queryCode,
-    limit: limit,
-    skip: queryCode.skip ? (fetchParams.skip + queryCode.skip) : fetchParams.skip
-  };
-};
-
-export const mangoQuery = (databaseName, partitionKey, queryCode, fetchParams) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  const url = FauxtonAPI.urls('mango', 'query-server', encodeURIComponent(databaseName), encodedPartKey);
-  const modifiedQuery = mergeFetchParams(queryCode, fetchParams);
-  return post(url, modifiedQuery, {raw: true});
-};
-
-export const mangoQueryDocs = (databaseName, partitionKey, queryCode, fetchParams) => {
-  // we can only add the execution_stats field if it is supported by the server
-  // otherwise Couch throws an error
-  return supportsExecutionStats(databaseName).then((shouldFetchExecutionStats) => {
-    if (shouldFetchExecutionStats) {
-      queryCode.execution_stats = true;
-    }
-    return mangoQuery(databaseName, partitionKey, queryCode, fetchParams)
-      .then((res) => res.json())
-      .then((json) => {
-        if (json.error) {
-          throw new Error('(' + json.error + ') ' + json.reason);
-        }
-        return {
-          docs: json.docs,
-          docType: Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY,
-          executionStats: json.execution_stats,
-          warning: json.warning
-        };
-      });
-  });
-};
diff --git a/app/addons/documents/mango/mango.components.js b/app/addons/documents/mango/mango.components.js
deleted file mode 100644
index 94dce28..0000000
--- a/app/addons/documents/mango/mango.components.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed 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.
-
-import MangoQueryEditorContainer from "./components/MangoQueryEditorContainer";
-import MangoIndexEditorContainer from "./components/MangoIndexEditorContainer";
-import ExplainPage from "./components/ExplainPage";
-
-export default {
-  MangoIndexEditorContainer,
-  MangoQueryEditorContainer,
-  ExplainPage
-};
diff --git a/app/addons/documents/mango/mango.constants.js b/app/addons/documents/mango/mango.constants.js
deleted file mode 100644
index b212092..0000000
--- a/app/addons/documents/mango/mango.constants.js
+++ /dev/null
@@ -1,21 +0,0 @@
-export default {
-  INDEX_TEMPLATES: [{
-    label: 'Single field (json)',
-    code: {
-      "index": {
-        "fields": ["foo"]
-      },
-      "name": "foo-json-index",
-      "type" : "json"
-    }
-  }, {
-    label: 'Multiple fields (json)',
-    code: {
-      "index": {
-        "fields": ["foo", "bar"]
-      },
-      "name": "foo-bar-json-index",
-      "type" : "json"
-    }
-  }]
-};
diff --git a/app/addons/documents/mango/mango.helper.js b/app/addons/documents/mango/mango.helper.js
deleted file mode 100644
index 09586c0..0000000
--- a/app/addons/documents/mango/mango.helper.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../core/api";
-
-const getIndexName = ({def, type}) => {
-  let nameArray = [],
-      indexes;
-
-  nameArray = def.fields.reduce(function (acc, el, i) {
-    if (i === 0) {
-      acc.push(type + ': ' + Object.keys(el)[0]);
-    } else {
-      acc.push(Object.keys(el)[0]);
-    }
-
-    return acc;
-  }, []);
-
-  if (!nameArray.length) {
-    indexes = FauxtonAPI.getExtensions('mango:additionalIndexes')[0];
-    if (indexes) {
-      nameArray = indexes.createHeader({def, type});
-    } else {
-      nameArray = [type + ': ' + (def.selector ? JSON.stringify(def.selector) : '{}')];
-    }
-  }
-
-  return nameArray.join(', ');
-};
-
-const formatCode = (code) => {
-  return JSON.stringify(code, null, 3);
-};
-
-const getIndexContent = (doc) => {
-  const content = {
-    ...doc
-  };
-
-  delete content.ddoc;
-  delete content.name;
-
-  return JSON.stringify(content, null, ' ');
-};
-
-export default {
-  getIndexName,
-  formatCode,
-  getIndexContent
-};
diff --git a/app/addons/documents/mango/mango.reducers.js b/app/addons/documents/mango/mango.reducers.js
deleted file mode 100644
index 8e4cd80..0000000
--- a/app/addons/documents/mango/mango.reducers.js
+++ /dev/null
@@ -1,205 +0,0 @@
-// Licensed 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.
-
-import app from "../../../app";
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./mango.actiontypes";
-import MangoHelper from "./mango.helper";
-import constants from "./mango.constants";
-
-const defaultQueryIndexCode = {
-  "index": {
-    "fields": ["_id"]
-  },
-  "type": "json"
-};
-
-const defaultQueryFindCode = {
-  "selector": {
-    "_id": { "$gt": null }
-  }
-};
-
-const createSelectItem = (code) => {
-  // ensure we're working with a deserialized query object
-  const object = typeof code === "string" ? JSON.parse(code) : code;
-
-  const singleLineValue = JSON.stringify(object);
-  const multiLineValue = MangoHelper.formatCode(object);
-
-  return {
-    label: singleLineValue,
-    value: multiLineValue,
-    className: 'mango-select-entry'
-  };
-};
-
-const getDefaultHistory = () => {
-  return [createSelectItem(defaultQueryFindCode)];
-};
-
-const getDefaultQueryIndexTemplates = () => {
-  return constants.INDEX_TEMPLATES.map((el) => {
-    const item = createSelectItem(el.code);
-    item.label = el.label || item.label;
-    return item;
-  });
-};
-
-const loadIndexTemplates = () => {
-  const extTemplates = FauxtonAPI.getExtensions('mango:indexTemplates')[0];
-  if (extTemplates) {
-    return extTemplates.filter((elem) => {
-      return !!elem.code;
-    }).map((elem) => {
-      const item = createSelectItem(elem.code);
-      item.label = elem.label || item.label;
-      return item;
-    });
-  }
-
-  return getDefaultQueryIndexTemplates();
-};
-
-const HISTORY_LIMIT = 5;
-
-const initialState = {
-  queryFindCode: defaultQueryFindCode,
-  queryIndexCode: defaultQueryIndexCode,
-  queryFindCodeChanged: false,
-  explainPlan: undefined,
-  history: getDefaultHistory(),
-  historyKey: 'default',
-  queryIndexTemplates: getDefaultQueryIndexTemplates()
-};
-
-const loadQueryHistory = (databaseName) => {
-  const historyKey = databaseName + '_queryhistory';
-  let history = app.utils.localStorageGet(historyKey);
-  if (history) {
-    return history;
-  }
-
-  history = FauxtonAPI.getExtensions('mango:queryHistory')[0];
-  if (history) {
-    return history.filter((elem) => {
-      return !!elem.code;
-    }).map((elem) => {
-      const item = createSelectItem(elem.code);
-      item.label = elem.label || item.label;
-      return item;
-    });
-  }
-
-  return getDefaultHistory();
-};
-
-const updateQueryHistory = ({ historyKey, history }, queryCode, label) => {
-  const newHistory = history.slice();
-
-  const historyEntry = createSelectItem(queryCode);
-  historyEntry.label = label || historyEntry.label;
-
-  // remove existing entry if it exists
-  const indexOfExisting = newHistory.findIndex(el => el.value === historyEntry.value);
-  if (indexOfExisting > -1) {
-    newHistory.splice(indexOfExisting, 1);
-  }
-
-  // insert item at head of array
-  newHistory.unshift(historyEntry);
-
-  // limit array length
-  if (newHistory.length > HISTORY_LIMIT) {
-    newHistory.splice(HISTORY_LIMIT, 1);
-  }
-
-  app.utils.localStorageSet(historyKey, newHistory);
-
-  return newHistory;
-};
-
-const updateQueryIndexTemplates = ({ queryIndexTemplates }, value, label) => {
-  const newTemplates = queryIndexTemplates.slice();
-  const templateItem = createSelectItem(value);
-  templateItem.label = label || templateItem.label;
-
-  const existing = newTemplates.find(i => i.value === templateItem.value);
-  if (!existing) {
-    newTemplates.push(templateItem);
-  }
-};
-
-export default function mangoquery(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.MANGO_SET_DB:
-      return {
-        ...state,
-        database: options.database,
-        historyKey: options.database ? options.database.id : 'default'
-      };
-
-    case ActionTypes.MANGO_LOAD_QUERY_HISTORY:
-      const hist = loadQueryHistory(options.databaseName);
-      return {
-        ...state,
-        history: hist,
-        historyKey: options.databaseName + '_queryhistory',
-        queryFindCode: JSON.parse(hist[0].value),
-      };
-
-    case ActionTypes.MANGO_NEW_QUERY_FIND_CODE:
-      return {
-        ...state,
-        queryFindCode: options.queryCode,
-        history: updateQueryHistory(state, options.queryCode)
-      };
-
-    case ActionTypes.MANGO_RESET:
-      return {
-        ...state,
-        getLoadingIndexes: options.isLoading
-      };
-
-    case ActionTypes.MANGO_LOAD_INDEX_TEMPLATES:
-      const templates = loadIndexTemplates();
-      return {
-        ...state,
-        queryIndexTemplates: templates,
-        queryIndexCode: JSON.parse(templates[0].value),
-      };
-
-    case ActionTypes.MANGO_NEW_QUERY_CREATE_INDEX_TEMPLATE:
-      return {
-        ...state,
-        queryIndexCode: options.code,
-        queryIndexTemplates: updateQueryIndexTemplates(state, options.code, options.label)
-      };
-
-    case ActionTypes.MANGO_SHOW_EXPLAIN_RESULTS:
-      return {
-        ...state,
-        explainPlan: options.explainPlan
-      };
-
-    case ActionTypes.MANGO_HIDE_EXPLAIN_RESULTS:
-      return {
-        ...state,
-        explainPlan: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/mangolayout.js b/app/addons/documents/mangolayout.js
deleted file mode 100644
index 70b3e93..0000000
--- a/app/addons/documents/mangolayout.js
+++ /dev/null
@@ -1,219 +0,0 @@
-// Licensed 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.
-
-import React, { Component } from 'react';
-import { connect } from 'react-redux';
-import app from "../../app";
-import { Breadcrumbs } from '../components/header-breadcrumbs';
-import NotificationCenterButton from '../fauxton/notifications/components/NotificationCenterButton';
-import MangoComponents from "./mango/mango.components";
-import * as MangoAPI from "./mango/mango.api";
-import IndexResultsContainer from './index-results/containers/IndexResultsContainer';
-import PaginationContainer from './index-results/containers/PaginationContainer';
-import ApiBarContainer from './index-results/containers/ApiBarContainer';
-import PartitionKeySelectorContainer from './partition-key/container';
-import FauxtonAPI from "../../core/api";
-import Constants from './constants';
-
-export const RightHeader = ({
-  docURL,
-  endpoint,
-  databaseName,
-  showPartitionKeySelector,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  const apiBar = <ApiBarContainer docURL={docURL} endpoint={endpoint} includeQueryOptionsParams={false}/>;
-  let partKeySelector = null;
-  if (showPartitionKeySelector) {
-    partKeySelector = (<PartitionKeySelectorContainer
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={onPartitionKeySelected}
-      onGlobalModeSelected={onGlobalModeSelected}
-      globalMode={globalMode}/>
-    );
-  }
-  return (
-    <div className="right-header-wrapper flex-layout flex-row flex-body">
-      <div style={{flex:1, padding: '18px 6px 12px 12px'}}>
-        {partKeySelector}
-      </div>
-      <div id="right-header" className="flex-body">
-      </div>
-      {apiBar}
-      <div id='notification-center-btn'>
-        <NotificationCenterButton />
-      </div>
-    </div>
-  );
-};
-
-export const MangoFooter = ({databaseName, fetchUrl, queryDocs}) => {
-  return (
-    <div id="footer">
-      <PaginationContainer
-        databaseName={databaseName}
-        fetchUrl={fetchUrl}
-        queryDocs={queryDocs} />
-    </div>
-  );
-};
-
-export const MangoHeader = ({
-  crumbs,
-  docURL,
-  endpoint,
-  databaseName,
-  partitionKey,
-  showPartitionKeySelector,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  return (
-    <div className="header-wrapper flex-layout flex-row">
-      <div className='flex-body faux__breadcrumbs-mango-header'>
-        <Breadcrumbs crumbs={crumbs} />
-      </div>
-      <RightHeader
-        docURL={docURL}
-        endpoint={endpoint}
-        databaseName={databaseName}
-        showPartitionKeySelector={showPartitionKeySelector}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-    </div>
-  );
-};
-
-MangoHeader.defaultProps = {
-  crumbs: []
-};
-
-export const MangoContent = ({ edit, designDocs, explainPlan, databaseName, fetchUrl, queryDocs, docType, partitionKey }) => {
-  const leftContent = edit ?
-    <MangoComponents.MangoIndexEditorContainer
-      description={app.i18n.en_US['mango-descripton-index-editor']}
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-    /> :
-    <MangoComponents.MangoQueryEditorContainer
-      description={app.i18n.en_US['mango-descripton']}
-      editorTitle={app.i18n.en_US['mango-title-editor']}
-      additionalIndexesText={app.i18n.en_US['mango-additional-indexes-heading']}
-      databaseName={databaseName}
-      partitionKey={partitionKey}
-    />;
-
-  let resultsPage = <IndexResultsContainer
-    fetchUrl={fetchUrl}
-    designDocs={designDocs}
-    ddocsOnly={false}
-    databaseName={databaseName}
-    fetchAtStartup={false}
-    queryDocs={queryDocs}
-    docType={docType}
-    partitionKey={partitionKey} />;
-
-  let mangoFooter = <MangoFooter
-    databaseName={databaseName}
-    fetchUrl={fetchUrl}
-    queryDocs={queryDocs} />;
-
-  if (explainPlan) {
-    resultsPage = <MangoComponents.ExplainPage explainPlan={explainPlan} />;
-    mangoFooter = null;
-  }
-
-  return (
-    <div id="two-pane-content" className="flex-layout flex-row flex-body">
-      <div id="left-content" className="flex-body">
-        {leftContent}
-      </div>
-      <div id="right-content" className="flex-body flex-layout flex-col">
-        <div id="dashboard-lower-content" className="flex-body">
-          {resultsPage}
-        </div>
-        {mangoFooter}
-      </div>
-    </div>
-  );
-};
-
-class MangoLayout extends Component {
-  constructor(props) {
-    super(props);
-  }
-
-  render() {
-    const { database, edit, docURL, crumbs, designDocs, fetchUrl, databaseName, queryFindCode, partitionKey, onPartitionKeySelected, onGlobalModeSelected, globalMode } = this.props;
-    let endpoint = this.props.endpoint;
-
-    if (this.props.explainPlan) {
-      const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-      endpoint = FauxtonAPI.urls('mango', 'explain-apiurl', encodeURIComponent(database), encodedPartKey);
-    }
-    let queryFunction = (params) => { return MangoAPI.mangoQueryDocs(databaseName, partitionKey, queryFindCode, params); };
-    let docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY;
-    if (edit) {
-      queryFunction = (params) => { return MangoAPI.fetchIndexes(databaseName, params); };
-      docType = Constants.INDEX_RESULTS_DOC_TYPE.MANGO_INDEX;
-    }
-    return (
-      <div id="dashboard" className="two-pane flex-layout flex-col">
-        <MangoHeader
-          docURL={docURL}
-          endpoint={endpoint}
-          crumbs={crumbs}
-          databaseName={databaseName}
-          partitionKey={partitionKey}
-          showPartitionKeySelector={!edit}
-          onPartitionKeySelected={onPartitionKeySelected}
-          onGlobalModeSelected={onGlobalModeSelected}
-          globalMode={globalMode}
-        />
-        <MangoContent
-          edit={edit}
-          designDocs={designDocs}
-          explainPlan={this.props.explainPlan}
-          databaseName={databaseName}
-          fetchUrl={fetchUrl}
-          queryDocs={queryFunction}
-          docType={docType}
-          partitionKey={partitionKey}
-        />
-      </div>
-    );
-  }
-}
-
-const mapStateToProps = ({ mangoQuery }, ownProps) => {
-  return {
-    explainPlan: mangoQuery.explainPlan,
-    queryFindCode: mangoQuery.queryFindCode,
-    partitionKey: ownProps.partitionKey,
-    databaseName: ownProps.databaseName,
-    onPartitionKeySelected: ownProps.onPartitionKeySelected,
-    onGlobalModeSelected: ownProps.onGlobalModeSelected,
-    globalMode: ownProps.globalMode
-  };
-};
-
-export const MangoLayoutContainer = connect(
-  mapStateToProps
-)(MangoLayout);
diff --git a/app/addons/documents/partition-key/PartitionKeySelector.js b/app/addons/documents/partition-key/PartitionKeySelector.js
deleted file mode 100644
index 1230bde..0000000
--- a/app/addons/documents/partition-key/PartitionKeySelector.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PartitionKeySelector extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      editorValue: '',
-      editMode: false
-    };
-    this.onModeSwitchClick = this.onModeSwitchClick.bind(this);
-    this.onBlur = this.onBlur.bind(this);
-    this.startEdit = this.startEdit.bind(this);
-    this.onKeyPress = this.onKeyPress.bind(this);
-    this.onChange = this.onChange.bind(this);
-    this.props.checkDbPartitioned(this.props.databaseName);
-  }
-
-  onModeSwitchClick(e) {
-    if (e && e.preventDefault) {
-      e.preventDefault();
-    }
-    if (!this.props.globalMode && this.props.onGlobalModeSelected) {
-      this.props.onGlobalModeSelected();
-    } else if (this.props.partitionKey) {
-      this.props.onPartitionKeySelected(this.state.editorValue);
-    } else {
-      this.startEdit();
-    }
-  }
-
-  startEdit() {
-    this.setState({editMode: true, editorValue: this.props.partitionKey});
-    setTimeout(() => this.textInput.focus());
-  }
-
-  updatePartitionKey() {
-    this.setState({editMode: false});
-    const trimmedValue = this.state.editorValue.trim();
-    if (trimmedValue) {
-      this.props.onPartitionKeySelected(trimmedValue);
-    } else {
-      this.props.onGlobalModeSelected();
-    }
-  }
-
-  onBlur(e) {
-    if (e && e.preventDefault) {
-      e.preventDefault();
-    }
-    this.updatePartitionKey();
-  }
-
-  onKeyPress(e) {
-    if (e.key === 'Enter') {
-      this.updatePartitionKey();
-    }
-  }
-
-  onChange(e) {
-    this.setState({editorValue: e.target.value});
-  }
-
-  globalHeader() {
-    return (
-      <button onClick={this.onModeSwitchClick} title="Partition Key Selector" className="button partition-selector__switch">
-        <i className="fonticon-filter"></i>
-        No partition selected
-      </button>
-    );
-  }
-
-  partitionHeader() {
-    const editor = (
-      <input type="text"
-        style={{padding:2, fontSize:16, margin: 0, display: this.state.editMode ? 'block' : 'none'}}
-        onKeyPress={this.onKeyPress}
-        onChange={this.onChange}
-        onBlur={this.onBlur}
-        value={this.state.editorValue}
-        ref={(input) => { this.textInput = input; }} />
-    );
-    let partName = 'Click to select a partition';
-    let className = 'partition-selector__key';
-    if (this.props.partitionKey !== '') {
-      partName = this.props.partitionKey;
-      className += ' partition-selector__key--active';
-    }
-    return (
-      <React.Fragment>
-        <button onClick={this.onModeSwitchClick} title="Partition Key Selector" className="button partition-selector__switch button partition-selector__switch--active">
-          <i className="fonticon-filter"></i>
-        </button>
-        <div className={className}>
-          <span onClick={this.startEdit} style={{display: this.state.editMode ? 'none' : 'block'}}>{partName}</span>
-          {editor}
-        </div>
-      </React.Fragment>
-    );
-  }
-
-  render() {
-    if (!this.props.selectorVisible) {
-      return null;
-    }
-    const global = this.props.globalMode && !this.state.editMode;
-    return (
-      <div className="partition-selector" >
-        {global ? this.globalHeader() : this.partitionHeader()}
-      </div>
-    );
-  }
-}
-
-PartitionKeySelector.defaultProps = {
-  partitionKey: '',
-  globalMode: true
-};
-
-PartitionKeySelector.propTypes = {
-  selectorVisible: PropTypes.bool.isRequired,
-  partitionKey: PropTypes.string.isRequired,
-  checkDbPartitioned: PropTypes.func.isRequired,
-  onPartitionKeySelected: PropTypes.func.isRequired,
-  onGlobalModeSelected: PropTypes.func,
-  globalMode: PropTypes.bool
-};
diff --git a/app/addons/documents/partition-key/actions.js b/app/addons/documents/partition-key/actions.js
deleted file mode 100644
index 63f9e00..0000000
--- a/app/addons/documents/partition-key/actions.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-
-import * as DatabasesAPI from '../../databases/api';
-import ActionTypes from './actiontypes';
-
-export const checkDbPartitioned = (databaseName) => (dispatch) => {
-  //Reset visibility to false
-  dispatch({
-    type: ActionTypes.PARTITON_KEY_HIDE_SELECTOR
-  });
-
-  DatabasesAPI.fetchDatabaseInfo(databaseName).then(dbInfo => {
-    if (dbInfo.props && dbInfo.props.partitioned === true) {
-      dispatch({
-        type: ActionTypes.PARTITON_KEY_SHOW_SELECTOR
-      });
-    }
-  });
-};
diff --git a/app/addons/documents/partition-key/actiontypes.js b/app/addons/documents/partition-key/actiontypes.js
deleted file mode 100644
index 76368ef..0000000
--- a/app/addons/documents/partition-key/actiontypes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// Licensed 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.
-export default {
-  PARTITON_KEY_SHOW_SELECTOR: 'PARTITON_KEY_SHOW_SELECTOR',
-  PARTITON_KEY_HIDE_SELECTOR: 'PARTITON_KEY_HIDE_SELECTOR'
-};
diff --git a/app/addons/documents/partition-key/container.js b/app/addons/documents/partition-key/container.js
deleted file mode 100644
index 0a1d373..0000000
--- a/app/addons/documents/partition-key/container.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import PartitionKeySelector from './PartitionKeySelector';
-import { checkDbPartitioned } from './actions';
-
-const mapStateToProps = ({ partitionKey }, ownProps) => {
-  return {
-    selectorVisible: partitionKey.selectorVisible,
-    databaseName: ownProps.databaseName,
-    partitionKey: ownProps.partitionKey,
-    onPartitionKeySelected: ownProps.onPartitionKeySelected,
-    globalMode: ownProps.globalMode
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    checkDbPartitioned: (databaseName) => {
-      dispatch(checkDbPartitioned(databaseName));
-    }
-  };
-};
-
-const PartitionKeySelectorContainer = connect (
-  mapStateToProps,
-  mapDispatchToProps
-)(PartitionKeySelector);
-
-export default PartitionKeySelectorContainer;
-
-PartitionKeySelectorContainer.propTypes = {
-  databaseName: PropTypes.string.isRequired,
-  partitionKey: PropTypes.string.isRequired,
-  onPartitionKeySelected: PropTypes.func.isRequired,
-  onGlobalModeSelected: PropTypes.func.isRequired,
-  globalMode: PropTypes.bool
-};
diff --git a/app/addons/documents/partition-key/reducers.js b/app/addons/documents/partition-key/reducers.js
deleted file mode 100644
index 8da4ad3..0000000
--- a/app/addons/documents/partition-key/reducers.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  selectorVisible: false
-};
-
-export default function partitionKey(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.PARTITON_KEY_SHOW_SELECTOR:
-      return {
-        ...state,
-        selectorVisible: true
-      };
-
-    case ActionTypes.PARTITON_KEY_HIDE_SELECTOR:
-      return {
-        ...state,
-        selectorVisible: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/resources.js b/app/addons/documents/resources.js
deleted file mode 100644
index a920b8e..0000000
--- a/app/addons/documents/resources.js
+++ /dev/null
@@ -1,197 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import Helpers from '../../helpers';
-import FauxtonAPI from "../../core/api";
-import { post } from "../../core/ajax";
-import Documents from "./shared-resources";
-
-Documents.QueryParams = (function () {
-  var _eachParams = function (params, action) {
-    // clone to avoid in-place modification
-    var result = _.clone(params);
-
-    _.each(['startkey', 'endkey', 'key'], function (key) {
-      if (_.has(result, key)) {
-        result[key] = action(result[key]);
-      }
-    });
-
-    return result;
-  };
-
-  return {
-    parse: function (params) {
-      return _eachParams(params, JSON.parse);
-    },
-
-    stringify: function (params) {
-      return _eachParams(params, JSON.stringify);
-    }
-  };
-})();
-
-
-Documents.DdocInfo = FauxtonAPI.Model.extend({
-  idAttribute: "_id",
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-  initialize: function (_attrs, options) {
-    this.database = options.database;
-  },
-
-  url: function (context) {
-    if (!context) {
-      context = 'server';
-    }
-
-    return FauxtonAPI.urls('designDocs', context, this.database.safeID(), this.safeID());
-  },
-
-  // Need this to work around backbone router thinking _design/foo
-  // is a separate route. Alternatively, maybe these should be
-  // treated separately. For instance, we could default into the
-  // json editor for docs, or into a ddoc specific page.
-  safeID: function () {
-    var ddoc = this.id.replace(/^_design\//, "");
-    return "_design/" + app.utils.safeURLName(ddoc);
-  }
-});
-
-Documents.NewDoc = Documents.Doc.extend({
-  fetch: function () {
-    const prefix = this.partitionKey ? (this.partitionKey + ':') : '';
-    return Helpers.getUUID().then((res) => {
-      if (res.uuids) {
-        this.set("_id", prefix + res.uuids[0]);
-      } else {
-        this.set("_id", prefix + 'enter_document_id');
-      }
-      return res;
-    }).catch(() => {
-      // Don't throw error so the user is still able
-      // to edit the new doc
-      this.set("_id", prefix + 'enter_document_id');
-    });
-  }
-});
-
-Documents.BulkDeleteDoc = FauxtonAPI.Model.extend({
-  idAttribute: "_id"
-});
-
-Documents.BulkDeleteDocCollection = FauxtonAPI.Collection.extend({
-
-  model: Documents.BulkDeleteDoc,
-
-  sync: function () {
-
-  },
-
-  initialize: function (models, options) {
-    this.databaseId = options.databaseId;
-  },
-
-  url: function () {
-    return FauxtonAPI.urls('bulk_docs', 'server', this.databaseId, '');
-  },
-
-  bulkDelete: function () {
-    const payload = this.createPayload(this.toJSON());
-    return new FauxtonAPI.Promise((resolve, reject) => {
-      post(this.url(), payload).then(res => {
-        if (res.error) {
-          throw new Error(res.reason || res.error);
-        }
-        this.handleResponse(res, resolve, reject);
-      }).catch(() => {
-        const ids = _.reduce(this.toArray(), (acc, doc) => {
-          acc.push(doc.id);
-          return acc;
-        }, []);
-        this.trigger('error', ids);
-        reject(ids);
-      });
-    });
-  },
-
-  handleResponse: function (res, resolve, reject) {
-    var ids = _.reduce(res, function (ids, doc) {
-      if (doc.error) {
-        ids.errorIds.push(doc.id);
-      }
-
-      if (!doc.error) {
-        ids.successIds.push(doc.id);
-      }
-
-      return ids;
-    }, { errorIds: [], successIds: [] });
-
-    this.removeDocuments(ids.successIds);
-
-    if (ids.errorIds.length) {
-      this.trigger('error', ids.errorIds);
-    }
-
-    // This is kind of tricky. If there are no documents deleted then rejects
-    // otherwise resolve with list of successful and failed documents
-    if (!_.isEmpty(ids.successIds)) {
-      resolve(ids);
-    } else {
-      reject(ids.errorIds);
-    }
-
-    this.trigger('updated');
-  },
-
-  removeDocuments: function (ids) {
-    _.each(ids, (id) => {
-      this.remove(this.get(id));
-    });
-
-    this.trigger('removed', ids);
-  },
-
-  createPayload: function (documents) {
-    var documentList = documents;
-
-    return {
-      docs: documentList
-    };
-  }
-});
-
-Documents.MangoBulkDeleteDocCollection = Documents.BulkDeleteDocCollection.extend({
-  url: function () {
-    return Helpers.getServerUrl(`/${this.databaseId}/_index/_bulk_delete`);
-  },
-
-  createPayload: function (documents) {
-    var documentList = documents
-      .filter(function (doc) {
-        return doc._id !== '_all_docs';
-      })
-      .map(function (doc) {
-        return doc._id;
-      });
-
-    return {
-      docids: documentList
-    };
-  }
-
-});
-
-export default Documents;
diff --git a/app/addons/documents/rev-browser/actions.js b/app/addons/documents/rev-browser/actions.js
deleted file mode 100644
index e1cf443..0000000
--- a/app/addons/documents/rev-browser/actions.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../core/api";
-import {post} from "../../../core/ajax";
-import ActionTypes from "./actiontypes";
-import getTree from "visualize-rev-tree/lib/getTree";
-import PouchDB from "pouchdb-core";
-import PouchHttpAdapter from 'pouchdb-adapter-http';
-PouchDB.plugin(PouchHttpAdapter);
-
-let db;
-
-export const initDiffEditor = (dbName, docId) => dispatch => {
-  // We have to use API url here because PouchDB doesn't take relative urls.
-  const url = FauxtonAPI.urls('databaseBaseURL', 'apiurl', dbName);
-  db = PouchDB(url);
-
-  Promise.all([db.get(docId), getTree(db, docId)])
-    .then(([doc, tree]) => {
-      const conflictingRevs = getConflictingRevs(tree.paths, tree.winner, Object.keys(tree.deleted));
-      const initialRev = conflictingRevs[0];
-
-      if (!initialRev) {
-        return dispatch(treeLoaded(tree, doc, conflictingRevs, null, dbName));
-      }
-
-      db.get(doc._id, {rev: initialRev})
-        .then((conflictDoc) => {
-          dispatch(treeLoaded(tree, doc, conflictingRevs, conflictDoc, dbName));
-        });
-    });
-};
-
-function getConflictingRevs (paths, winner, deleted) {
-
-  return paths.reduce((acc, el) => {
-    if (el[0] !== winner) {
-      acc.push(el[0]);
-    }
-
-    return acc;
-  }, [])
-    .filter((el) => {
-      return deleted.indexOf(el) === -1;
-    });
-}
-
-const treeLoaded = (tree, doc, conflictingRevs, conflictDoc, databaseName) => {
-  return {
-    type: ActionTypes.REV_BROWSER_REV_TREE_LOADED,
-    options: {
-      tree,
-      doc,
-      conflictDoc,
-      conflictingRevs,
-      databaseName
-    }
-  };
-};
-
-export const toggleDiffView = (enableDiff) => {
-  return {
-    type: ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-    options: {
-      enableDiff: enableDiff
-    }
-  };
-};
-
-export const chooseLeaves = (doc, revTheirs) => dispatch => {
-  db.get(doc._id, {rev: revTheirs})
-    .then((res) => {
-      dispatch(docsToDiff(doc, res));
-    });
-};
-
-const docsToDiff = (doc, theirs) => {
-  return {
-    type: ActionTypes.REV_BROWSER_DIFF_DOCS_READY,
-    options: {
-      theirs: theirs,
-      ours: doc
-    }
-  };
-};
-
-export const toggleConfirmModal = (show, docToWin) => {
-  return {
-    type: ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL,
-    options: {
-      show: show,
-      docToWin: docToWin
-    }
-  };
-};
-
-export const selectRevAsWinner = (databaseName, docId, paths, revToWin) => dispatch => {
-  const revsToDelete = getConflictingRevs(paths, revToWin, []);
-  const payload = buildBulkDeletePayload(docId, revsToDelete);
-
-  post(FauxtonAPI.urls('bulk_docs', 'server', databaseName, ''), payload)
-    .then((resp) => {
-      if (resp.error) {
-        return FauxtonAPI.addNotification({
-          msg: 'Failed to delete clean up conflicts!',
-          type: 'error',
-          clear: true
-        });
-      }
-
-      FauxtonAPI.addNotification({
-        msg: 'Conflicts successfully solved.',
-        clear: true
-      });
-      dispatch(toggleConfirmModal(false, null));
-      FauxtonAPI.navigate(FauxtonAPI.urls('allDocs', 'app', databaseName, ''));
-    });
-};
-
-function buildBulkDeletePayload (docId, revs) {
-  const list = revs.map((rev) => {
-    return {
-      "_id": docId,
-      "_rev": rev,
-      "_deleted": true
-    };
-  });
-
-  return { "docs": list };
-}
diff --git a/app/addons/documents/rev-browser/actiontypes.js b/app/addons/documents/rev-browser/actiontypes.js
deleted file mode 100644
index 0604d4f..0000000
--- a/app/addons/documents/rev-browser/actiontypes.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-export const REV_BROWSER_REV_TREE_LOADED = 'REV_TREE_LOADED';
-export const REV_BROWSER_DIFF_DOCS_READY = 'REV_BROWSER_DIFF_DOCS_READY';
-export const REV_BROWSER_DIFF_ENABLE_DIFF_VIEW = 'REV_BROWSER_DIFF_ENABLE_DIFF_VIEW';
-export const REV_BROWSER_SHOW_CONFIRM_MODAL = 'REV_BROWSER_SHOW_CONFIRM_MODAL';
-
-export default {
-  REV_BROWSER_REV_TREE_LOADED,
-  REV_BROWSER_DIFF_DOCS_READY,
-  REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-  REV_BROWSER_SHOW_CONFIRM_MODAL
-};
diff --git a/app/addons/documents/rev-browser/components/confirmmodal.js b/app/addons/documents/rev-browser/components/confirmmodal.js
deleted file mode 100644
index 16e6796..0000000
--- a/app/addons/documents/rev-browser/components/confirmmodal.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from "react";
-import ReactDOM from "react-dom";
-import ReactComponents from "../../../components/react-components";
-import { Modal } from "react-bootstrap";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class ConfirmModal extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {
-      checked: false
-    };
-
-    this.close = this.close.bind(this);
-    this.onDeleteConflicts = this.onDeleteConflicts.bind(this);
-  }
-
-  close () {
-    this.props.toggleConfirmModal(false, null);
-  }
-
-  onDeleteConflicts () {
-    const hideModal = this.state.checked;
-    this.props.onConfirm(this.props.docToWin, hideModal);
-  }
-
-  render () {
-    return (
-      <Modal dialogClassName="delete-conflicts-modal" show={this.props.show} onHide={this.close}>
-        <Modal.Header closeButton={false}>
-          <Modal.Title>Solve Conflicts</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <p>
-            <i className="icon-warning-sign"></i> Do you want to delete all conflicting revisions for this document?
-          </p>
-
-
-        </Modal.Body>
-        <Modal.Footer>
-          <div style={{float: 'left', marginTop: '10px'}}>
-            <label>
-              <input
-                style={{margin: '0 5px 3px 0'}}
-                onChange={() => { this.setState({checked: !this.state.checked }); }}
-                type="checkbox" />
-                Do not show this warning message again
-            </label>
-          </div>
-          <a
-            style={{marginRight: '10px', cursor: 'pointer'}}
-            onClick={this.close}
-            data-bypass="true"
-          >
-            Cancel
-          </a>
-
-          <ConfirmButton
-            onClick={this.onDeleteConflicts}
-            text="Delete Revisions"
-            buttonType="btn-danger" />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-ConfirmModal.propTypes = {
-  onConfirm: PropTypes.func.isRequired,
-  toggleConfirmModal: PropTypes.func.isRequired
-};
diff --git a/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js b/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js
deleted file mode 100644
index 78c6a6d..0000000
--- a/app/addons/documents/rev-browser/components/conflictingrevisiondropdown.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import ReactSelect from "react-select";
-
-const BackForwardControls = ({onClick, forward}) => {
-  const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open';
-  const style = {height: '20px', width: '11px', marginTop: '7px'};
-
-  return <div style={style} className={icon} onClick={onClick}></div>;
-};
-
-BackForwardControls.propTypes = {
-  onClick: PropTypes.func.isRequired,
-};
-
-const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => {
-  return (
-    <div className="conflicting-revs-dropdown">
-      <BackForwardControls backward onClick={onBackwardClick} />
-      <div style={{width: '345px', margin: '0 5px'}}>
-        <ReactSelect
-          name="form-field-name"
-          value={selected}
-          options={options}
-          clearable={false}
-          onChange={onRevisionClick} />
-      </div>
-      <BackForwardControls forward onClick={onForwardClick} />
-    </div>
-  );
-};
-ConflictingRevisionsDropDown.propTypes = {
-  options: PropTypes.array.isRequired,
-  selected: PropTypes.string.isRequired,
-  onRevisionClick: PropTypes.func.isRequired,
-  onBackwardClick: PropTypes.func.isRequired,
-  onForwardClick: PropTypes.func.isRequired,
-};
-
-export default ConflictingRevisionsDropDown;
diff --git a/app/addons/documents/rev-browser/components/controller.js b/app/addons/documents/rev-browser/components/controller.js
deleted file mode 100644
index 11b5472..0000000
--- a/app/addons/documents/rev-browser/components/controller.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import RevisionBrowserControls from './revisionbrowsercontrols';
-import SplitScreenArea from './splitscreenarea';
-import RevisionDiffArea from './revisiondiffarea';
-import { ButtonGroup, Button } from "react-bootstrap";
-import {LoadLines} from '../../../components/components/loadlines';
-
-
-export default class DiffyController extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.toggleDiffViewFalse = this.toggleDiffView.bind(this, false);
-    this.toggleDiffViewTrue = this.toggleDiffView.bind(this, true);
-  }
-
-  componentDidMount () {
-    this.props.toggleConfirmModal(false, null);
-    this.props.initDiffEditor();
-  }
-
-  toggleDiffView (enableDiff) {
-    this.props.toggleDiffView(enableDiff);
-  }
-
-  render () {
-    const {tree, ours, theirs, conflictingRevs, isDiffViewEnabled} = this.props;
-
-    if (!tree.length && !theirs) {
-      return <LoadLines />;
-    }
-
-    // no conflicts happened for this doc
-    if (!theirs || !conflictingRevs.length) {
-      return <div style={{textAlign: 'center', color: '#fff'}}><h2>No conflicts</h2></div>;
-    }
-
-    return (
-      <div className="revision-wrapper scrollable">
-        <RevisionBrowserControls {...this.props} />
-        <div className="revision-view-controls">
-          <ButtonGroup className="two-sides-toggle-button">
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? 'active' : ''}
-              onClick={this.toggleDiffViewTrue}
-            >
-              <i className="icon-columns" /> Diff
-            </Button>
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? '' : 'active'}
-              onClick={this.toggleDiffViewFalse}
-            >
-              <i className="icon-file-text" /> Document
-            </Button>
-          </ButtonGroup>
-        </div>
-
-        {isDiffViewEnabled ?
-          <RevisionDiffArea ours={ours} theirs={theirs} /> :
-          <SplitScreenArea ours={ours} theirs={theirs} /> }
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js b/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js
deleted file mode 100644
index 7cc7dec..0000000
--- a/app/addons/documents/rev-browser/components/revisionbrowsercontrols.js
+++ /dev/null
@@ -1,146 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import app from '../../../../app';
-import ReactComponents from "../../../components/react-components";
-import ConflictingRevisionsDropDown from './conflictingrevisiondropdown';
-import ConfirmModal from './confirmmodal';
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal';
-
-export default class RevisionBrowserControls extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {showModal: false};
-    this.selectAsWinner = this.selectAsWinner.bind(this);
-    this.onSelectAsWinnerClickOurs = this.onSelectAsWinnerClick.bind(this, this.props.ours);
-    this.onSelectAsWinnerClickTheirs = this.onSelectAsWinnerClick.bind(this, this.props.theirs);
-    this.onRevisionClick = this.onRevisionClick.bind(this);
-    this.onForwardClick = this.onForwardClick.bind(this);
-    this.onBackwardClick = this.onBackwardClick.bind(this);
-  }
-
-  onRevisionClick (revTheirs) {
-    this.props.chooseLeaves(this.props.ours, revTheirs.value);
-  }
-
-  onForwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index + 1];
-
-    if (!next) {
-      return;
-    }
-
-    this.props.chooseLeaves(this.props.ours, next);
-  }
-
-  onBackwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index - 1];
-
-    if (!next) {
-      return;
-    }
-
-    this.props.chooseLeaves(this.props.ours, next);
-  }
-
-  selectAsWinner (docToWin, doNotShowModalAgain) {
-    if (doNotShowModalAgain) {
-      app.utils.localStorageSet(storageKeyDeleteConflictsModal, true);
-    }
-
-    this.props.selectRevAsWinner(docToWin._id, docToWin._rev, this.props.tree);
-  }
-
-  onSelectAsWinnerClick (docToWin) {
-    if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) {
-      this.props.toggleConfirmModal(true, docToWin);
-      return;
-    }
-
-    this.selectAsWinner(docToWin);
-  }
-
-  render () {
-    const {tree} = this.props;
-    const cellStyle = {paddingRight: '30px'};
-
-    return (
-      <div className="revision-browser-controls">
-        <ConfirmModal
-          toggleConfirmModal={this.props.toggleConfirmModal}
-          onConfirm={this.selectAsWinner}
-          docToWin={this.props.docToWin}
-          show={this.props.showConfirmModal}
-        />
-        <table style={{margin: '10px 60px', width: '100%'}}>
-          <tbody>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Server-Selected Rev: </td>
-              <td style={cellStyle}>
-                <div style={{lineHeight: '36px', height: '36px', width: '337px', color: '#000', backgroundColor: '#ffbbbb'}}>
-                  <b style={{paddingLeft: '10px'}}>{tree.winner}</b>
-                </div>
-              </td>
-              <td>
-                <ConfirmButton
-                  onClick={this.onSelectAsWinnerClickOurs}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Delete Other Conflicts"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Conflicting Revisions: </td>
-              <td style={cellStyle}>
-                <ConflictingRevisionsDropDown
-                  onRevisionClick={this.onRevisionClick}
-                  onForwardClick={this.onForwardClick}
-                  onBackwardClick={this.onBackwardClick}
-                  options={this.props.dropdownData}
-                  selected={this.props.theirs._rev} />
-              </td>
-              <td>
-                <ConfirmButton
-                  data-id="button-select-theirs"
-                  onClick={this.onSelectAsWinnerClickTheirs}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Select as Winner"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-
-    );
-  }
-}
-RevisionBrowserControls.propTypes = {
-  tree: PropTypes.object.isRequired,
-  ours: PropTypes.object.isRequired,
-  conflictingRevs: PropTypes.array.isRequired,
-};
diff --git a/app/addons/documents/rev-browser/components/revisiondiffarea.js b/app/addons/documents/rev-browser/components/revisiondiffarea.js
deleted file mode 100644
index d96c855..0000000
--- a/app/addons/documents/rev-browser/components/revisiondiffarea.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import PropTypes from 'prop-types';
-import * as jdp from "jsondiffpatch";
-import "jsondiffpatch/dist/formatters-styles/html.css";
-
-const RevisionDiffArea = ({ours, theirs}) => {
-  if (!ours || !theirs) {
-    return <div></div>;
-  }
-
-  const delta = jdp.diff(ours, theirs);
-  const html = jdp.formatters.html.format(delta, ours);
-
-  return (
-    <div className="revision-diff-area">
-      <div
-        style={{marginTop: '30px'}}
-        dangerouslySetInnerHTML={{__html: html}}
-      >
-      </div>
-    </div>
-  );
-};
-RevisionDiffArea.propTypes = {
-  ours: PropTypes.object,
-  theirs: PropTypes.object,
-  currentRev: PropTypes.string
-};
-
-export default RevisionDiffArea;
diff --git a/app/addons/documents/rev-browser/components/splitscreenarea.js b/app/addons/documents/rev-browser/components/splitscreenarea.js
deleted file mode 100644
index b848d66..0000000
--- a/app/addons/documents/rev-browser/components/splitscreenarea.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import ReactDOM from "react-dom";
-import ace from "brace";
-
-require('brace/ext/static_highlight');
-const highlight = ace.acequire('ace/ext/static_highlight');
-
-require('brace/mode/json');
-const JavaScriptMode = ace.acequire('ace/mode/json').Mode;
-
-require('brace/theme/idle_fingers');
-const theme = ace.acequire('ace/theme/idle_fingers');
-
-export default class SplitScreenArea extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidUpdate () {
-    this.hightlightAfterRender();
-  }
-
-  componentDidMount () {
-    this.hightlightAfterRender();
-  }
-
-  hightlightAfterRender () {
-    const format = (input) => { return JSON.stringify(input, null, '  '); };
-
-    const jsmode = new JavaScriptMode();
-    const left = this.revLeftOurs;
-    const right = this.revRightTheirs;
-
-    const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true);
-    left.innerHTML = leftRes.html;
-    const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true);
-    right.innerHTML = rightRes.html;
-  }
-
-  render () {
-    const {ours, theirs} = this.props;
-
-    if (!ours || !theirs) {
-      return <div></div>;
-    }
-
-    return (
-      <div className="revision-split-area">
-        <div data-id="ours" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{ours._rev} (Server-Selected Rev)</div>
-          <pre ref={node => this.revLeftOurs = node}></pre>
-        </div>
-
-        <div data-id="theirs" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{theirs._rev}</div>
-          <pre ref={node => this.revRightTheirs = node}></pre>
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/documents/rev-browser/container.js b/app/addons/documents/rev-browser/container.js
deleted file mode 100644
index d0ea5c6..0000000
--- a/app/addons/documents/rev-browser/container.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import RevisionBrowserController from './components/controller';
-
-import {
-  getTree,
-  getDoc,
-  getConflictDoc,
-  getConflictingRev,
-  getDatabaseName,
-  getOurs,
-  getTheirs,
-  getShowConfirmModal,
-  getDropdownData,
-  getIsDiffViewEnabled,
-  getDocToWin
-} from './reducers';
-
-import {
-  toggleConfirmModal,
-  initDiffEditor,
-  chooseLeaves,
-  selectRevAsWinner,
-  toggleDiffView
-} from './actions';
-
-const mapStateToProps = ({revisionBrowser}, ownProps) => {
-  return {
-    docId: ownProps.docId,
-    tree: getTree(revisionBrowser),
-    doc: getDoc(revisionBrowser),
-    conflictDoc: getConflictDoc(revisionBrowser),
-    conflictingRevs: getConflictingRev(revisionBrowser),
-    databaseName: getDatabaseName(revisionBrowser),
-    ours: getOurs(revisionBrowser),
-    theirs: getTheirs(revisionBrowser),
-    showConfirmModal: getShowConfirmModal(revisionBrowser),
-    dropdownData: getDropdownData(revisionBrowser),
-    isDiffViewEnabled: getIsDiffViewEnabled(revisionBrowser),
-    docToWin: getDocToWin(revisionBrowser)
-  };
-};
-
-const mapDispatchToProps = (dispatch, ownProps) => {
-  return {
-    toggleConfirmModal (show, docToWin) {
-      dispatch(toggleConfirmModal(show, docToWin));
-    },
-
-    initDiffEditor () {
-      dispatch(initDiffEditor(ownProps.databaseName, ownProps.docId));
-    },
-
-    chooseLeaves (doc, revTheirs) {
-      dispatch(chooseLeaves(doc, revTheirs));
-    },
-
-    selectRevAsWinner (id, rev, tree) {
-      dispatch(selectRevAsWinner(ownProps.databaseName, id, tree.paths, rev));
-    },
-
-    toggleDiffView (enableDiff) {
-      dispatch(toggleDiffView(enableDiff));
-    }
-  };
-};
-
-const RevisionBrowserContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(RevisionBrowserController);
-
-export default RevisionBrowserContainer;
diff --git a/app/addons/documents/rev-browser/reducers.js b/app/addons/documents/rev-browser/reducers.js
deleted file mode 100644
index 4ce2ed9..0000000
--- a/app/addons/documents/rev-browser/reducers.js
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed 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.
-
-import {
-  REV_BROWSER_REV_TREE_LOADED,
-  REV_BROWSER_DIFF_DOCS_READY,
-  REV_BROWSER_DIFF_ENABLE_DIFF_VIEW,
-  REV_BROWSER_SHOW_CONFIRM_MODAL
-} from './actiontypes';
-
-const initialState = {
-  tree: [],
-  doc: {},
-  conflictDoc: false,
-  conflictingRevs: [],
-  databaseName: '',
-  ours: null,
-  theirs: null,
-  isDiffViewEnabled: true,
-  showConfirmModal: false,
-  docToWin: null
-};
-
-const revisionConflicts = (state = initialState, {type, options}) => {
-
-  switch (type) {
-    case REV_BROWSER_REV_TREE_LOADED:
-      const {
-        tree,
-        doc,
-        conflictDoc,
-        conflictingRevs,
-        databaseName,
-      } = options;
-      return {
-        ...state,
-        tree,
-        doc,
-        conflictDoc,
-        conflictingRevs,
-        databaseName,
-        theirs: conflictDoc,
-        ours: doc
-      };
-
-    case REV_BROWSER_DIFF_DOCS_READY:
-      return {
-        ...state,
-        theirs: options.theirs
-      };
-
-    case REV_BROWSER_DIFF_ENABLE_DIFF_VIEW:
-      return {
-        ...state,
-        isDiffViewEnabled: options.enableDiff
-      };
-
-    case REV_BROWSER_SHOW_CONFIRM_MODAL:
-      return {
-        ...state,
-        showConfirmModal: options.show,
-        docToWin: options.docToWin
-      };
-
-    default:
-      return state;
-  }
-
-};
-
-export default revisionConflicts;
-
-export const getTree = state => state.tree;
-export const getDoc = state => state.doc;
-export const getConflictDoc = state => state.conflictDoc;
-export const getConflictingRev = state => state.conflictingRevs;
-export const getDatabaseName = state => state.databaseName;
-export const getOurs = state => state.ours;
-export const getTheirs = state => state.theirs;
-export const getShowConfirmModal = state => state.showConfirmModal;
-export const getDropdownData = state => state.conflictingRevs.map(rev => { return {value: rev, label: rev}; });
-export const getIsDiffViewEnabled = state => state.isDiffViewEnabled;
-export const getDocToWin = state => state.docToWin;
diff --git a/app/addons/documents/rev-browser/rev-browser.components.js b/app/addons/documents/rev-browser/rev-browser.components.js
deleted file mode 100644
index 4ae29e0..0000000
--- a/app/addons/documents/rev-browser/rev-browser.components.js
+++ /dev/null
@@ -1,429 +0,0 @@
-import app from "../../../app";
-
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import RevActions from "./rev-browser.actions";
-import RevStores from "./rev-browser.stores";
-import ReactComponents from "../../components/react-components";
-import { ButtonGroup, Button, Modal } from "react-bootstrap";
-import ReactSelect from "react-select";
-import jdp from "jsondiffpatch";
-import jdpformatters from "jsondiffpatch/src/formatters/html";
-import ace from "brace";
-import "jsondiffpatch/public/formatters-styles/html.css";
-
-const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal';
-
-const store = RevStores.revBrowserStore;
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-require('brace/ext/static_highlight');
-const highlight = ace.acequire('ace/ext/static_highlight');
-
-require('brace/mode/json');
-const JavaScriptMode = ace.acequire('ace/mode/json').Mode;
-
-require('brace/theme/idle_fingers');
-const theme = ace.acequire('ace/theme/idle_fingers');
-
-
-class DiffyController extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = this.getStoreState();
-  }
-
-  getStoreState () {
-
-    return {
-      tree: store.getRevTree(),
-      ours: store.getOurs(),
-      theirs: store.getTheirs(),
-      conflictingRevs: store.getConflictingRevs(),
-      dropdownData: store.getDropdownData(),
-      isDiffViewEnabled: store.getIsDiffViewEnabled(),
-      databaseName: store.getDatabaseName()
-    };
-  }
-
-  componentDidMount () {
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount () {
-    store.off('change', this.onChange);
-  }
-
-  onChange () {
-    this.setState(this.getStoreState());
-  }
-
-  toggleDiffView (enableDiff) {
-    RevActions.toggleDiffView(enableDiff);
-  }
-
-  render () {
-    const {tree, ours, theirs, conflictingRevs, isDiffViewEnabled} = this.state;
-
-    if (!tree) {
-      return null;
-    }
-
-    // no conflicts happened for this doc
-    if (!theirs || !conflictingRevs.length) {
-      return <div style={{textAlign: 'center', color: '#fff'}}><h2>No conflicts</h2></div>;
-    }
-
-    return (
-      <div className="revision-wrapper scrollable">
-        <RevisionBrowserControls {...this.state} />
-        <div className="revision-view-controls">
-          <ButtonGroup className="two-sides-toggle-button">
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? 'active' : ''}
-              onClick={this.toggleDiffView.bind(this, true)}
-            >
-              <i className="icon-columns" /> Diff
-            </Button>
-            <Button
-              style={{width: '120px'}}
-              className={isDiffViewEnabled ? '' : 'active'}
-              onClick={this.toggleDiffView.bind(this, false)}
-            >
-              <i className="icon-file-text" /> Document
-            </Button>
-          </ButtonGroup>
-        </div>
-
-        {isDiffViewEnabled ?
-          <RevisionDiffArea ours={ours} theirs={theirs} /> :
-          <SplitScreenArea ours={ours} theirs={theirs} /> }
-      </div>
-    );
-  }
-}
-
-
-class SplitScreenArea extends React.Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidUpdate () {
-    this.hightlightAfterRender();
-  }
-
-  componentDidMount () {
-    this.hightlightAfterRender();
-  }
-
-  hightlightAfterRender () {
-    const format = (input) => { return JSON.stringify(input, null, '  '); };
-
-    const jsmode = new JavaScriptMode();
-    const left = this.revLeftOurs;
-    const right = this.revRightTheirs;
-
-    const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true);
-    left.innerHTML = leftRes.html;
-    const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true);
-    right.innerHTML = rightRes.html;
-  }
-
-  render () {
-    const {ours, theirs} = this.props;
-
-    if (!ours || !theirs) {
-      return <div></div>;
-    }
-
-    return (
-      <div className="revision-split-area">
-        <div data-id="ours" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{ours._rev} (Server-Selected Rev)</div>
-          <pre ref={node => this.revLeftOurs = node}></pre>
-        </div>
-
-        <div data-id="theirs" style={{width: '50%'}}>
-          <div style={{marginBottom: '20px'}}>{theirs._rev}</div>
-          <pre ref={node => this.revRightTheirs = node}></pre>
-        </div>
-      </div>
-    );
-  }
-}
-
-const RevisionDiffArea = ({ours, theirs}) => {
-  if (!ours || !theirs) {
-    return <div></div>;
-  }
-
-  const delta = jdp.diff(ours, theirs);
-  const html = jdpformatters.format(delta, ours);
-
-  return (
-    <div className="revision-diff-area">
-      <div
-        style={{marginTop: '30px'}}
-        dangerouslySetInnerHTML={{__html: html}}
-      ></div>
-    </div>
-  );
-};
-RevisionDiffArea.propTypes = {
-  ours: PropTypes.object,
-  theirs: PropTypes.object,
-  currentRev: PropTypes.string
-};
-
-
-const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => {
-  return (
-    <div className="conflicting-revs-dropdown">
-      <BackForwardControls backward onClick={onBackwardClick} />
-      <div style={{width: '345px', margin: '0 5px'}}>
-        <ReactSelect
-          name="form-field-name"
-          value={selected}
-          options={options}
-          clearable={false}
-          onChange={onRevisionClick} />
-      </div>
-      <BackForwardControls forward onClick={onForwardClick} />
-    </div>
-  );
-};
-ConflictingRevisionsDropDown.propTypes = {
-  options: PropTypes.array.isRequired,
-  selected: PropTypes.string.isRequired,
-  onRevisionClick: PropTypes.func.isRequired,
-  onBackwardClick: PropTypes.func.isRequired,
-  onForwardClick: PropTypes.func.isRequired,
-};
-
-class RevisionBrowserControls extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = {showModal: false};
-  }
-
-  onRevisionClick (revTheirs) {
-
-    RevActions.chooseLeaves(this.props.ours, revTheirs.value);
-  }
-
-  onForwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index + 1];
-
-    if (!next) {
-      return;
-    }
-
-    RevActions.chooseLeaves(this.props.ours, next);
-  }
-
-  onBackwardClick () {
-    const conflictingRevs = this.props.conflictingRevs;
-    const index = conflictingRevs.indexOf(this.props.theirs._rev);
-
-    const next = conflictingRevs[index - 1];
-
-    if (!next) {
-      return;
-    }
-
-    RevActions.chooseLeaves(this.props.ours, next);
-  }
-
-  selectAsWinner (docToWin, doNotShowModalAgain) {
-    if (doNotShowModalAgain) {
-      app.utils.localStorageSet(storageKeyDeleteConflictsModal, true);
-    }
-
-    RevActions.selectRevAsWinner(this.props.databaseName, docToWin._id, this.props.tree.paths, docToWin._rev);
-  }
-
-  onSelectAsWinnerClick (docToWin) {
-    if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) {
-      RevActions.showConfirmModal(true, docToWin);
-      return;
-    }
-
-    this.selectAsWinner(docToWin);
-  }
-
-  render () {
-    const {tree} = this.props;
-    const cellStyle = {paddingRight: '30px'};
-
-    return (
-      <div className="revision-browser-controls">
-        <ConfirmModal onConfirm={this.selectAsWinner.bind(this)} />
-        <table style={{margin: '10px 60px', width: '100%'}}>
-          <tbody>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Server-Selected Rev: </td>
-              <td style={cellStyle}>
-                <div style={{lineHeight: '36px', height: '36px', width: '337px', color: '#000', backgroundColor: '#ffbbbb'}}>
-                  <b style={{paddingLeft: '10px'}}>{tree.winner}</b>
-                </div>
-              </td>
-              <td>
-                <ConfirmButton
-                  onClick={this.onSelectAsWinnerClick.bind(this, this.props.ours)}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Delete Other Conflicts"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-            <tr style={{height: '60px'}}>
-              <td style={cellStyle}>Conflicting Revisions: </td>
-              <td style={cellStyle}>
-                <ConflictingRevisionsDropDown
-                  onRevisionClick={this.onRevisionClick.bind(this)}
-                  onForwardClick={this.onForwardClick.bind(this)}
-                  onBackwardClick={this.onBackwardClick.bind(this)}
-                  options={this.props.dropdownData}
-                  selected={this.props.theirs._rev} />
-              </td>
-              <td>
-                <ConfirmButton
-                  data-id="button-select-theirs"
-                  onClick={this.onSelectAsWinnerClick.bind(this, this.props.theirs)}
-                  style={{marginRight: '10px', width: '220px'}}
-                  text="Select as Winner"
-                  buttonType="btn-secondary"
-                  customIcon="icon-trophy" />
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-
-    );
-  }
-}
-RevisionBrowserControls.propTypes = {
-  tree: PropTypes.object.isRequired,
-  ours: PropTypes.object.isRequired,
-  conflictingRevs: PropTypes.array.isRequired,
-};
-
-class ConfirmModal extends React.Component {
-
-  constructor (props) {
-    super(props);
-
-    this.state = this.getStoreState();
-  }
-
-  getStoreState () {
-    return {
-      show: store.getShowConfirmModal(),
-      docToWin: store.getDocToWin(),
-      checked: false
-    };
-  }
-
-  componentDidMount () {
-    store.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount () {
-    store.off('change', this.onChange);
-  }
-
-  onChange () {
-    this.setState(this.getStoreState());
-  }
-
-  close () {
-    RevActions.showConfirmModal(false, null);
-  }
-
-  onDeleteConflicts () {
-    const hideModal = this.state.checked;
-    this.props.onConfirm(this.state.docToWin, hideModal);
-  }
-
-  render () {
-    return (
-      <Modal dialogClassName="delete-conflicts-modal" show={this.state.show} onHide={this.close}>
-        <Modal.Header closeButton={false}>
-          <Modal.Title>Solve Conflicts</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          <p>
-            <i className="icon-warning-sign"></i> Do you want to delete all conflicting revisions for this document?
-          </p>
-
-
-        </Modal.Body>
-        <Modal.Footer>
-          <div style={{float: 'left', marginTop: '10px'}}>
-            <label>
-              <input
-                style={{margin: '0 5px 3px 0'}}
-                onChange={() => { this.setState({checked: !this.state.checked }); }}
-                type="checkbox" />
-                Do not show this warning message again
-            </label>
-          </div>
-          <a
-            style={{marginRight: '10px', cursor: 'pointer'}}
-            onClick={this.close}
-            data-bypass="true"
-          >
-            Cancel
-          </a>
-
-          <ConfirmButton
-            onClick={this.onDeleteConflicts.bind(this)}
-            text="Delete Revisions"
-            buttonType="btn-danger" />
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-ConfirmModal.propTypes = {
-  onConfirm: PropTypes.func.isRequired,
-};
-
-const BackForwardControls = ({onClick, forward}) => {
-  const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open';
-  const style = {height: '20px', width: '11px', marginTop: '7px'};
-
-  return <div style={style} className={icon} onClick={onClick}></div>;
-};
-BackForwardControls.propTypes = {
-  onClick: PropTypes.func.isRequired,
-};
-
-export default {
-  DiffyController: DiffyController
-};
diff --git a/app/addons/documents/rev-browser/rev-browser.stores.js b/app/addons/documents/rev-browser/rev-browser.stores.js
deleted file mode 100644
index 3b3f696..0000000
--- a/app/addons/documents/rev-browser/rev-browser.stores.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./rev-browser.actiontypes";
-
-const Stores = {};
-
-Stores.RevBrowserStore = FauxtonAPI.Store.extend({
-  initialize: function () {
-    this.reset();
-  },
-
-  reset: function () {
-    this._revTree = null;
-
-    this._ours = null;
-    this._theirs = null;
-
-    this._dropDownData = null;
-    this._isDiffViewEnabled = true;
-
-    this._databaseName = null;
-
-    this._showConfirmModal = false;
-    this._docToWin = null;
-  },
-
-  prepareDropdownData: function (revs) {
-    return revs.map((el) => {
-
-      return { value: el, label: el };
-    });
-  },
-
-  getRevTree: function () {
-    return this._revTree;
-  },
-
-  getDatabaseName: function () {
-    return this._databaseName;
-  },
-
-  getOurs: function () {
-    return this._ours;
-  },
-
-  getTheirs: function () {
-    return this._theirs;
-  },
-
-  getConflictingRevs: function () {
-    return this._conflictingRevs;
-  },
-
-  getDropdownData: function () {
-    return this._dropDownData;
-  },
-
-  getIsDiffViewEnabled: function () {
-    return this._isDiffViewEnabled;
-  },
-
-  getShowConfirmModal: function () {
-    return this._showConfirmModal;
-  },
-
-  getDocToWin: function () {
-    return this._docToWin;
-  },
-
-  dispatch: function (action) {
-    switch (action.type) {
-      case ActionTypes.REV_BROWSER_REV_TREE_LOADED:
-        this._revTree = action.options.tree;
-        this._ours = action.options.doc;
-        this._conflictingRevs = action.options.conflictingRevs;
-        this._theirs = action.options.conflictDoc;
-
-        this._dropDownData = this.prepareDropdownData(this._conflictingRevs);
-
-        this._databaseName = action.options.databaseName;
-        break;
-
-      case ActionTypes.REV_BROWSER_DIFF_DOCS_READY:
-        this._theirs = action.options.theirs;
-        break;
-
-      case ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW:
-        this._isDiffViewEnabled = action.options.enableDiff;
-        break;
-
-      case ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL:
-        this._showConfirmModal = action.options.show;
-        this._docToWin = action.options.docToWin;
-        break;
-
-      default:
-        return;
-      // do nothing
-    }
-
-    this.triggerChange();
-  }
-
-});
-
-Stores.revBrowserStore = new Stores.RevBrowserStore();
-Stores.revBrowserStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.revBrowserStore.dispatch.bind(Stores.revBrowserStore));
-
-export default Stores;
diff --git a/app/addons/documents/routes-doc-editor.js b/app/addons/documents/routes-doc-editor.js
deleted file mode 100644
index f0d8e7e..0000000
--- a/app/addons/documents/routes-doc-editor.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from "../../core/api";
-import Documents from "./resources";
-import Databases from "../databases/base";
-import DatabaseActions from '../databases/actions';
-import Actions from "./doc-editor/actions";
-import DocEditorContainer from "./doc-editor/components/DocEditorContainer";
-import RevBrowserContainer from './rev-browser/container';
-import {DocEditorLayout} from '../components/layouts';
-
-
-const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-
-  roles: ['fx_loggedIn'],
-
-  initialize (route, options) {
-    this.databaseName = options[0];
-    this.docId = options[1];
-    this.database = this.database || new Databases.Model({ id: this.databaseName });
-    this.doc = new Documents.NewDoc(null, { database: this.database });
-  },
-
-  routes: {
-    'database/:database/:doc/conflicts': 'revisionBrowser',
-    'database/:database/:doc/code_editor': 'codeEditor',
-    'database/:database/_design/:ddoc/conflicts': 'revBrowserForDesignDoc',
-    'database/:database/_design/:ddoc': 'showDesignDoc',
-    'database/:database/_local/:doc': 'showLocalDoc',
-    'database/:database/:doc': 'codeEditor',
-    'database/:database/_new': 'codeEditorNewDoc',
-    'database/:database/_new?(:extra)': 'codeEditorNewDoc'
-  },
-
-  revisionBrowser: function (databaseName, docId) {
-    const backLink = FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(this.database.safeID()));
-    const docURL = FauxtonAPI.urls('document', 'app', this.database.safeID(), this.docId);
-
-    const crumbs = [
-      { name: this.database.safeID(), link: backLink },
-      { name: this.docId + ' > Conflicts' }
-    ];
-
-    return <DocEditorLayout
-      crumbs={crumbs}
-      endpoint={this.doc.url('apiurl')}
-      docURL={docURL}
-      component={<RevBrowserContainer docId={docId} databaseName={databaseName} />}
-    />;
-  },
-
-  revBrowserForDesignDoc: function(databaseName, ddoc) {
-    return this.revisionBrowser(databaseName, '_design/' + ddoc);
-  },
-
-  codeEditorNewDoc: function (databaseName, options) {
-    return this.codeEditor(databaseName, null, options);
-  },
-
-  codeEditor: function (databaseName, docId, options) {
-    const urlParams = app.getParams(options);
-    const backLink = FauxtonAPI.urls('allDocs', 'app', FauxtonAPI.url.encode(databaseName));
-
-    const crumbs =  [
-      { name: databaseName, link: backLink },
-      { name: docId ? docId : 'New Document' }
-    ];
-
-    this.database = new Databases.Model({ id: databaseName });
-
-    if (docId) {
-      this.doc = new Documents.Doc({ _id: docId }, { database: this.database, fetchConflicts: true });
-    } else {
-      const partitionKey = urlParams ? urlParams.partitionKey : undefined;
-      this.doc = new Documents.NewDoc(null, { database: this.database, partitionKey });
-    }
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-    Actions.dispatchInitDocEditor({ doc: this.doc, database: this.database });
-
-    let previousUrl = undefined;
-    const previousValidUrls = FauxtonAPI.router.lastPages.filter(url => {
-      // make sure it doesn't redirect back to the code editor when cloning docs
-      return url.includes('/_all_docs') || url.match(/_design\/(\S)*\/_/) || url.includes('/_find');
-    });
-    if (previousValidUrls.length > 0) {
-      previousUrl = previousValidUrls[previousValidUrls.length - 1];
-    }
-
-    return <DocEditorLayout
-      crumbs={crumbs}
-      endpoint={this.doc.url('apiurl')}
-      docURL={this.doc.documentation()}
-      partitionKey={urlParams.partitionKey}
-      component={<DocEditorContainer
-        database={this.database}
-        isNewDoc={docId ? false : true}
-        previousUrl={previousUrl}
-      />}
-    />;
-  },
-
-  showLocalDoc: function(databaseName, docId) {
-    return this.codeEditor(databaseName, '_local/' + docId);
-  },
-
-  showDesignDoc: function (database, ddoc) {
-    return this.codeEditor(database, '_design/' + ddoc);
-  }
-});
-
-
-export default {
-  DocEditorRouteObject: DocEditorRouteObject
-};
diff --git a/app/addons/documents/routes-documents.js b/app/addons/documents/routes-documents.js
deleted file mode 100644
index 3e9f914..0000000
--- a/app/addons/documents/routes-documents.js
+++ /dev/null
@@ -1,171 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import BaseRoute from './shared-routes';
-import DatabaseActions from '../databases/actions';
-import Databases from '../databases/base';
-import Resources from './resources';
-import {SidebarItemSelection} from './sidebar/helpers';
-import ComponentsActions from '../components/actions';
-import {DocsTabsSidebarLayout, ViewsTabsSidebarLayout, ChangesSidebarLayout} from './layouts';
-
-var DocumentsRouteObject = BaseRoute.extend({
-  routes: {
-    "database/:database/_partition/:partitionkey/_all_docs": {
-      route: "partitionedAllDocs",
-      roles: ["fx_loggedIn"]
-    },
-    "database/:database/_all_docs(:extra)": {
-      route: "globalAllDocs",
-      roles: ["fx_loggedIn"]
-    },
-    "database/:database/_partition/:partitionkey/_design/:ddoc/_info": {
-      route: "designDocMetadata",
-      roles: ['fx_loggedIn']
-    },
-    "database/:database/_design/:ddoc/_info": {
-      route: "designDocMetadataNoPartition",
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionKey/_changes': {
-      route: 'changes',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_changes': {
-      route: 'changes',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize (route, options) {
-    this.initViews(options[0]);
-  },
-
-  initViews: function (dbName) {
-    this.databaseName = dbName;
-    this.database = new Databases.Model({id: this.databaseName});
-
-    this.createDesignDocsCollection();
-
-    this.addSidebar();
-  },
-
-  designDocMetadataNoPartition: function (database, ddoc) {
-    return this.designDocMetadata(database, '', ddoc);
-  },
-
-  designDocMetadata: function (database, partitionKey, ddoc) {
-    const designDocInfo = new Resources.DdocInfo({ _id: "_design/" + ddoc }, { database: this.database });
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddoc,
-      designDocSection: 'metadata'
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <ViewsTabsSidebarLayout
-      showEditView={false}
-      docURL={designDocInfo.documentation()}
-      endpoint={designDocInfo.url('apiurl')}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      designDocInfo={designDocInfo}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  globalAllDocs: function (databaseName, options) {
-    return this.allDocs(databaseName, '', options);
-  },
-
-  partitionedAllDocs: function (databaseName, partitionKey) {
-    return this.allDocs(databaseName, partitionKey);
-  },
-
-  /*
-  * docParams are the options fauxton uses to fetch from the server
-  * urlParams are what are shown in the url and to the user
-  * They are not the same when paginating
-  */
-  allDocs: function (databaseName, partitionKey, options) {
-    const params = this.createParams(options);
-    const docParams = params.docParams;
-
-    const url = partitionKey ?
-      FauxtonAPI.urls('partitioned_allDocs', 'server', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
-      FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
-
-    // this is used for the header and sidebar
-    this.database.buildAllDocs(docParams);
-
-    const onlyShowDdocs = !!(docParams.startkey && docParams.startkey.indexOf("_design") > -1);
-    let tab = 'all-docs';
-    if (onlyShowDdocs) {
-      tab = 'design-docs';
-    }
-
-    const selectedNavItem = new SidebarItemSelection(tab);
-    ComponentsActions.showDeleteDatabaseModal({showDeleteModal: false, dbId: ''});
-
-    const endpoint = partitionKey ?
-      FauxtonAPI.urls('partitioned_allDocs', 'apiurl', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
-      this.database.allDocs.urlRef("apiurl", {});
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const navigateToPartitionedAllDocs = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_allDocs', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const navigateToGlobalAllDocs = () => {
-      const baseUrl = FauxtonAPI.urls('allDocs', 'app', encodeURIComponent(databaseName));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const dropDownLinks = this.getCrumbs(this.database);
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-    return <DocsTabsSidebarLayout
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      designDocs={this.designDocs}
-      fetchUrl={url}
-      ddocsOnly={onlyShowDdocs}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedAllDocs}
-      onGlobalModeSelected={navigateToGlobalAllDocs}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  changes: function (databaseName, partitionKey) {
-    const selectedNavItem = new SidebarItemSelection('changes');
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    return <ChangesSidebarLayout
-      endpoint={FauxtonAPI.urls('changes', 'apiurl', this.database.id, '')}
-      docURL={this.database.documentation()}
-      dbName={this.database.id}
-      dropDownLinks={this.getCrumbs(this.database)}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  }
-
-});
-
-export default DocumentsRouteObject;
diff --git a/app/addons/documents/routes-index-editor.js b/app/addons/documents/routes-index-editor.js
deleted file mode 100644
index 321bb2f..0000000
--- a/app/addons/documents/routes-index-editor.js
+++ /dev/null
@@ -1,204 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import BaseRoute from "./shared-routes";
-import ActionsIndexEditor from "./index-editor/actions";
-import DatabaseActions from '../databases/actions';
-import Databases from "../databases/base";
-import SidebarActions from './sidebar/actions';
-import {SidebarItemSelection} from './sidebar/helpers';
-import {DocsTabsSidebarLayout, ViewsTabsSidebarLayout} from './layouts';
-
-const IndexEditorAndResults = BaseRoute.extend({
-  routes: {
-    'database/:database/_partition/:partitionkey/new_view': {
-      route: 'createView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/new_view/:designDoc': {
-      route: 'createView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_view': {
-      route: 'createViewNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_view/:designDoc': {
-      route: 'createViewNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_view/:view': {
-      route: 'showPartitionedView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_view/:view': {
-      route: 'showGlobalView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_view/:view/edit': {
-      route: 'editView',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_view/:view/edit': {
-      route: 'editViewNoPartition',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize (route, options) {
-    var databaseName = options[0];
-    this.databaseName = databaseName;
-    this.database = new Databases.Model({id: databaseName});
-    this.createDesignDocsCollection();
-    this.addSidebar();
-  },
-
-  showGlobalView: function (databaseName, ddoc, viewName) {
-    return this.showView(databaseName, '', ddoc, viewName);
-  },
-
-  showPartitionedView: function (databaseName, partitionKey, ddoc, viewName) {
-    return this.showView(databaseName, partitionKey, ddoc, viewName);
-  },
-
-  showView: function (databaseName, partitionKey, ddoc, viewName) {
-    viewName = viewName.replace(/\?.*$/, '');
-
-    ActionsIndexEditor.dispatchClearIndex();
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: viewName,
-      isNewView: false,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: '_design/' + ddoc
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddoc,
-      designDocSection: 'Views',
-      indexName: viewName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls('view', 'server', encodeURIComponent(databaseName), encodedPartKey,
-      encodeURIComponent(ddoc), encodeURIComponent(viewName));
-    const endpoint = FauxtonAPI.urls('view', 'apiurl', encodeURIComponent(databaseName), encodedPartKey,
-      encodeURIComponent(ddoc), encodeURIComponent(viewName));
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_view', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey), encodeURIComponent(ddoc));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(viewName));
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('view', 'app', encodeURIComponent(databaseName), encodeURIComponent(ddoc));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(viewName));
-    };
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <DocsTabsSidebarLayout
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      fetchUrl={url}
-      ddocsOnly={false}
-      deleteEnabled={false}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  createViewNoPartition: function (databaseName, _designDoc) {
-    return this.createView(databaseName, '', _designDoc);
-  },
-
-  createView: function (database, partitionKey, _designDoc) {
-    let isNewDesignDoc = true;
-    let designDoc = 'new-doc';
-
-    if (_designDoc) {
-      designDoc = '_design/' + _designDoc;
-      isNewDesignDoc = false;
-    }
-
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: 'new-view',
-      isNewView: true,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: designDoc,
-      isNewDesignDoc: isNewDesignDoc
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-
-    const selectedNavItem = new SidebarItemSelection('');
-    const dropDownLinks = this.getCrumbs(this.database);
-
-    return <ViewsTabsSidebarLayout
-      showIncludeAllDocs={true}
-      docURL={FauxtonAPI.constants.DOC_URLS.GENERAL}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  editViewNoPartition: function (databaseName, ddocName, viewName) {
-    return this.editView(databaseName, '', ddocName, viewName);
-  },
-
-  editView: function (databaseName, partitionKey, ddocName, viewName) {
-    ActionsIndexEditor.dispatchFetchDesignDocsBeforeEdit({
-      viewName: viewName,
-      isNewView: false,
-      database: this.database,
-      designDocs: this.designDocs,
-      designDocId: '_design/' + ddocName
-    });
-    DatabaseActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Views',
-      indexName: viewName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
-    const endpoint = FauxtonAPI.urls('view', 'apiurl', databaseName, ddocName, viewName);
-    const dropDownLinks = this.getCrumbs(this.database);
-
-    return <ViewsTabsSidebarLayout
-      showIncludeAllDocs={true}
-      docURL={docURL}
-      endpoint={endpoint}
-      dbName={this.database.id}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  }
-
-});
-
-export default IndexEditorAndResults;
diff --git a/app/addons/documents/routes-mango.js b/app/addons/documents/routes-mango.js
deleted file mode 100644
index b4981f0..0000000
--- a/app/addons/documents/routes-mango.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import Databases from '../databases/resources';
-import DatabaseActions from '../databases/actions';
-import Documents from './shared-resources';
-import {MangoLayoutContainer} from './mangolayout';
-
-const MangoIndexEditorAndQueryEditor = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'database/:database/_partition/:partitionkey/_index': {
-      route: 'createIndex',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_index': {
-      route: 'createIndexNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_find': {
-      route: 'findUsingIndex',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_find': {
-      route: 'findUsingIndexNoPartition',
-      roles: ['fx_loggedIn']
-    },
-  },
-
-  initialize: function (route, options) {
-    var databaseName = options[0];
-    this.databaseName = databaseName;
-    this.database = new Databases.Model({id: databaseName});
-  },
-
-  findUsingIndexNoPartition: function (database) {
-    return this.findUsingIndex(database, '');
-  },
-
-  findUsingIndex: function (database, partitionKey) {
-    const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls(
-      'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
-    );
-
-    const partKeyUrlComponent = partitionKey ? `/${encodedPartitionKey}` : '';
-    const fetchUrl = '/' + encodeURIComponent(this.databaseName) + partKeyUrlComponent + '/_find';
-
-    const crumbs = [
-      {name: database, link: url},
-      {name: app.i18n.en_US['mango-title-editor']}
-    ];
-
-    const endpoint = FauxtonAPI.urls('mango', 'query-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
-
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database),
-        encodeURIComponent(partKey));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('mango', 'query-app', encodeURIComponent(database));
-      FauxtonAPI.navigate('#/' + baseUrl);
-    };
-
-    return <MangoLayoutContainer
-      database={database}
-      crumbs={crumbs}
-      docURL={FauxtonAPI.constants.DOC_URLS.MANGO_SEARCH}
-      endpoint={endpoint}
-      edit={false}
-      databaseName={this.databaseName}
-      fetchUrl={fetchUrl}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  createIndexNoPartition: function (database) {
-    return this.createIndex(database, '');
-  },
-
-  createIndex: function (database, partitionKey) {
-    const designDocs = new Documents.AllDocs(null, {
-      database: this.database,
-      paging: {
-        pageSize: 500
-      },
-      params: {
-        startkey: '_design/',
-        endkey: '_design0',
-        include_docs: true,
-        limit: 500
-      }
-    });
-
-    const encodedPartitionKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const url = FauxtonAPI.urls(
-      'allDocs', 'app', encodeURIComponent(this.databaseName), encodedPartitionKey
-    );
-    const endpoint = FauxtonAPI.urls('mango', 'index-apiurl', encodeURIComponent(this.databaseName), encodedPartitionKey);
-
-    const crumbs = [
-      {name: database, link: url},
-      {name: app.i18n.en_US['mango-indexeditor-title']}
-    ];
-
-    DatabaseActions.fetchSelectedDatabaseInfo(database);
-
-    return <MangoLayoutContainer
-      showIncludeAllDocs={false}
-      crumbs={crumbs}
-      docURL={FauxtonAPI.constants.DOC_URLS.MANGO_INDEX}
-      endpoint={endpoint}
-      edit={true}
-      designDocs={designDocs}
-      databaseName={this.databaseName}
-      partitionKey={partitionKey}
-    />;
-  }
-});
-
-export default {
-  MangoIndexEditorAndQueryEditor: MangoIndexEditorAndQueryEditor
-};
diff --git a/app/addons/documents/routes.js b/app/addons/documents/routes.js
deleted file mode 100644
index 201659a..0000000
--- a/app/addons/documents/routes.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed 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.
-
-import Documents from './shared-resources';
-import DocumentsRouteObject from "./routes-documents";
-import docEditor from "./routes-doc-editor";
-import IndexEditorRouteObject from "./routes-index-editor";
-import Mango from "./routes-mango";
-
-Documents.RouteObjects = [
-  docEditor.DocEditorRouteObject,
-  DocumentsRouteObject,
-  IndexEditorRouteObject,
-  Mango.MangoIndexEditorAndQueryEditor
-];
-
-export default Documents;
diff --git a/app/addons/documents/shared-resources.js b/app/addons/documents/shared-resources.js
deleted file mode 100644
index d0ff692..0000000
--- a/app/addons/documents/shared-resources.js
+++ /dev/null
@@ -1,329 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import { deleteRequest } from "../../core/ajax";
-import PagingCollection from "../../../assets/js/plugins/cloudant.pagingcollection";
-
-// defined here because this is contains the base resources used throughout the addon and outside,
-// so it's the first code that gets run
-var Documents = FauxtonAPI.addon();
-
-
-Documents.Doc = FauxtonAPI.Model.extend({
-  idAttribute: "_id",
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-
-  url: function (context) {
-    if (context === undefined) {
-      context = 'server';
-    }
-
-    // new without id make a POST to the DB and not a PUT on a DB
-    let id = this.safeID();
-    if (!id) {
-      id = '';
-    }
-
-    const query = this.fetchConflicts ? '?conflicts=true' : '';
-    return FauxtonAPI.urls('document', context, this.getDatabase().safeID(), id, query);
-  },
-
-  initialize: function (_attrs, options) {
-    if (this.collection && this.collection.database) {
-      this.database = this.collection.database;
-    } else if (options.database) {
-      this.database = options.database;
-    }
-
-    if (options.fetchConflicts) {
-      this.fetchConflicts = true;
-    }
-    this.partitionKey = options.partitionKey;
-  },
-
-  // HACK: the doc needs to know about the database, but it may be
-  // set directly or indirectly in all docs
-  getDatabase: function () {
-    return this.database ? this.database : this.collection.database;
-  },
-
-  validate: function (attrs) {
-    if (this.id && this.id !== attrs._id && this.get('_rev')) {
-      return "Cannot change a documents id.";
-    }
-  },
-
-  docType: function () {
-    return app.utils.getDocTypeFromId(this.id);
-  },
-
-  // @deprecated, see isJSONDocBulkDeletable
-  isBulkDeletable: function () {
-    return !!this.id && !!this.get('_rev');
-  },
-
-  isDeletable: function () {
-    return !!this.id;
-  },
-
-  isFromView: function () {
-    return !this.id;
-  },
-
-  isMangoDoc: function () {
-    if (!this.isDdoc()) return false;
-    if (this.get('language') === 'query') {
-      return true;
-    }
-
-    if (this.get('doc') && this.get('doc').language === 'query') {
-      return true;
-    }
-
-    return false;
-  },
-
-  isDdoc: function () {
-    return this.docType() === "design doc";
-  },
-
-  setDDocPartitionedOption: function (isPartitioned) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-    let options = this.get('options');
-    if (!options) {
-      options = {};
-    }
-    options.partitioned = isPartitioned;
-    this.set({ options });
-
-    return true;
-  },
-
-  setDdocView: function (view, map, reduce) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    let views = this.get('views');
-    // handles instances where the ddoc is empty (created manually)
-    if (!views) {
-      views = {};
-      this.set({language: "javascript"});
-    }
-    const tempView = views[view] || {};
-
-    if (reduce) {
-      tempView.reduce = reduce;
-    } else {
-      delete tempView.reduce;
-    }
-    tempView.map = map;
-
-    views[view] = tempView;
-    this.set({views: views});
-
-    return true;
-  },
-
-  removeDdocView: function (viewName) {
-    if (!this.isDdoc()) return false;
-    var views = this.get('views');
-
-    delete views[viewName];
-    this.set({views: views});
-  },
-
-  dDocModel: function () {
-    if (!this.isDdoc()) return false;
-    var doc = this.get('doc');
-
-    if (doc) {
-      doc._rev = this.get('_rev');
-      return new Documents.Doc(doc, {database: this.database});
-    }
-
-    return this;
-  },
-
-  safeID: function () {
-    return app.utils.getSafeIdForDoc(this.id);
-  },
-
-  destroy: function () {
-    const url = this.url() + "?rev=" + this.get('_rev');
-    return deleteRequest(url).then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-  },
-
-  parse: function (resp) {
-    if (resp.rev) {
-      resp._rev = resp.rev;
-      delete resp.rev;
-    }
-    if (resp.id) {
-      if (_.isUndefined(this.id)) {
-        resp._id = resp.id;
-      }
-    }
-
-    if (resp.ok) {
-      delete resp.id;
-      delete resp.ok;
-    }
-
-    return resp;
-  },
-
-  prettyJSON: function () {
-    var data = this.get("doc") ? this.get("doc") : this.attributes;
-
-    return JSON.stringify(data, null, "  ");
-  },
-
-  copy: function (copyId) {
-    const attrs = Object.assign({}, this.attributes, {_id: copyId});
-    delete attrs._rev;
-    const clonedDoc = new this.constructor(attrs, {
-      database: this.database
-    });
-    return clonedDoc.save();
-  },
-
-  isNewDoc: function () {
-    return this.get('_rev') ? false : true;
-  }
-});
-
-
-Documents.AllDocs = PagingCollection.extend({
-  model: Documents.Doc,
-  documentation: function () {
-    return FauxtonAPI.constants.DOC_URLS.GENERAL;
-  },
-  initialize: function (_models, options) {
-    this.viewMeta = options.viewMeta;
-    this.database = options.database;
-    this.params = _.clone(options.params);
-
-    this.on("remove", this.decrementTotalRows, this);
-    this.perPageLimit = options.perPageLimit || 20;
-
-    if (!this.params.limit) {
-      this.params.limit = this.perPageLimit;
-    }
-  },
-
-  isEditable: function () {
-    return true;
-  },
-
-  urlRef: function (context, params) {
-    var query = "";
-
-    if (params) {
-      if (!_.isEmpty(params)) {
-        query = "?" + app.utils.queryParams(params);
-      } else {
-        query = '';
-      }
-    } else if (this.params) {
-      query = "?" + app.utils.queryParams(this.params);
-    }
-    if (_.isUndefined(context)) {
-      context = 'server';
-    }
-    return FauxtonAPI.urls('allDocs', context, this.database.safeID(), query);
-  },
-
-  url: function () {
-    return this.urlRef.apply(this, arguments);
-  },
-
-  simple: function () {
-    var docs = this.map(function (item) {
-      return {
-        _id: item.id,
-        _rev: item.get('_rev'),
-      };
-    });
-
-    return new Documents.AllDocs(docs, {
-      database: this.database,
-      params: this.params
-    });
-  },
-
-  totalRows: function () {
-    return this.viewMeta.total_rows || "unknown";
-  },
-
-  decrementTotalRows: function () {
-    if (this.viewMeta.total_rows) {
-      this.viewMeta.total_rows = this.viewMeta.total_rows - 1;
-      this.trigger('totalRows:decrement');
-    }
-  },
-
-  updateSeq: function () {
-    if (!this.viewMeta) {
-      return false;
-    }
-    return this.viewMeta.update_seq || false;
-  },
-
-  parse: function (resp) {
-    var rows = resp.rows;
-
-    // remove any query errors that may return without doc info
-    // important for when querying keys on all docs
-    var cleanRows = _.filter(rows, function (row) {
-      return row.value;
-    });
-
-    resp.rows = _.map(cleanRows, function (row) {
-      var res = {
-        _id: row.id,
-        _rev: row.value.rev,
-        value: row.value,
-        key: row.key
-      };
-
-      if (row.doc) {
-        res.doc = row.doc;
-      }
-
-      return res;
-    });
-
-    return PagingCollection.prototype.parse.call(this, resp);
-  },
-
-  clone: function () {
-    return new this.constructor(this.models, {
-      database: this.database,
-      params: this.params,
-      paging: this.paging
-    });
-  }
-});
-
-export default Documents;
diff --git a/app/addons/documents/shared-routes.js b/app/addons/documents/shared-routes.js
deleted file mode 100644
index 0016955..0000000
--- a/app/addons/documents/shared-routes.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed 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.
-
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import Documents from "./shared-resources";
-import SidebarActions from "./sidebar/actions";
-
-// The Documents section is built up a lot of different route object which share code. This contains
-// base functionality that can be used across routes / addons
-var BaseRoute = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'Databases',
-
-  createDesignDocsCollection: function () {
-    this.designDocs = new Documents.AllDocs(null, {
-      database: this.database,
-      paging: {
-        pageSize: 500
-      },
-      params: {
-        startkey: '_design/',
-        endkey: '_design0',
-        include_docs: true,
-        limit: 500
-      }
-    });
-  },
-
-  addSidebar: function (selectedNavItem) {
-    var options = {
-      designDocs: this.designDocs,
-      database: this.database
-    };
-    if (selectedNavItem) {
-      options.selectedNavItem = selectedNavItem;
-    }
-
-    SidebarActions.dispatchNewOptions(options);
-  },
-
-  getCrumbs: function (database) {
-    return [
-      { "type": "back", "link": FauxtonAPI.urls('allDBs', 'app')},
-      { "name": database.id }
-    ];
-  },
-
-  createParams: function (options) {
-    const urlParams = app.getParams(options),
-          params = Documents.QueryParams.parse(urlParams);
-
-    return {
-      urlParams: urlParams,
-      docParams: params
-    };
-  }
-});
-
-
-export default BaseRoute;
diff --git a/app/addons/documents/sidebar/SidebarControllerContainer.js b/app/addons/documents/sidebar/SidebarControllerContainer.js
deleted file mode 100644
index 9b85a26..0000000
--- a/app/addons/documents/sidebar/SidebarControllerContainer.js
+++ /dev/null
@@ -1,122 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import SidebarComponents from './sidebar';
-import Action from './actions';
-import { getDatabase, getDesignDocPartitioned } from './reducers';
-
-
-// returns a simple array of design doc IDs
-const getAvailableDesignDocs = (state) => {
-  const availableDocs = state.designDocs.filter((doc) => {
-    return !doc.isMangoDoc();
-  });
-  return _.map(availableDocs, (doc) => {
-    return doc.id;
-  });
-};
-
-const getDeleteIndexDesignDoc = (state) => {
-  const designDoc = state.designDocs.find((ddoc) => {
-    return '_design/' + state.deleteIndexModalDesignDocName === ddoc.id;
-  });
-
-  return designDoc ? designDoc.dDocModel() : null;
-};
-
-
-const selectedNavItem = (selectedItem) => {
-
-  // resets previous selection and sets new values
-  const settings = {
-    designDocName: '',
-    designDocSection: '',
-    indexName: '',
-    navItem: '',
-    ...selectedItem
-  };
-  return settings;
-};
-
-const mapStateToProps = ({ sidebar, databases }, ownProps) => {
-  return {
-    database: getDatabase(sidebar),
-    selectedNav: selectedNavItem(ownProps.selectedNavItem),
-    designDocs: sidebar.designDocs,
-    designDocList: sidebar.designDocList,
-    availableDesignDocIds: getAvailableDesignDocs(sidebar),
-    toggledSections: sidebar.toggledSections,
-    isLoading: sidebar.loading || databases.isLoadingDbInfo,
-    selectedPartitionKey: ownProps.selectedPartitionKey,
-    isDbPartitioned: databases.isDbPartitioned,
-
-    deleteIndexModalVisible: sidebar.deleteIndexModalVisible,
-    deleteIndexModalText: sidebar.deleteIndexModalText,
-    deleteIndexModalOnSubmit: sidebar.deleteIndexModalOnSubmit,
-    deleteIndexModalIndexName: sidebar.deleteIndexModalIndexName,
-    deleteIndexModalDesignDoc: getDeleteIndexDesignDoc(sidebar),
-
-    cloneIndexModalVisible: sidebar.cloneIndexModalVisible,
-    cloneIndexModalTitle: sidebar.cloneIndexModalTitle,
-    cloneIndexModalSelectedDesignDoc: sidebar.cloneIndexModalSelectedDesignDoc,
-    cloneIndexModalSelectedDesignDocPartitioned: getDesignDocPartitioned(sidebar, databases.isDbPartitioned),
-    cloneIndexModalNewDesignDocName: sidebar.cloneIndexModalNewDesignDocName,
-    cloneIndexModalNewDesignDocPartitioned: sidebar.cloneIndexModalNewDesignDocPartitioned,
-    cloneIndexModalOnSubmit: sidebar.cloneIndexModalOnSubmit,
-    cloneIndexDesignDocProp: sidebar.cloneIndexDesignDocProp,
-    cloneIndexModalNewIndexName: sidebar.cloneIndexModalNewIndexName,
-    cloneIndexSourceIndexName: sidebar.cloneIndexModalSourceIndexName,
-    cloneIndexSourceDesignDocName: sidebar.cloneIndexModalSourceDesignDocName,
-    cloneIndexModalIndexLabel: sidebar.cloneIndexModalIndexLabel
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    toggleContent: (designDoc, indexGroup) => {
-      dispatch(Action.toggleContent(designDoc, indexGroup));
-    },
-    hideCloneIndexModal: () => {
-      dispatch(Action.hideCloneIndexModal());
-    },
-    hideDeleteIndexModal: () => {
-      dispatch(Action.hideDeleteIndexModal());
-    },
-    showDeleteIndexModal: (indexName, designDocName, indexLabel, onDelete) => {
-      dispatch(Action.showDeleteIndexModal(indexName, designDocName, indexLabel, onDelete));
-    },
-    showCloneIndexModal: (indexName, designDocName, indexLabel, onSubmit) => {
-      dispatch(Action.showCloneIndexModal(indexName, designDocName, indexLabel, onSubmit));
-    },
-    selectDesignDoc: (designDoc) => {
-      dispatch(Action.selectDesignDoc(designDoc));
-    },
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Action.updateNewDesignDocName(designDocName));
-    },
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Action.updateNewDesignDocPartitioned(isPartitioned));
-    },
-    setNewCloneIndexName: (indexName) => {
-      dispatch(Action.setNewCloneIndexName(indexName));
-    }
-  };
-};
-
-const SidebarControllerContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SidebarComponents.SidebarController);
-
-export default SidebarControllerContainer;
-
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js b/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js
deleted file mode 100644
index cbca2d0..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.actions.test.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed 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.
-
-import utils from '../../../../../test/mocha/testUtils';
-import FauxtonAPI from "../../../../core/api";
-import Actions from '../actions';
-import sinon from 'sinon';
-
-const {restore} = utils;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('Sidebar actions', () => {
-
-  beforeEach(() => {
-    FauxtonAPI.reduxState = sinon.stub().returns({
-      sidebar:{
-        loading: true
-      }
-    });
-    FauxtonAPI.reduxDispatch = sinon.stub();
-  });
-
-  afterEach(() => {
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.addNotification);
-  });
-
-  it("should show a notification and redirect if database doesn't exist", (done) => {
-    const navigateSpy = sinon.spy(FauxtonAPI, 'navigate');
-    const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-
-    const database = {
-      safeID : () => 'safe-id-db'
-    };
-
-    const options = {
-      database,
-      designDocs: {
-        database,
-        fetch: () => {
-          return Promise.reject({
-            responseJSON: {
-              error: 'not_found'
-            }
-          });
-        },
-      }
-    };
-
-    Actions.dispatchNewOptions(options);
-    process.nextTick(() => {
-      expect(notificationSpy.calledOnce).toBeTruthy();
-      expect(/not exist/.test(notificationSpy.args[0][0].msg)).toBeTruthy();
-      expect(navigateSpy.calledOnce).toBeTruthy();
-      expect(navigateSpy.args[0][0]).toEqual('/');
-      done();
-    });
-  });
-
-});
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.components.test.js b/app/addons/documents/sidebar/__tests__/sidebar.components.test.js
deleted file mode 100644
index c3db18a..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.components.test.js
+++ /dev/null
@@ -1,254 +0,0 @@
-// Licensed 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.
-
-import { mount } from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import utils from '../../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../../core/api';
-import '../../base';
-import DesignDoc from '../components/DesignDoc';
-import IndexSection from '../components/IndexSection';
-import MainSidebar from '../components/MainSidebar';
-
-const { restore} = utils;
-
-describe('DesignDoc', () => {
-  const database = { id: 'test-db' };
-  const selectedNavInfo = {
-    navItem: 'all-docs',
-    designDocName: '',
-    designDocSection: '',
-    indexName: ''
-  };
-  const defaultProps = {
-    database,
-    toggle: () => {},
-    sidebarListTypes: [],
-    isExpanded: true,
-    isPartitioned: false,
-    designDocName: 'doc-$-#-.1',
-    selectedNavInfo,
-    toggledSections: {},
-    designDoc: {},
-    showDeleteIndexModal: () => {},
-    showCloneIndexModal: () => {}
-  };
-
-  afterEach(() => {
-    restore(FauxtonAPI.urls);
-  });
-
-  it('confirm URLs are properly encoded when design doc name has special chars', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    expect(wrapper.find('a.icon.fonticon-plus-circled').at(1).props()['href']).toContain('/doc-%24-%23-.1');
-    expect(wrapper.find('a.toggle-view.accordion-header').props()['href']).toContain('/doc-%24-%23-.1');
-  });
-
-  it('check toggle() works when design doc name has special characters', () => {
-    sinon.stub(FauxtonAPI, 'urls');
-
-    const toggleStub = sinon.stub();
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      toggle={toggleStub}
-      designDocName={'id#1'}
-      selectedNavInfo={{}}
-    />);
-
-    // NOTE: wrapper.find doesn't work special chars so we use class name instead
-    wrapper.find('div.accordion-list-item').simulate('click', {preventDefault: sinon.stub()});
-    expect(toggleStub.calledOnce).toBeTruthy();
-  });
-
-  //here
-
-  it('confirm only single sub-option is shown by default (metadata link)', function () {
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      designDoc={{ customProp: { one: 'something' } }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(1);
-  });
-
-  it('confirm design doc sidebar extensions appear', function () {
-    sinon.stub(FauxtonAPI, 'urls');
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      sidebarListTypes={[{
-        selector: 'customProp',
-        name: 'Search Indexes',
-        icon: 'icon-here',
-        urlNamespace: 'whatever',
-        indexLabel: 'the label',
-        onDelete: () => {},
-        onClone: () => {}
-      }]}
-      designDoc={{ customProp: { one: 'something' } }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(3); // 1 for "Metadata" row, 1 for Type List row ("search indexes") and one for the index itself
-  });
-
-  it('confirm design doc sidebar extensions do not appear when they have no content', function () {
-    sinon.stub(FauxtonAPI, 'urls');
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      sidebarListTypes={[{
-        selector: 'customProp',
-        name: 'Search Indexes',
-        icon: 'icon-here',
-        urlNamespace: 'whatever',
-        indexLabel: 'the label',
-        onDelete: () => {},
-        onClone: () => {}
-      }]}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    const subOptions = el.find('.accordion-body li');
-    expect(subOptions.length).toBe(1);
-  });
-
-  it('confirm doc metadata page is highlighted if selected', function () {
-    const el = mount(<DesignDoc
-      {...defaultProps}
-      selectedNavInfo={{
-        navItem: 'designDoc',
-        designDocName: 'id',
-        designDocSection: 'metadata',
-        indexName: ''
-      }}
-      designDocName={'doc-$-#-.1'}
-    />);
-
-    expect(el.find('.accordion-body li.active a').text()).toBe('Metadata');
-  });
-
-  it('shows different icons for global and partitioned ddocs', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-      isPartitioned={false}
-    />);
-    expect(wrapper.find('i.fonticon-document').exists()).toBeTruthy();
-
-    const wrapper2 = mount(<DesignDoc
-      {...defaultProps}
-      designDocName={'doc-$-#-.1'}
-      isPartitioned={true}
-    />);
-    expect(wrapper2.find('i.fonticon-documents').exists()).toBeTruthy();
-  });
-
-  it('confirms links only include the partition key when one is selected', () => {
-    const wrapper = mount(<DesignDoc
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-    // Metadata link
-    expect(wrapper.find('a.toggle-view.accordion-header').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    // New View link
-    expect(wrapper.find('li > a.icon.fonticon-plus-circled').props()['href']).toContain('/_partition/part-key-%24-%251/');
-
-    const wrapper2 = mount(<DesignDoc
-      {...defaultProps}
-    />);
-
-    expect(wrapper2.find('a.toggle-view.accordion-header').props()['href']).not.toContain('/_partition/');
-    expect(wrapper2.find('li > a.icon.fonticon-plus-circled').props()['href']).not.toContain('/_partition/');
-  });
-});
-
-describe('MainSidebar', () => {
-  const defaultProps = {
-    databaseName: 'test-db',
-    selectedNavItem: 'Metadata'
-  };
-
-  it('confirm links are properly encoded and include the partition key when provided', () => {
-    const wrapper = mount(<MainSidebar
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-
-    expect(wrapper.find('a#all-docs').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    expect(wrapper.find('a#design-docs').props()['href']).toContain('/_partition/part-key-%24-%251/');
-    expect(wrapper.find('a#mango-query').props()['href']).toContain('/_partition/part-key-%24-%251/');
-  });
-
-  it('confirm New links are properly encoded and include the partition key when provided', () => {
-    const wrapper = mount(<MainSidebar
-      {...defaultProps}
-      selectedPartitionKey={'part-key-$-%1'}
-    />);
-
-    const newLinks = wrapper.instance().getNewButtonLinks()[0].links;
-    newLinks.forEach(link => {
-      if (link.title === 'New Doc') {
-        expect(link.url).toContain('?partitionKey=part-key-%24-%251');
-      } else {
-        expect(link.url).toContain('/_partition/part-key-%24-%251/');
-      }
-    });
-  });
-});
-
-describe('IndexSection', () => {
-  const defaultProps = {
-    urlNamespace: 'view',
-    indexLabel: 'Views',
-    database: { id: 'test-db' },
-    designDocName: 'ddoc-%-1',
-    items: ['viewA-$', 'viewB/#'],
-    isExpanded: true,
-    isPartitioned: false,
-    selectedPartitionKey: undefined,
-    selectedIndex: 'bla',
-    onDelete: () => {},
-    onClone: () => {},
-    showDeleteIndexModal: () => {},
-    showCloneIndexModal: () => {}
-  };
-
-  it('encodes the links for each item', () => {
-    const wrapper = mount(<IndexSection
-      {...defaultProps}
-    />);
-
-    defaultProps.items.forEach((view, idx) => {
-      expect(wrapper.find('a.toggle-view').at(idx).prop('href')).toContain(
-        '/_design/' + encodeURIComponent('ddoc-%-1') + '/_view/' + encodeURIComponent(view)
-      );
-    });
-  });
-
-  it('links include partition key when one is selected', () => {
-    const wrapper = mount(<IndexSection
-      {...defaultProps}
-      selectedPartitionKey={'part%1'}
-    />);
-
-    defaultProps.items.forEach((view, idx) => {
-      expect(wrapper.find('a.toggle-view').at(idx).prop('href')).toContain('/_partition/' + encodeURIComponent('part%1') + '/');
-    });
-  });
-});
diff --git a/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js b/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js
deleted file mode 100644
index 8d649ea..0000000
--- a/app/addons/documents/sidebar/__tests__/sidebar.reducers.test.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed 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.
-
-import sidebar from "../reducers";
-import ActionTypes from "../actiontypes";
-
-function isVisible (state, designDoc, indexGroup) {
-  if (!state.toggledSections[designDoc]) {
-    return false;
-  }
-  if (indexGroup) {
-    return state.toggledSections[designDoc].indexGroups[indexGroup];
-  }
-  return state.toggledSections[designDoc].visible;
-}
-
-describe('Sidebar Reducer', () => {
-
-  describe('toggle state', () => {
-
-    it('should be visible after being toggled', () => {
-      const designDoc = 'designDoc';
-      const action = {
-        type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-        designDoc: designDoc
-      };
-      const newState = sidebar(undefined, action);
-      expect(isVisible(newState, designDoc)).toBeTruthy();
-    });
-
-    it('should not be visible after being toggled twice', () => {
-      const designDoc = 'designDoc2';
-      const action = {
-        type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-        designDoc: designDoc
-      };
-      let newState = sidebar(undefined, action);
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc)).toBe(false);
-    });
-
-  });
-
-  describe('toggle state for index', () => {
-    const designDoc = 'design-doc';
-    const indexGroup = 'index';
-    const action = {
-      type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-      designDoc: designDoc,
-      indexGroup: indexGroup
-    };
-
-    it('should toggle the state', () => {
-      let newState = sidebar(undefined, action);
-      expect(isVisible(newState, designDoc)).toBeTruthy();
-
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc, indexGroup)).toBeTruthy();
-
-      newState = sidebar(newState, action);
-      expect(isVisible(newState, designDoc, indexGroup)).toBe(false);
-    });
-
-  });
-});
diff --git a/app/addons/documents/sidebar/actions.js b/app/addons/documents/sidebar/actions.js
deleted file mode 100644
index d8ba4cd..0000000
--- a/app/addons/documents/sidebar/actions.js
+++ /dev/null
@@ -1,175 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../../core/api";
-import ActionTypes from "./actiontypes";
-
-const _getDatabaseName = ({sidebar}) => {
-  if (!sidebar || sidebar.loading) {
-    return '';
-  }
-  return sidebar.database.safeID();
-};
-
-const dispatchNewOptions = (options) => {
-  if (options.database.safeID() !== _getDatabaseName(FauxtonAPI.reduxState())) {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_FETCHING
-    });
-  }
-
-  options.designDocs.fetch().then(() => {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_NEW_OPTIONS,
-      options: options
-    });
-  }, xhr => {
-    let errorMsg = 'Unable to update the sidebar.';
-    if (xhr.responseJSON && xhr.responseJSON.error === 'not_found') {
-      const databaseName = options.designDocs.database.safeID();
-      errorMsg = `The ${databaseName} database does not exist.`;
-      FauxtonAPI.navigate('/', {trigger: true});
-    }
-    FauxtonAPI.addNotification({
-      msg: errorMsg,
-      type: "error",
-      clear:  true
-    });
-  });
-};
-
-const dispatchUpdateDesignDocs = (designDocs) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_FETCHING
-  });
-
-  designDocs.fetch().then(function () {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SIDEBAR_UPDATED_DESIGN_DOCS,
-      options: {
-        designDocs: designDocs
-      }
-    });
-  });
-};
-
-const dispatchHideDeleteIndexModal = () => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL
-  });
-};
-
-const dispatchExpandSelectedItem = (selectedNavItem) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SIDEBAR_EXPAND_SELECTED_ITEM,
-    options: {
-      selectedNavItem: selectedNavItem
-    }
-  });
-};
-
-const toggleContent = (designDoc, indexGroup) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_TOGGLE_CONTENT,
-    designDoc: designDoc,
-    indexGroup: indexGroup
-  });
-};
-
-const showDeleteIndexModal = (indexName, designDocName, indexLabel, onDelete) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_SHOW_DELETE_INDEX_MODAL,
-    options: {
-      indexName: indexName,
-      indexLabel: indexLabel,
-      designDocName: designDocName,
-      onDelete: onDelete
-    }
-  });
-};
-
-const hideDeleteIndexModal = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL
-  });
-};
-
-const showCloneIndexModal = (indexName, designDocName, indexLabel, onSubmit) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_SHOW_CLONE_INDEX_MODAL,
-    options: {
-      sourceIndexName: indexName,
-      sourceDesignDocName: designDocName,
-      onSubmit: onSubmit,
-      indexLabel: indexLabel,
-      cloneIndexModalTitle: 'Clone ' + indexLabel
-    }
-  });
-};
-
-const hideCloneIndexModal = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_HIDE_CLONE_INDEX_MODAL
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-const setNewCloneIndexName = (indexName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME,
-    options: {
-      value: indexName
-    }
-  });
-};
-
-export default {
-  dispatchNewOptions,
-  dispatchUpdateDesignDocs,
-  toggleContent,
-  showDeleteIndexModal,
-  hideDeleteIndexModal,
-  dispatchHideDeleteIndexModal,
-  showCloneIndexModal,
-  hideCloneIndexModal,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned,
-  selectDesignDoc,
-  setNewCloneIndexName,
-  dispatchExpandSelectedItem
-};
diff --git a/app/addons/documents/sidebar/actiontypes.js b/app/addons/documents/sidebar/actiontypes.js
deleted file mode 100644
index 28c84fc..0000000
--- a/app/addons/documents/sidebar/actiontypes.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-export default {
-  SIDEBAR_EXPAND_SELECTED_ITEM: 'SIDEBAR_EXPAND_SELECTED_ITEM',
-  SIDEBAR_NEW_OPTIONS: 'SIDEBAR_NEW_OPTIONS',
-  SIDEBAR_TOGGLE_CONTENT: 'SIDEBAR_TOGGLE_CONTENT',
-  SIDEBAR_FETCHING: 'SIDEBAR_FETCHING',
-  SIDEBAR_SHOW_DELETE_INDEX_MODAL: 'SIDEBAR_SHOW_DELETE_INDEX_MODAL',
-  SIDEBAR_HIDE_DELETE_INDEX_MODAL: 'SIDEBAR_HIDE_DELETE_INDEX_MODAL',
-  SIDEBAR_SHOW_CLONE_INDEX_MODAL: 'SIDEBAR_SHOW_CLONE_INDEX_MODAL',
-  SIDEBAR_HIDE_CLONE_INDEX_MODAL: 'SIDEBAR_HIDE_CLONE_INDEX_MODAL',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED',
-  SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED: 'SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED',
-  SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME: 'SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME',
-  SIDEBAR_UPDATED_DESIGN_DOCS: 'SIDEBAR_UPDATED_DESIGN_DOCS'
-};
diff --git a/app/addons/documents/sidebar/components/CloneIndexModal.js b/app/addons/documents/sidebar/components/CloneIndexModal.js
deleted file mode 100644
index ca83562..0000000
--- a/app/addons/documents/sidebar/components/CloneIndexModal.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Modal } from 'react-bootstrap';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-import IndexEditorComponents from '../../index-editor/components';
-
-const { DesignDocSelector } = IndexEditorComponents;
-
-export default class CloneIndexModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    title: PropTypes.string,
-    close: PropTypes.func.isRequired,
-    submit: PropTypes.func.isRequired,
-    designDocArray: PropTypes.array.isRequired,
-    selectedDesignDoc: PropTypes.string.isRequired,
-    newDesignDocName: PropTypes.string.isRequired,
-    newIndexName: PropTypes.string.isRequired,
-    indexLabel: PropTypes.string.isRequired,
-    selectDesignDoc: PropTypes.func.isRequired,
-    updateNewDesignDocName: PropTypes.func.isRequired,
-    setNewCloneIndexName: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    title: 'Clone Index',
-    visible: false
-  };
-
-  constructor(props) {
-    super(props);
-    this.props.setNewCloneIndexName('');
-  }
-
-  submit = () => {
-    if (!this.designDocSelector.validate()) {
-      return;
-    }
-    if (this.props.newIndexName === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter the new index name.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-    this.props.submit();
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.close();
-  };
-
-  setNewIndexName = (e) => {
-    this.props.setNewCloneIndexName(e.target.value);
-  };
-
-  render() {
-    return (
-      <Modal dialogClassName="clone-index-modal" show={this.props.visible} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{this.props.title}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-
-          <form className="form" method="post" onSubmit={this.submit}>
-            <p>
-              Select the design document where the cloned {this.props.indexLabel} will be created, and then enter
-              a name for the cloned {this.props.indexLabel}.
-            </p>
-
-            <div className="row">
-              <DesignDocSelector
-                ref={node => this.designDocSelector = node}
-                designDocList={this.props.designDocArray}
-                isDbPartitioned={this.props.isDbPartitioned}
-                selectedDesignDocName={this.props.selectedDesignDoc}
-                selectedDesignDocPartitioned={this.props.selectedDesignDocPartitioned}
-                newDesignDocName={this.props.newDesignDocName}
-                newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-                onSelectDesignDoc={this.props.selectDesignDoc}
-                onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-                onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned} />
-            </div>
-
-            <div className="clone-index-name-row">
-              <label className="new-index-title-label" htmlFor="new-index-name">{this.props.indexLabel} Name</label>
-              <input type="text" id="new-index-name" value={this.props.newIndexName} onChange={this.setNewIndexName}
-                placeholder="New view name" />
-            </div>
-          </form>
-
-        </Modal.Body>
-        <Modal.Footer>
-          <a href="#" className="cancel-link" onClick={this.close} data-bypass="true">Cancel</a>
-          <button onClick={this.submit} data-bypass="true" className="btn btn-primary save">
-            <i className="icon fonticon-ok-circled" /> Clone {this.props.indexLabel}</button>
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/DesignDoc.js b/app/addons/documents/sidebar/components/DesignDoc.js
deleted file mode 100644
index 4144ff1..0000000
--- a/app/addons/documents/sidebar/components/DesignDoc.js
+++ /dev/null
@@ -1,172 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse } from 'react-bootstrap';
-import FauxtonAPI from '../../../../core/api';
-import Components from '../../../components/react-components';
-import IndexEditorActions from '../../index-editor/actions';
-import IndexSection from './IndexSection';
-
-const { MenuDropDown } = Components;
-
-export default class DesignDoc extends React.Component {
-  static propTypes = {
-    database: PropTypes.object.isRequired,
-    sidebarListTypes: PropTypes.array.isRequired,
-    isExpanded: PropTypes.bool.isRequired,
-    isPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string,
-    selectedNavInfo: PropTypes.object.isRequired,
-    toggledSections: PropTypes.object.isRequired,
-    designDocName:  PropTypes.string.isRequired,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      updatedSidebarListTypes: this.props.sidebarListTypes
-    };
-    if (_.isEmpty(this.state.updatedSidebarListTypes) ||
-      (_.has(this.state.updatedSidebarListTypes[0], 'selector') && this.state.updatedSidebarListTypes[0].selector !== 'views')) {
-
-      const newList = this.state.updatedSidebarListTypes;
-      newList.unshift({
-        selector: 'views',
-        name: 'Views',
-        urlNamespace: 'view',
-        indexLabel: 'view',
-        onDelete: IndexEditorActions.deleteView,
-        onClone: IndexEditorActions.cloneView,
-        onEdit: IndexEditorActions.gotoEditViewPage
-      });
-      this.state = { updatedSidebarListTypes: newList };
-    }
-  }
-
-  indexList = () => {
-    return _.map(this.state.updatedSidebarListTypes, (index, key) => {
-      const expanded = _.has(this.props.toggledSections, index.name) && this.props.toggledSections[index.name];
-
-      // if an index in this list is selected, pass that down
-      let selectedIndex = '';
-      if (this.props.selectedNavInfo.designDocSection === index.name) {
-        selectedIndex = this.props.selectedNavInfo.indexName;
-      }
-
-      return (
-        <IndexSection
-          icon={index.icon}
-          isExpanded={expanded}
-          urlNamespace={index.urlNamespace}
-          indexLabel={index.indexLabel}
-          onEdit={index.onEdit}
-          onDelete={index.onDelete}
-          onClone={index.onClone}
-          selectedIndex={selectedIndex}
-          toggle={this.props.toggle}
-          database={this.props.database}
-          designDocName={this.props.designDocName}
-          key={key}
-          title={index.name}
-          selector={index.selector}
-          items={_.keys(this.props.designDoc[index.selector])}
-          isPartitioned={this.props.isPartitioned}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-      );
-    });
-  };
-
-  toggle = (e) => {
-    e.preventDefault();
-    this.props.toggle(this.props.designDocName);
-  };
-
-  getNewButtonLinks = () => {
-    const encodedPartKey = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const newUrlPrefix = FauxtonAPI.urls('databaseBaseURL', 'app', encodeURIComponent(this.props.database.id))
-      + (encodedPartKey ? '/_partition/' + encodedPartKey : '');
-    const designDocName = this.props.designDocName;
-
-    const addonLinks = FauxtonAPI.getExtensions('sidebar:links');
-    const addNewLinks = addonLinks.reduce((menuLinks, link) => {
-      if (!this.props.isPartitioned || link.showForPartitionedDDocs) {
-        menuLinks.push({
-          title: link.title,
-          url: '#' + newUrlPrefix + '/' + link.url + '/' + encodeURIComponent(designDocName),
-          icon: 'fonticon-plus-circled'
-        });
-      }
-      return menuLinks;
-    }, [{
-      title: 'New View',
-      url: '#' + FauxtonAPI.urls('new', 'addView', encodeURIComponent(this.props.database.id), encodedPartKey, encodeURIComponent(designDocName)),
-      icon: 'fonticon-plus-circled'
-    }]);
-
-    return [{
-      title: 'Add New',
-      links: addNewLinks
-    }];
-  };
-
-  render () {
-    const buttonLinks = this.getNewButtonLinks();
-    let toggleClassNames = 'design-doc-section accordion-header';
-    let toggleBodyClassNames = 'design-doc-body accordion-body collapse';
-
-    if (this.props.isExpanded) {
-      toggleClassNames += ' down';
-      toggleBodyClassNames += ' in';
-    }
-    const designDocName = this.props.designDocName;
-    const encodedPartKey = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const designDocMetaUrl = FauxtonAPI.urls('designDocs', 'app',
-      encodeURIComponent(this.props.database.id), encodedPartKey, designDocName);
-    const metadataRowClass = (this.props.selectedNavInfo.designDocSection === 'metadata') ? 'active' : '';
-    const iconTitle = this.props.isPartitioned ? 'Partitioned design document' : 'Global design document';
-    const iconClass = this.props.isPartitioned ? 'fonticon-documents' : 'fonticon-document';
-    return (
-      <li className="nav-header">
-        <div id={"sidebar-tab-" + designDocName} className={toggleClassNames}>
-          <div id={"nav-header-" + designDocName} onClick={this.toggle} className='accordion-list-item'>
-            <div className="fonticon-play"></div>
-            <p className='design-doc-name'>
-              <span title={'_design/' + designDocName}>
-                <i className={iconClass} title={iconTitle}></i>
-                {designDocName}
-              </span>
-            </p>
-          </div>
-          <div className='new-button add-dropdown'>
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </div>
-        <Collapse in={this.props.isExpanded}>
-          <ul className={toggleBodyClassNames} id={`design-doc-menu-${this.props.designDocName}`}>
-            <li className={metadataRowClass}>
-              <a href={"#/" + designDocMetaUrl} className="toggle-view accordion-header">
-                Metadata
-              </a>
-            </li>
-            {this.indexList()}
-          </ul>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/DesignDocList.js b/app/addons/documents/sidebar/components/DesignDocList.js
deleted file mode 100644
index c520659..0000000
--- a/app/addons/documents/sidebar/components/DesignDocList.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../../core/api';
-import DocHelpers from '../../helpers';
-import DesignDoc from './DesignDoc';
-
-export default class DesignDocList extends React.Component {
-  static propTypes = {
-    database: PropTypes.object.isRequired,
-    toggle: PropTypes.func.isRequired,
-    designDocs: PropTypes.array,
-    toggledSections: PropTypes.object,
-    selectedNav: PropTypes.shape({
-      designDocName: PropTypes.string,
-      designDocSection: PropTypes.string,
-      indexName: PropTypes.string,
-      navItem: PropTypes.string
-    }).isRequired,
-    isDbPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    const list = FauxtonAPI.getExtensions('sidebar:list');
-    this.sidebarListTypes = _.isUndefined(list) ? [] : list;
-  }
-
-  designDocList = () => {
-    return _.map(this.props.designDocs, (designDoc, key) => {
-      const ddName = decodeURIComponent(designDoc.safeId);
-      const isDDocPartitioned = DocHelpers.isDDocPartitioned(designDoc, this.props.isDbPartitioned);
-
-      // only pass down the selected nav info and toggle info if they're relevant for this particular design doc
-      let expanded = false,
-          toggledSections = {};
-      if (_.has(this.props.toggledSections, ddName)) {
-        expanded = this.props.toggledSections[ddName].visible;
-        toggledSections = this.props.toggledSections[ddName].indexGroups;
-      }
-
-      let selectedNavInfo = {};
-      if (this.props.selectedNav.navItem === 'designDoc' && this.props.selectedNav.designDocName === ddName) {
-        selectedNavInfo = this.props.selectedNav;
-      }
-
-      return (
-        <DesignDoc
-          toggle={this.props.toggle}
-          sidebarListTypes={this.sidebarListTypes}
-          isExpanded={expanded}
-          toggledSections={toggledSections}
-          selectedNavInfo={selectedNavInfo}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          isPartitioned={isDDocPartitioned}
-          key={key}
-          designDoc={designDoc}
-          designDocName={ddName}
-          database={this.props.database}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-      );
-    });
-  };
-
-  render() {
-    return (
-      <ul className="nav nav-list">
-        {this.designDocList()}
-      </ul>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/IndexSection.js b/app/addons/documents/sidebar/components/IndexSection.js
deleted file mode 100644
index ec57842..0000000
--- a/app/addons/documents/sidebar/components/IndexSection.js
+++ /dev/null
@@ -1,159 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { Collapse, OverlayTrigger, Popover } from 'react-bootstrap';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from '../../../../core/api';
-
-export default class IndexSection extends React.Component {
-  static propTypes = {
-    urlNamespace: PropTypes.string.isRequired,
-    indexLabel: PropTypes.string.isRequired,
-    database: PropTypes.object.isRequired,
-    designDocName: PropTypes.string.isRequired,
-    items: PropTypes.array.isRequired,
-    isExpanded: PropTypes.bool.isRequired,
-    selectedIndex: PropTypes.string.isRequired,
-    onDelete: PropTypes.func.isRequired,
-    onClone: PropTypes.func.isRequired,
-    showDeleteIndexModal: PropTypes.func.isRequired,
-    showCloneIndexModal: PropTypes.func.isRequired,
-    isPartitioned: PropTypes.bool.isRequired,
-    selectedPartitionKey: PropTypes.string
-  };
-
-  state = {
-    placement: 'bottom'
-  };
-
-  // this dynamically changes the placement of the menu (top/bottom) to prevent it going offscreen and causing some
-  // unsightly shifting
-  setPlacement = (rowId) => {
-    const rowTop = document.getElementById(rowId).getBoundingClientRect().top;
-    const toggleHeight = 150; // the height of the menu overlay, arrow, view row
-    const placement = (rowTop + toggleHeight > window.innerHeight) ? 'top' : 'bottom';
-    this.setState({ placement: placement });
-  };
-
-  createItems = () => {
-
-    // sort the indexes alphabetically
-    const sortedItems = this.props.items.sort();
-
-    return _.map(sortedItems, (indexName, index) => {
-      let href = FauxtonAPI.urls(this.props.urlNamespace, 'app', encodeURIComponent(this.props.database.id), encodeURIComponent(this.props.designDocName));
-      if (this.props.selectedPartitionKey) {
-        href = FauxtonAPI.urls('partitioned_' + this.props.urlNamespace, 'app',
-          encodeURIComponent(this.props.database.id),
-          encodeURIComponent(this.props.selectedPartitionKey),
-          encodeURIComponent(this.props.designDocName));
-      }
-      const className = (this.props.selectedIndex === indexName) ? 'active' : '';
-
-      return (
-        <li className={className} key={index}>
-          <a
-            id={this.props.designDocName + '_' + indexName}
-            href={"#/" + href + encodeURIComponent(indexName)}
-            className="toggle-view">
-            {indexName}
-          </a>
-          <OverlayTrigger
-            trigger="click"
-            onEnter={this.setPlacement.bind(this, this.props.designDocName + '_' + indexName)}
-            placement={this.state.placement}
-            rootClose={true}
-            ref={overlay => this.itemOverlay = overlay}
-            overlay={
-              <Popover id="index-menu-component-popover">
-                <ul>
-                  <li onClick={this.indexAction.bind(this, 'edit', { indexName: indexName, onEdit: this.props.onEdit })}>
-                    <span className="fonticon fonticon-file-code-o"></span>
-                    Edit
-                  </li>
-                  <li onClick={this.indexAction.bind(this, 'clone', { indexName: indexName, onClone: this.props.onClone })}>
-                    <span className="fonticon fonticon-files-o"></span>
-                    Clone
-                  </li>
-                  <li onClick={this.indexAction.bind(this, 'delete', { indexName: indexName, onDelete: this.props.onDelete })}>
-                    <span className="fonticon fonticon-trash"></span>
-                    Delete
-                  </li>
-                </ul>
-              </Popover>
-            }>
-            <span className="index-menu-toggle fonticon fonticon-wrench2"></span>
-          </OverlayTrigger>
-        </li>
-      );
-    });
-  };
-
-  indexAction = (action, params, e) => {
-    e.preventDefault();
-
-    this.itemOverlay.hide();
-
-    switch (action) {
-      case 'delete':
-        this.props.showDeleteIndexModal(params.indexName, this.props.designDocName, this.props.indexLabel, params.onDelete);
-        break;
-      case 'clone':
-        this.props.showCloneIndexModal(params.indexName, this.props.designDocName, this.props.indexLabel, params.onClone);
-        break;
-      case 'edit':
-        params.onEdit(this.props.database.id, this.props.selectedPartitionKey, this.props.designDocName, params.indexName);
-        break;
-    }
-  };
-
-  toggle = (e) => {
-    e.preventDefault();
-    this.props.toggle(this.props.designDocName, this.props.title);
-  };
-
-  render() {
-
-    // if this section has no content, omit it to prevent clutter. Otherwise it would show a toggle option that
-    // would hide/show nothing
-    if (this.props.items.length === 0) {
-      return null;
-    }
-
-    let toggleClassNames = 'accordion-header index-group-header';
-    let toggleBodyClassNames = 'index-list accordion-body collapse';
-    if (this.props.isExpanded) {
-      toggleClassNames += ' down';
-      toggleBodyClassNames += ' in';
-    }
-
-    const title = this.props.title;
-    const designDocName = this.props.designDocName;
-    const linkId = "nav-design-function-" + designDocName + this.props.selector;
-
-    return (
-      <li id={linkId}>
-        <a className={toggleClassNames} data-toggle="collapse" onClick={this.toggle}>
-          <div className="fonticon-play"></div>
-          {title}
-        </a>
-        <Collapse in={this.props.isExpanded}>
-          <ul className={toggleBodyClassNames}>
-            {this.createItems()}
-          </ul>
-        </Collapse>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/MainSidebar.js b/app/addons/documents/sidebar/components/MainSidebar.js
deleted file mode 100644
index 0bbad14..0000000
--- a/app/addons/documents/sidebar/components/MainSidebar.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import app from "../../../../app";
-import FauxtonAPI from '../../../../core/api';
-import DocumentHelper from "../../../documents/helpers";
-import Components from '../../../components/react-components';
-
-const { MenuDropDown } = Components;
-
-export default class MainSidebar extends React.Component {
-  static propTypes = {
-    databaseName: PropTypes.string.isRequired,
-    selectedNavItem: PropTypes.string.isRequired,
-    selectedPartitionKey: PropTypes.string
-  };
-
-  getNewButtonLinks = () => {  // these are links for the sidebar '+' on All Docs and All Design Docs
-    return DocumentHelper.getNewButtonLinks(this.props.databaseName, this.props.selectedPartitionKey);
-  };
-
-  buildDocLinks = () => {
-    const base = FauxtonAPI.urls('base', 'app', this.props.databaseName);
-    return FauxtonAPI.getExtensions('docLinks').map((link) => {
-      return (
-        <li key={link.url} className={this.getNavItemClass(link.url)}>
-          <a id={link.url} href={base + link.url}>{link.title}</a>
-        </li>
-      );
-    });
-  };
-
-  getNavItemClass = (navItem) => {
-    return (navItem === this.props.selectedNavItem) ? 'active' : '';
-  };
-
-  render() {
-    const docLinks = this.buildDocLinks();
-    const dbEncoded = FauxtonAPI.url.encode(this.props.databaseName);
-    const partKeyEncoded = this.props.selectedPartitionKey ? encodeURIComponent(this.props.selectedPartitionKey) : '';
-    const changesUrl = '#' + FauxtonAPI.urls('changes', 'app', dbEncoded, partKeyEncoded, '');
-    const permissionsUrl = '#' + FauxtonAPI.urls('permissions', 'app', dbEncoded, partKeyEncoded);
-    const databaseUrl = FauxtonAPI.urls('allDocs', 'app', dbEncoded, partKeyEncoded, '');
-    const mangoQueryUrl = FauxtonAPI.urls('mango', 'query-app', dbEncoded, partKeyEncoded);
-    const runQueryWithMangoText = app.i18n.en_US['run-query-with-mango'];
-    const buttonLinks = this.getNewButtonLinks();
-
-    return (
-      <ul className="nav nav-list">
-        <li className={this.getNavItemClass('all-docs')}>
-          <a id="all-docs"
-            href={"#/" + databaseUrl}
-            className="toggle-view">
-            All Documents
-          </a>
-          <div id="new-all-docs-button" className="add-dropdown">
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </li>
-        <li className={this.getNavItemClass('mango-query')}>
-          <a
-            id="mango-query"
-            href={'#' + mangoQueryUrl}
-            className="toggle-view">
-            {runQueryWithMangoText}
-          </a>
-        </li>
-        <li className={this.getNavItemClass('permissions')}>
-          <a id="permissions" href={permissionsUrl}>Permissions</a>
-        </li>
-        <li className={this.getNavItemClass('changes')}>
-          <a id="changes" href={changesUrl}>Changes</a>
-        </li>
-        {docLinks}
-        <li className={this.getNavItemClass('design-docs')}>
-          <a
-            id="design-docs"
-            href={"#/" + databaseUrl + '?startkey="_design"&endkey="_design0"'}
-            className="toggle-view">
-            Design Documents
-          </a>
-          <div id="new-design-docs-button" className="add-dropdown">
-            <MenuDropDown links={buttonLinks} />
-          </div>
-        </li>
-      </ul>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/components/SidebarController.js b/app/addons/documents/sidebar/components/SidebarController.js
deleted file mode 100644
index bda4bfa..0000000
--- a/app/addons/documents/sidebar/components/SidebarController.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import ComponentsActions from "../../../components/actions";
-import Components from '../../../components/react-components';
-import ComponentsStore from '../../../components/stores';
-import GeneralComponents from '../../../fauxton/components';
-import CloneIndexModal from './CloneIndexModal';
-import DesignDocList from './DesignDocList';
-import MainSidebar from './MainSidebar';
-
-const { DeleteDatabaseModal, LoadLines } = Components;
-const { ConfirmationModal } = GeneralComponents;
-const { deleteDbModalStore } = ComponentsStore;
-
-export default class SidebarController extends React.Component {
-
-  static propTypes = {
-    selectedNav: PropTypes.shape({
-      designDocName: PropTypes.string,
-      designDocSection: PropTypes.string,
-      indexName: PropTypes.string,
-      navItem: PropTypes.string
-    }).isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = this.getDeleteDbStoreState();
-    this.deleteIndex = this.deleteIndex.bind(this);
-    this.cloneIndex = this.cloneIndex.bind(this);
-  }
-
-  componentDidMount() {
-    deleteDbModalStore.on('change', this.onChange, this);
-  }
-
-  componentWillUnmount() {
-    deleteDbModalStore.off('change', this.onChange, this);
-  }
-
-  getDeleteDbStoreState() {
-    return {
-      deleteDbModalProperties: deleteDbModalStore.getShowDeleteDatabaseModal()
-    };
-  }
-
-  onChange = () => {
-    const newState = this.getDeleteDbStoreState();
-    this.setState(newState);
-  };
-
-  showDeleteDatabaseModal = (payload) => {
-    ComponentsActions.showDeleteDatabaseModal(payload);
-  };
-
-  // handles deleting of any index regardless of type. The delete handler and all relevant info is set when the user
-  // clicks the delete action for a particular index
-  deleteIndex = () => {
-
-    // if the user is currently on the index that's being deleted, pass that info along to the delete handler. That can
-    // be used to redirect the user to somewhere appropriate
-    const isOnIndex = this.props.selectedNav.navItem === 'designDoc' &&
-      ('_design/' + this.props.selectedNav.designDocName) === this.props.deleteIndexModalDesignDoc.id &&
-      this.props.selectedNav.indexName === this.props.deleteIndexModalIndexName;
-
-    this.props.deleteIndexModalOnSubmit({
-      isOnIndex: isOnIndex,
-      indexName: this.props.deleteIndexModalIndexName,
-      designDoc: this.props.deleteIndexModalDesignDoc,
-      designDocs: this.props.designDocs,
-      database: this.props.database
-    });
-  };
-
-  cloneIndex = () => {
-    this.props.cloneIndexModalOnSubmit({
-      sourceIndexName: this.props.cloneIndexSourceIndexName,
-      sourceDesignDocName: this.props.cloneIndexSourceDesignDocName,
-      targetDesignDocName: this.props.cloneIndexModalSelectedDesignDoc,
-      newDesignDocName: this.props.cloneIndexModalNewDesignDocName,
-      newDesignDocPartitioned: this.props.cloneIndexModalNewDesignDocPartitioned,
-      isDbPartitioned: this.props.isDbPartitioned,
-      newIndexName: this.props.cloneIndexModalNewIndexName,
-      designDocs: this.props.designDocs,
-      database: this.props.database,
-      onComplete: this.props.hideCloneIndexModal
-    });
-  };
-
-  render() {
-    if (this.props.isLoading) {
-      return <LoadLines />;
-    }
-
-    return (
-      <nav className="sidenav">
-        <MainSidebar
-          selectedNavItem={this.props.selectedNav.navItem}
-          databaseName={this.props.database.id}
-          selectedPartitionKey={this.props.selectedPartitionKey}/>
-        <DesignDocList
-          selectedNav={this.props.selectedNav}
-          selectedPartitionKey={this.props.selectedPartitionKey}
-          isDbPartitioned={this.props.isDbPartitioned}
-          toggle={this.props.toggleContent}
-          toggledSections={this.props.toggledSections}
-          designDocs={this.props.designDocList}
-          database={this.props.database}
-          showDeleteIndexModal={this.props.showDeleteIndexModal}
-          showCloneIndexModal={this.props.showCloneIndexModal} />
-        <DeleteDatabaseModal
-          showHide={this.showDeleteDatabaseModal}
-          modalProps={this.state.deleteDbModalProperties} />
-
-        {/* the delete and clone index modals handle all index types, hence the props all being pulled from the store */}
-        <ConfirmationModal
-          title="Confirm Deletion"
-          visible={this.props.deleteIndexModalVisible}
-          text={this.props.deleteIndexModalText}
-          onClose={this.props.hideDeleteIndexModal}
-          onSubmit={this.deleteIndex} />
-        <CloneIndexModal
-          visible={this.props.cloneIndexModalVisible}
-          title={this.props.cloneIndexModalTitle}
-          close={this.props.hideCloneIndexModal}
-          submit={this.cloneIndex}
-          designDocArray={this.props.availableDesignDocIds}
-          selectedDesignDoc={this.props.cloneIndexModalSelectedDesignDoc}
-          selectedDesignDocPartitioned={this.props.cloneIndexModalSelectedDesignDocPartitioned}
-          newDesignDocName={this.props.cloneIndexModalNewDesignDocName}
-          newDesignDocPartitioned={this.props.cloneIndexModalNewDesignDocPartitioned}
-          newIndexName={this.props.cloneIndexModalNewIndexName}
-          indexLabel={this.props.cloneIndexModalIndexLabel}
-          selectDesignDoc={this.props.selectDesignDoc}
-          updateNewDesignDocName={this.props.updateNewDesignDocName}
-          updateNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-          setNewCloneIndexName={this.props.setNewCloneIndexName}
-          isDbPartitioned={this.props.isDbPartitioned} />
-      </nav>
-    );
-  }
-}
diff --git a/app/addons/documents/sidebar/helpers.js b/app/addons/documents/sidebar/helpers.js
deleted file mode 100644
index 5950208..0000000
--- a/app/addons/documents/sidebar/helpers.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-
-/**
- * Represents the selected item in the sidebar, including nested nav items to ensure the appropriate item
- * is visible and highlighted.
- */
-export class SidebarItemSelection {
-
-  /**
-   * Creates a new sidebar selection.
-   *
-   * @param {string} navItem 'permissions', 'changes', 'all-docs', 'compact', 'mango-query', 'designDoc'
-   *   (or anything thats beenextended)
-   * @param {string} [params] (optional) If you passed 'designDoc' as the first param. This lets you
-   *   specify which sub-item should be selected, e.g.:
-   *      Actions.selectNavItem('designDoc', { designDocName: 'my-design-doc', section: 'metadata' });
-   *      Actions.selectNavItem('designDoc', { designDocName: 'my-design-doc', section: 'Views', indexName: 'my-view' });
-   */
-  constructor(navItem, params) {
-    this.navItem = navItem;
-    if (params) {
-      const {designDocName, designDocSection, indexName} = params;
-      this.designDocName = designDocName ? designDocName : '';
-      this.designDocSection = designDocSection ? designDocSection : '';
-      this.indexName = indexName ? indexName : '';
-    }
-  }
-}
-
diff --git a/app/addons/documents/sidebar/reducers.js b/app/addons/documents/sidebar/reducers.js
deleted file mode 100644
index a5491d8..0000000
--- a/app/addons/documents/sidebar/reducers.js
+++ /dev/null
@@ -1,252 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from '../../../app';
-import Helpers from '../helpers';
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  designDocList: [],
-  selected: {
-    navItem: 'all-docs',
-    designDocName: '',
-    designDocSection: '', // 'metadata' / name of index group ("Views", etc.)
-    indexName: ''
-  },
-  loading: true,
-  toggledSections: {},
-
-  deleteIndexModalVisible: false,
-  deleteIndexModalDesignDocName: '',
-  deleteIndexModalText: '',
-  deleteIndexModalIndexName: '',
-  deleteIndexModalOnSubmit: () => {},
-
-  cloneIndexModalVisible: false,
-  cloneIndexDesignDocProp: '',
-  cloneIndexModalTitle: '',
-  cloneIndexModalSelectedDesignDoc: '',
-  cloneIndexModalNewDesignDocName: '',
-  cloneIndexModalNewDesignDocPartitioned: true,
-  cloneIndexModalNewIndexName: '',
-  cloneIndexModalSourceIndexName: '',
-  cloneIndexModalSourceDesignDocName: '',
-  cloneIndexModalIndexLabel: '',
-  cloneIndexModalOnSubmit: () => {}
-};
-
-function setNewOptions(state, options) {
-  const newState = {
-    ...state,
-    database: options.database,
-    designDocs: options.designDocs,
-    designDocList: getDesignDocList(options.designDocs),
-    loading: false,
-  };
-  // this can be expanded in future as we need. Right now it can only set a top-level nav item ('all docs',
-  // 'permissions' etc.) and not a nested page
-  if (options.selectedNavItem) {
-    newState.selected = {
-      navItem: options.selectedNavItem,
-      designDocName: '',
-      designDocSection: '',
-      indexName: ''
-    };
-  }
-
-  return newState;
-}
-
-function toggleContent(state, designDoc, indexGroup) {
-  // used to toggle both design docs, and any index groups within them
-  const newState = {
-    ...state
-  };
-
-  if (!state.toggledSections[designDoc]) {
-    newState.toggledSections[designDoc] = {
-      visible: true,
-      indexGroups: {}
-    };
-    return newState;
-  }
-
-  if (indexGroup) {
-    const expanded = state.toggledSections[designDoc].indexGroups[indexGroup];
-
-    if (_.isUndefined(expanded)) {
-      newState.toggledSections[designDoc].indexGroups[indexGroup] = true;
-    } else {
-      newState.toggledSections[designDoc].indexGroups[indexGroup] = !expanded;
-    }
-    return newState;
-  }
-
-  newState.toggledSections[designDoc].visible = !state.toggledSections[designDoc].visible;
-
-  return newState;
-}
-
-function expandSelectedItem(state, {selectedNavItem}) {
-  const newState = {
-    ...state
-  };
-
-  if (selectedNavItem.designDocName) {
-    if (!_.has(state.toggledSections, selectedNavItem.designDocName)) {
-      newState.toggledSections[selectedNavItem.designDocName] = {
-        visible: true,
-        indexGroups: {}
-      };
-    }
-    newState.toggledSections[selectedNavItem.designDocName].visible = true;
-
-    if (selectedNavItem.designDocSection) {
-      newState.toggledSections[selectedNavItem.designDocName].indexGroups[selectedNavItem.designDocSection] = true;
-    }
-  }
-  return newState;
-}
-
-function getDesignDocList (designDocs) {
-  if (!designDocs) {
-    return [];
-  }
-  let docs = designDocs.toJSON();
-  docs = _.filter(docs, (doc) => {
-    if (_.has(doc.doc, 'language')) {
-      return doc.doc.language !== 'query';
-    }
-    return true;
-  });
-
-  const ddocsList = docs.map((doc) => {
-    doc.safeId = app.utils.safeURLName(doc._id.replace(/^_design\//, ''));
-    return _.extend(doc, doc.doc);
-  });
-  return ddocsList;
-}
-
-export function getDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return state.cloneIndexModalSelectedDesignDoc == ddoc.id;
-  });
-  if (designDoc) {
-    return Helpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export const getDatabase = (state) => {
-  if (state.loading) {
-    return {};
-  }
-  return state.database;
-};
-
-export default function sidebar(state = initialState, action) {
-  const { options } = action;
-  switch (action.type) {
-
-    case ActionTypes.SIDEBAR_EXPAND_SELECTED_ITEM:
-      return expandSelectedItem(state, options);
-
-    case ActionTypes.SIDEBAR_NEW_OPTIONS:
-      return setNewOptions(state, options);
-
-    case ActionTypes.SIDEBAR_TOGGLE_CONTENT:
-      return toggleContent(state, action.designDoc, action.indexGroup);
-
-    case ActionTypes.SIDEBAR_FETCHING:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.SIDEBAR_SHOW_DELETE_INDEX_MODAL:
-      return {
-        ...state,
-        deleteIndexModalIndexName: options.indexName,
-        deleteIndexModalDesignDocName: options.designDocName,
-        deleteIndexModalVisible: true,
-        deleteIndexModalText: (
-          <div>
-            Are you sure you want to delete the <code>{options.indexName}</code> {options.indexLabel}?
-          </div>
-        ),
-        deleteIndexModalOnSubmit: options.onDelete
-      };
-
-
-    case ActionTypes.SIDEBAR_HIDE_DELETE_INDEX_MODAL:
-      return {
-        ...state,
-        deleteIndexModalVisible: false
-      };
-
-    case ActionTypes.SIDEBAR_SHOW_CLONE_INDEX_MODAL:
-      return {
-        ...state,
-        cloneIndexModalIndexLabel: options.indexLabel,
-        cloneIndexModalTitle: options.cloneIndexModalTitle,
-        cloneIndexModalSourceIndexName: options.sourceIndexName,
-        cloneIndexModalSourceDesignDocName: options.sourceDesignDocName,
-        cloneIndexModalSelectedDesignDoc: '_design/' + options.sourceDesignDocName,
-        cloneIndexDesignDocProp: '',
-        cloneIndexModalVisible: true,
-        cloneIndexModalOnSubmit: options.onSubmit
-      };
-
-    case ActionTypes.SIDEBAR_HIDE_CLONE_INDEX_MODAL:
-      return {
-        ...state,
-        cloneIndexModalVisible: false
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_CHANGE:
-      return {
-        ...state,
-        cloneIndexModalSelectedDesignDoc: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_NAME_UPDATED:
-      return {
-        ...state,
-        cloneIndexModalNewDesignDocName: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_DESIGN_DOC_NEW_PARTITIONED_UPDATED:
-      return {
-        ...state,
-        cloneIndexModalNewDesignDocPartitioned: options.value
-      };
-
-    case ActionTypes.SIDEBAR_CLONE_MODAL_UPDATE_INDEX_NAME:
-      return {
-        ...state,
-        cloneIndexModalNewIndexName: options.value
-      };
-
-    case ActionTypes.SIDEBAR_UPDATED_DESIGN_DOCS:
-      return {
-        ...state,
-        designDocs: options.designDocs,
-        designDocList: getDesignDocList(options.designDocs),
-        loading: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/documents/sidebar/sidebar.js b/app/addons/documents/sidebar/sidebar.js
deleted file mode 100644
index a20420b..0000000
--- a/app/addons/documents/sidebar/sidebar.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed 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.
-
-import CloneIndexModal from './components/CloneIndexModal';
-import DesignDoc from './components/DesignDoc';
-import SidebarController from './components/SidebarController';
-
-export default {
-  SidebarController,
-  DesignDoc,
-  CloneIndexModal
-};
diff --git a/app/addons/documents/tests/document-test-helper.js b/app/addons/documents/tests/document-test-helper.js
deleted file mode 100644
index b343a81..0000000
--- a/app/addons/documents/tests/document-test-helper.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed 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.
-import Documents from "../resources";
-
-const opts = {
-  params: {},
-  database: {
-    safeID: function () { return '1';}
-  }
-};
-
-function createDocColumn (docs) {
-  docs = docs.map(function (doc) {
-    return Documents.Doc.prototype.parse(doc);
-  });
-
-  return new Documents.AllDocs(docs, opts);
-}
-
-export default {
-  createDocColumn
-};
diff --git a/app/addons/documents/tests/nightwatch/bulkDelete.js b/app/addons/documents/tests/nightwatch/bulkDelete.js
deleted file mode 100644
index 9016c05..0000000
--- a/app/addons/documents/tests/nightwatch/bulkDelete.js
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Bulk deletes on json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.bulk-action-component-selector-group', waitTime, false)
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-      .waitForElementNotPresent('[data-id="' + newDocumentName1 + '"]', waitTime, false)
-      .getText('body', function (result) {
-        var data = result.value,
-            isPresentFirstDoc = data.indexOf(newDocumentName1) !== -1,
-            isPresentSecondDoc = data.indexOf(newDocumentName2) !== -1,
-            bothMissing = !isPresentFirstDoc && !isPresentSecondDoc;
-
-        this.verify.ok(bothMissing,
-          'Checking if documents were deleted');
-      })
-      .end();
-  },
-
-  'Bulk deletes on table/metadata view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-selector-group', waitTime, false)
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.table-view-docs', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-      .waitForElementNotPresent('.table-view-docs ', waitTime, false)
-      .getText('body', function (result) {
-        var data = result.value,
-            isPresentFirstDoc = data.indexOf(newDocumentName1) !== -1,
-            isPresentSecondDoc = data.indexOf(newDocumentName2) !== -1,
-            bothMissing = !isPresentFirstDoc && !isPresentSecondDoc;
-
-        this.verify.ok(bothMissing,
-          'Checking if documents were deleted');
-      })
-      .end();
-  },
-
-  'Select all works after changing the page': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createManyDocuments(25, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      // ensures page content has loaded before proceeding
-      .waitForElementVisible('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('.bulk-action-component-selector-group input[type="checkbox"]')
-
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementVisible('[data-id="27"]', waitTime, false)
-      .waitForElementPresent('#previous', waitTime, false)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('.bulk-action-component-selector-group input[type="checkbox"]:checked', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/changes.js b/app/addons/documents/tests/nightwatch/changes.js
deleted file mode 100644
index 88ccdd6..0000000
--- a/app/addons/documents/tests/nightwatch/changes.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Check doc link in Changes feed links properly': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument('doc_1', newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_changes')
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-
-      // confirm only the single result is now listed in the page
-      .clickWhenVisible('.js-doc-link')
-      .waitForElementPresent('#doc-editor-actions-panel', waitTime, false)
-      .end();
-  }
-
-};
diff --git a/app/addons/documents/tests/nightwatch/changesFilter.js b/app/addons/documents/tests/nightwatch/changesFilter.js
deleted file mode 100644
index 9c05810..0000000
--- a/app/addons/documents/tests/nightwatch/changesFilter.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  // some basic test for the changes page. All of this and more is covered in the
-  // changes.componentsSpec.react.jsx mocha tests; this is more of a sanity end-to-end test
-  'Check changes filter results' : function (client) {
-
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDocument('doc_1', newDatabaseName)
-      .createDocument('doc_2', newDatabaseName)
-      .createDocument('doc_3', newDatabaseName)
-
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_1')
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_2')
-      .checkForStringPresent(newDatabaseName + '/_changes', 'doc_3')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_changes')
-
-      // confirm all 3 changes are there
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_2"]', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_3"]', waitTime, false)
-
-      // add a filter
-      .waitForElementVisible('.js-changes-filter-field', waitTime, false)
-      .setValue('.js-changes-filter-field', "doc_1")
-      .clickWhenVisible('.js-filter-form button[type="submit"]')
-
-      // confirm only the single result is now listed in the page
-      .waitForElementVisible('span.label-info', waitTime, false)
-      .waitForElementPresent('.change-box[data-id="doc_1"]', waitTime, false)
-      .waitForElementNotPresent('.change-box[data-id="doc_2"]', waitTime, false)
-      .waitForElementNotPresent('.change-box[data-id="doc_3"]', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js b/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js
deleted file mode 100644
index d485581..0000000
--- a/app/addons/documents/tests/nightwatch/checkSidebarBehavior.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Checks if design docs that have special chars in the ID show up in the UI and are clickable': function (client) {
-    const waitTime = 10000,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-    const docNormal = 'ddoc_normal';
-    const docSpecialChars = 'ddoc_with.$pecialcharacters()+-';
-    const docSpecialCharsEncoded = 'ddoc_with.%24pecialcharacters()%2B-';
-    client
-      .loginToGUI()
-      .createDocument('_design/' + docNormal, newDatabaseName)
-      .createDocument('_design/' + docSpecialChars, newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.nav-list', waitTime, false)
-      // Verify 'Metadata' subitem is not visible
-      .assert.not.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docNormal + '/_info"]')
-      .assert.not.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docSpecialCharsEncoded + '/_info"]')
-      // Click sidebar items and verify they expand
-      .clickWhenVisible('#nav-header-' + docNormal)
-      .assert.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docNormal + '/_info"]')
-      .clickWhenVisible('span[title="_design/' + docSpecialChars + '"]')
-      .assert.visible('a[href="#/database/' + newDatabaseName + '/_design/' + docSpecialCharsEncoded + '/_info"]')
-      // Verify display name is not encoded
-      .assert.containsText('span[title="_design/' + docSpecialChars + '"]', docSpecialChars)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/cloneDoc.js b/app/addons/documents/tests/nightwatch/cloneDoc.js
deleted file mode 100644
index 46503e9..0000000
--- a/app/addons/documents/tests/nightwatch/cloneDoc.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Licensed 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.
-
-
-module.exports = {
-  'Clones a document via Editor': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const newDocumentName = 'clone_doc_doc';
-    const clonedDocName = 'cloned/document';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .checkForDocumentCreated(newDocumentName)
-      .loginToGUI()
-
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .clickWhenVisible('#doc-editor-actions-panel button[title="Clone Document"]')
-
-      .waitForElementVisible('.clone-doc-modal input', waitTime, false)
-
-      .clickWhenVisible('.clone-doc-modal input')
-
-      .clearValue('.clone-doc-modal input')
-      .setValue('.clone-doc-modal input', [clonedDocName])
-
-      .clickWhenVisible('.clone-doc-modal button.btn.btn-primary')
-      .closeNotification()
-
-      .waitForAttribute('.faux-header__breadcrumbs .faux-header__breadcrumbs-element:last-child', 'textContent', function (docContents) {
-        return clonedDocName === docContents.trim();
-      })
-
-      .url(`${baseUrl}'/'${newDatabaseName}/${newDocumentName}`)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .getText('#editor-container', function (result) {
-        const data = result.value;
-        const isCreatedDocumentPresent = data.indexOf(clonedDocName) !== -1;
-
-        this.verify.ok(
-          isCreatedDocumentPresent,
-          'check that document is correctly reloaded'
-        );
-      })
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/createsDocument.js b/app/addons/documents/tests/nightwatch/createsDocument.js
deleted file mode 100644
index 3523f9e..0000000
--- a/app/addons/documents/tests/nightwatch/createsDocument.js
+++ /dev/null
@@ -1,153 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Creates a document' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .getText('.prettyprint', function (result) {
-        const data = result.value;
-        const createdDocIsPresent = data.indexOf(newDocumentName) !== -1;
-
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  },
-
-  'Creates a _local document' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = '_local/create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-
-      // Confirm the editor loaded successfully
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-      .execute(function() {
-        /*global ace*/
-        return ace.edit("doc-editor").getValue();
-      }, function (data) {
-        const createdDocIsPresent = data.value.indexOf(newDocumentName) !== -1;
-
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  },
-
-  'Creates a Document through Create Document toolbar button': (client) => {
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'a-create_doc_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', waitTime, false)
-      .clickWhenVisible('.document-result-screen__toolbar-create-btn')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsondoc-wrapper', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,10);\
-        editor.removeWordRight();\
-        editor.insert("' + newDocumentName + '");\
-      ')
-
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForDocumentCreated(newDocumentName)
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .getText('.prettyprint', function (result) {
-        const data = result.value;
-        const createdDocIsPresent = data.indexOf(newDocumentName) !== -1;
-        this.verify.ok(
-          createdDocIsPresent,
-          'Checking if new document shows up in _all_docs.'
-        );
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js b/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js
deleted file mode 100644
index 666cea9..0000000
--- a/app/addons/documents/tests/nightwatch/createsDocumentWithoutId.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Creates a document without id' : function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="#/database/' + newDatabaseName + '/_new"]')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-
-      // confirm the header elements are showing up
-      .waitForElementVisible('.faux-header__breadcrumbs', waitTime, true)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, true)
-
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,1);\
-        editor.removeLines();\
-        editor.insert(\'"foo": "bar"\');\
-      ')
-
-      .checkForStringPresent(newDatabaseName + '/_all_docs', '"total_rows":0')
-      .clickWhenVisible('#doc-editor-actions-panel .save-doc')
-      .checkForStringPresent(newDatabaseName + '/_all_docs', '"total_rows":1')
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js b/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js
deleted file mode 100644
index a52c8da..0000000
--- a/app/addons/documents/tests/nightwatch/deleteDatabaseModal.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed 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.
-
-
-
-var helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-module.exports = {
-
-  before: function (client, done) {
-    var nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.create('_replicator', function () {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    var nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy('_replicator', function () {
-      done();
-    });
-  },
-
-  'Shows a warning for system databases (prefixed with _)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/_replicator/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .waitForElementVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .assert.elementPresent('.warning')
-      .end();
-  },
-
-  'Shows no warning for non system databases': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-trash')
-
-      .waitForElementVisible('.delete-db-modal', waitTime, false)
-      .waitForElementVisible('.delete-db-modal input[type="text"]', waitTime, false)
-      .assert.not.elementPresent('.warning')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/deletesDocuments.js b/app/addons/documents/tests/nightwatch/deletesDocuments.js
deleted file mode 100644
index fd8bc38..0000000
--- a/app/addons/documents/tests/nightwatch/deletesDocuments.js
+++ /dev/null
@@ -1,170 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Deletes a document on json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .createDocument(newDocumentName + '2', newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .checkForDocumentCreated(newDocumentName + '2')
-      .url(baseUrl)
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('label[for="checkbox-' + newDocumentName + '"]', waitTime, false)
-      .clickWhenVisible('label[for="checkbox-' + newDocumentName + '"]', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .waitForElementVisible('label[for="checkbox-' + newDocumentName + '2' + '"]', waitTime, false)
-      .clickWhenVisible('label[for="checkbox-' + newDocumentName + '2' + '"]', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName)
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName + '2')
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1,
-            createdDocumentBNotPresent = data.indexOf(newDocumentName + '2') === -1;
-
-        this.verify.ok(createdDocumentANotPresent && createdDocumentBNotPresent,
-          'Checking if new documents no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-  'Deletes a document on table/metadata view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .createDocument(newDocumentName + '2', newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .checkForDocumentCreated(newDocumentName + '2')
-      .url(baseUrl)
-      .waitForElementPresent('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#dashboard-content a[href="database/' + newDatabaseName + '/_all_docs"]', waitTime, false)
-      .clickWhenVisible('#checkbox-' + newDocumentName, waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--info', waitTime, false)
-
-      .clickWhenVisible('#checkbox-' + newDocumentName + '2', waitTime, false)
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName)
-      .checkForStringNotPresent(newDatabaseName + '/_all_docs', newDocumentName + '2')
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1,
-            createdDocumentBNotPresent = data.indexOf(newDocumentName + '2') === -1;
-
-        this.verify.ok(createdDocumentANotPresent && createdDocumentBNotPresent,
-          'Checking if new documents no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-  'Deleting a new Design Doc automatically removes it from the sidebar': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var newDatabaseName = client.globals.testDatabaseName;
-    var baseUrl = client.options.launch_url;
-    var designDoc = {
-      "_id": "_design/sidebar-update",
-      "views": {
-        "new-index": {
-          "map": "function (doc) {\n  emit(doc._id, 1);\n}"
-        }
-      },
-      "language": "javascript"
-    };
-
-    /*jshint multistr: true */
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .createDocument(designDoc._id, newDatabaseName, designDoc)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // confirm the design doc appears in the sidebar
-      .waitForElementPresent('#sidebar-content span[title="_design/sidebar-update"]', waitTime, false)
-
-      .execute('document.querySelector("div[data-id=\'_design/sidebar-update\']").scrollIntoView();')
-      .clickWhenVisible('div[data-id="_design/sidebar-update"] label[for="checkbox-_design/sidebar-update"]', waitTime, false)
-
-      .waitForElementPresent('.bulk-action-component-selector-group .fonticon-trash', waitTime, false)
-      .execute('document.querySelector(".bulk-action-component-selector-group .fonticon-trash").scrollIntoView();')
-      .clickWhenVisible('.bulk-action-component-selector-group .fonticon-trash')
-      .acceptAlert()
-
-      // now confirm it's gone
-      .waitForElementNotPresent('#sidebar-content span[title="_design/sidebar-update"]', waitTime, false)
-      .end();
-  },
-
-  'Deletes a document via Editor': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'delete_doc_doc',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName, newDatabaseName)
-      .checkForDocumentCreated(newDocumentName)
-      .loginToGUI()
-      .url(baseUrl + '#/database/' + newDatabaseName + '/' + newDocumentName)
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .clickWhenVisible('#doc-editor-actions-panel button[title="Delete"]')
-      .waitForElementVisible('.confirmation-modal', waitTime, false)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-      .waitForElementNotPresent('.confirmation-modal button.btn-primary', waitTime, true)
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-
-      //check raw JSON
-      .url(baseUrl + '/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('pre', waitTime, false)
-      .getText('pre', function (result) {
-        var data = result.value,
-            createdDocumentANotPresent = data.indexOf(newDocumentName) === -1;
-
-        this.verify.ok(createdDocumentANotPresent,
-          'Checking if new document no longer shows up in _all_docs.');
-      })
-      .end();
-  },
-
-};
diff --git a/app/addons/documents/tests/nightwatch/designConflicts.js b/app/addons/documents/tests/nightwatch/designConflicts.js
deleted file mode 100644
index 9fdeac6..0000000
--- a/app/addons/documents/tests/nightwatch/designConflicts.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed 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.
-
-
-module.exports = {
-
-  'Shows the editor for conflicting docs': function (client) {
-
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .loginToGUI()
-      .url(baseUrl + '/#/database/animaldb/_design/conflicts')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/designDocInfoPresent.js b/app/addons/documents/tests/nightwatch/designDocInfoPresent.js
deleted file mode 100644
index 62a5fed..0000000
--- a/app/addons/documents/tests/nightwatch/designDocInfoPresent.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Design Doc Metadata present' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_info')
-      .waitForElementVisible('.metadata-page', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/doubleEmitResults.js b/app/addons/documents/tests/nightwatch/doubleEmitResults.js
deleted file mode 100644
index 4c50e21..0000000
--- a/app/addons/documents/tests/nightwatch/doubleEmitResults.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'View results with same id are all shown': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var newDatabaseName = client.globals.testDatabaseName;
-    var baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.clearfix', waitTime, false)
-      .waitForElementPresent('.doc-row', waitTime, false)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 20);
-      })
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js b/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js
deleted file mode 100644
index 7b8c507..0000000
--- a/app/addons/documents/tests/nightwatch/editDocumentWithStringEditor.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Edit document field using the String Editor' : (client) => {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          newDocumentName = 'str_editor_document',
-          baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_new')
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .waitForElementPresent('.ace_gutter-active-line', waitTime, false)
-      // Move editor cursor to _id field
-      .execute('\
-        var editor = ace.edit("doc-editor");\
-        editor.gotoLine(2,4);\
-      ')
-      .clickWhenVisible('button.string-edit')
-      // Check String Editor is displayed
-      .waitForElementPresent('#string-editor-container', waitTime, false)
-      .execute('\
-        var str_editor = ace.edit("string-editor-container");\
-        console.log(str_editor);\
-        str_editor.setValue("' + newDocumentName + '");\
-      ')
-      .clickWhenVisible('#string-edit-save-btn')
-      //Check String editor is no longer visible
-      .waitForElementNotPresent('#string-editor-container', waitTime, false)
-      //Check value has changed in the maind editor
-      .waitForElementPresent('#editor-container', waitTime, false)
-      .assert.containsText('span.ace_string', '"' + newDocumentName + '"')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/editDocumentsFromView.js b/app/addons/documents/tests/nightwatch/editDocumentsFromView.js
deleted file mode 100644
index c4c9ecd..0000000
--- a/app/addons/documents/tests/nightwatch/editDocumentsFromView.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Edit is allowed from default Map Views' : function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url,
-          newDocumentName = '_design/abc',
-          ddocContents = {
-            "views": {
-              "evens": {
-                "map": "function (doc) { if (doc.number%2 === 0) { emit(doc._id, doc.number); } }",
-                "reduce" : "_count"
-              }
-            },
-            "language": "javascript"
-          };
-    client
-      .createDocument(newDocumentName, newDatabaseName, ddocContents)
-      .populateDatabase(newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/abc/_view/evens')
-      .clickWhenVisible('.fonticon-json')
-
-      //navigate to 'evens' view (declared above), then click on first document's pencil icon
-      .clickWhenVisible('a[href="#/database/' + newDatabaseName + '/document_10"]')
-      //navigated to editor
-      .waitForElementVisible('#editor-container', waitTime, false)
-      .verify.urlContains('#/database/' + newDatabaseName + '/document_10');
-  },
-
-  'Edit is not allowed for Map Views where reduce is checked' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const newDatabaseName = client.globals.testDatabaseName;
-
-    client
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/abc/_view/evens')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#query-options-tray label[for="qoReduce"]')
-      .clickWhenVisible('#button-options button[type="submit"]')
-      .waitForElementNotPresent('i.fonticon-pencil', waitTime)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/encodingSupport.js b/app/addons/documents/tests/nightwatch/encodingSupport.js
deleted file mode 100644
index fcf0c23..0000000
--- a/app/addons/documents/tests/nightwatch/encodingSupport.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-  'mango supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#mango-query', waitTime, true)
-      .waitForElementPresent('.mango-editor-wrapper', waitTime, true)
-      .end();
-  },
-
-  'permissions supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#permissions', waitTime, true)
-      .waitForElementPresent('.permissions-page', waitTime, true)
-      .end();
-  },
-
-  'changes supports encoding': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = 'encoded/db-' + client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + encodeURIComponent(newDatabaseName) + '/_all_docs')
-      .waitForElementPresent('.bulk-action-component-panel', waitTime, true)
-      .clickWhenVisible('#changes', waitTime, true)
-      .waitForElementPresent('.changes-header', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/fixRegressionTableView.js b/app/addons/documents/tests/nightwatch/fixRegressionTableView.js
deleted file mode 100644
index f9fd491..0000000
--- a/app/addons/documents/tests/nightwatch/fixRegressionTableView.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Does not crash the table view': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      .clickWhenVisible('.fonticon-pencil', client.globals.maxWaitTime, false)
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .clickWhenVisible('.fonticon-table', client.globals.maxWaitTime, false)
-      .waitForElementVisible('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .clickWhenVisible('td[title=\'bulktest1\'', client.globals.maxWaitTime, false)
-      .waitForElementVisible('#doc-editor-actions-panel', client.globals.maxWaitTime, false)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/jsonView.js b/app/addons/documents/tests/nightwatch/jsonView.js
deleted file mode 100644
index 7fdb28c..0000000
--- a/app/addons/documents/tests/nightwatch/jsonView.js
+++ /dev/null
@@ -1,30 +0,0 @@
-module.exports = {
-
-  'Doc results: check ?include_docs=true returns doc content': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName = 'bitterns',
-        waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    var docContent = {
-      "species": "American Bittern",
-      "seen_general": "not as often as I'd like",
-      "seen_this_year": "*sigh*, no."
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-
-      .url(baseUrl + '#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.doc-item', client.globals.maxWaitTime, false)
-      // by default include_docs is on, so check "American Bittern" does exist in the DOM
-      .waitForElementPresent('.prettyprint', client.globals.maxWaitTime, false)
-      .assert.containsText('.prettyprint', 'American Bittern')
-      .end();
-  }
-};
-
diff --git a/app/addons/documents/tests/nightwatch/mangoIndex.js b/app/addons/documents/tests/nightwatch/mangoIndex.js
deleted file mode 100644
index 7d9b791..0000000
--- a/app/addons/documents/tests/nightwatch/mangoIndex.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Creating new indexes with mango (mangoIndex.js)': function (client) {
-    /*jshint multistr: true */
-
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .execute('\
-        var json = \'{\
-          "index": {\
-            "fields": ["gans_gans_mango"]\
-          },\
-          "name": "rocko-artischocko",\
-          "type" : "json"\
-        }\';\
-        var editor = ace.edit("query-field");\
-        editor.getSession().setValue(json);\
-      ')
-      .clickWhenVisible('#create-index-btn')
-      .checkForStringPresent(newDatabaseName + '/_index', 'rocko-artischocko')
-      .checkForStringPresent(newDatabaseName + '/_index', 'gans_gans_mango')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'gans_gans_mango')
-      .end();
-  },
-
-  'Deleting new named indexes with mango': function (client) {
-    var waitTime = 10000,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .waitForElementPresent('#doc-list', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'ente_ente_mango_ananas')
-      .clickWhenVisible('.bulk-action-component-panel input[type="checkbox"]')
-      .clickWhenVisible('.bulk-action-component-selector-group button.fonticon-trash', waitTime, false)
-      .acceptAlert()
-
-      .checkForStringNotPresent(newDatabaseName + '/_index', '"name":"rocko-artischocko"')
-      .checkForStringNotPresent(newDatabaseName + '/_index', 'gans_gans_mango')
-      .getText('body', function (result) {
-        var data = result.value;
-
-        this.verify.ok(data.indexOf('ente_ente_mango_ananas') === -1,
-          'Checking if documents were deleted');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/mangoQuery.js b/app/addons/documents/tests/nightwatch/mangoQuery.js
deleted file mode 100644
index dc9054b..0000000
--- a/app/addons/documents/tests/nightwatch/mangoQuery.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Finding things with mango': function (client) {
-    /*jshint multistr: true */
-    var waitTime = 10000,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#database/' + newDatabaseName + '/_find')
-      .waitForElementPresent('.watermark-logo', waitTime, false)
-      .execute('\
-        var json = \'{\
-          "selector": {\
-            "ente_ente_mango_ananas": {"$gt": null}\
-          }\
-        }\';\
-        var editor = ace.edit("query-field");\
-        editor.getSession().setValue(json);\
-      ')
-      .clickWhenVisible('#create-index-btn')
-      .clickWhenVisible('.fonticon-json')
-
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('#dashboard-lower-content', 'number')
-      .assert.containsText('#dashboard-lower-content', 'ente_ente_mango_ananas_res')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js b/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js
deleted file mode 100644
index df3b30b..0000000
--- a/app/addons/documents/tests/nightwatch/navigateAfterEditingDocShouldShowAConfirmationBox.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Navigate to New Doc Page, editing and then clicking on the sidebar should show a confirmation dialog': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var newLink = '#/database/' + newDatabaseName + '/_new';
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="' + newLink + '"]')
-      .waitForElementPresent('.code-region', waitTime, false)
-      .verify.urlEquals(baseUrl + '/' + newLink)
-
-      .keys(['.ace_variable', 'v'])
-      .clickWhenVisible('a[href="#/activetasks"]')
-      .acceptAlert()
-      .verify.urlEquals(baseUrl + '/#/activetasks');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js b/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js
deleted file mode 100644
index a65f93d..0000000
--- a/app/addons/documents/tests/nightwatch/navigateFromNewDoc.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  // this tests that the user is able to just navigate to and from the New View page without errors [it confirms
-  // a bug fix for where the Ace Editor threw a JS error preventing the subsequent page from loading]
-  'Navigate to and from New Doc Page' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var newLink = '/#/database/' + newDatabaseName + '/_new';
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#new-all-docs-button a')
-      .clickWhenVisible('#new-all-docs-button a[href="' + newLink.replace("/", "") + '"]')
-      .waitForElementPresent('.code-region', waitTime, false)
-      .verify.urlEquals(baseUrl + newLink)
-
-      // now redirect back to the all docs page and check it's loaded properly
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .verify.urlEquals(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js b/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js
deleted file mode 100644
index 802ef3b..0000000
--- a/app/addons/documents/tests/nightwatch/navigateNotFoundDB.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  // this tests that the user is able to just navigate to and from the New View page without errors [it confirms
-  // a bug fix for where the Ace Editor threw a JS error preventing the subsequent page from loading]
-  'Navigate to a database that does not exist' : function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/does-not-exist/_all_docs')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      // We wait for the first toasts to be cleared
-      .pause(1000)
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--error', waitTime, false)
-      .assert.containsText('.Toastify__toast-container .Toastify__toast--error .Toastify__toast-body', 'does not exist')
-      .verify.urlEquals(baseUrl + '/#');
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/paginateAllDocs.js b/app/addons/documents/tests/nightwatch/paginateAllDocs.js
deleted file mode 100644
index 9455e1f..0000000
--- a/app/addons/documents/tests/nightwatch/paginateAllDocs.js
+++ /dev/null
@@ -1,140 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'change number of items per page': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      // ensures the select dropdown is rendered
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // hack to get select working by clicking on it and using keyboard to select
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .waitForElementPresent('.doc-row', waitTime, false)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 10);
-      })
-      .end();
-  },
-
-  'paginate to page two and back': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'PerPage change resets to page 1': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'paginate to page two and switch to json view': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // ensures the main body (results list) has been rendered
-      .waitForElementPresent('.table-view-docs', waitTime)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('td[title="document_16"]', waitTime)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementPresent('td[title="document_17"]', waitTime)
-
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('div[data-id="document_17"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/paginateView.js b/app/addons/documents/tests/nightwatch/paginateView.js
deleted file mode 100644
index 7fe5250..0000000
--- a/app/addons/documents/tests/nightwatch/paginateView.js
+++ /dev/null
@@ -1,163 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'change number of items per page': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .waitForElementPresent('#select-per-page', waitTime, false)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // hack to get select working by clicking on it and using keyboard to select
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_9"]', waitTime)
-      .execute(function () {
-        return document.querySelectorAll('.doc-row').length;
-      }, function (result) {
-        client.assert.equal(result.value, 10);
-      })
-      .end();
-  },
-
-  'paginate to page two and back': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_19"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_19"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'PerPage change resets to page 1': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-
-  'paginate to page two and switch to json view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // wait for the db page to fully load
-      .waitForElementVisible('#dashboard-content table.databases', waitTime, false)
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .waitForElementPresent('.control-toggle-queryoptions', waitTime, false)
-
-      // ensure the page content has loaded
-      .waitForElementPresent('.table-view-docs', waitTime)
-
-      .clickWhenVisible('#select-per-page', waitTime, false)
-
-      // http://www.w3.org/TR/2012/WD-webdriver-20120710/
-      .keys(['\uE013', '\uE006'])
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('#next', waitTime, false)
-      .clickWhenVisible('#next', waitTime, false)
-      .waitForElementNotPresent('td[title="document_1"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('td[title="document_19"]', waitTime)
-
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('div[data-id="document_19"]', waitTime)
-      .clickWhenVisible('#previous', waitTime, false)
-      .waitForElementNotPresent('div[data-id="document_19"]', waitTime)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('div[data-id="document_1"]', waitTime)
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/previousButton.js b/app/addons/documents/tests/nightwatch/previousButton.js
deleted file mode 100644
index 6b70d78..0000000
--- a/app/addons/documents/tests/nightwatch/previousButton.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-  'Mango: Navigate back to _all_docs': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_index')
-      .clickWhenVisible('.faux-header__breadcrumbs-link')
-      .assert.urlContains('_all_docs')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/queryOptions.js b/app/addons/documents/tests/nightwatch/queryOptions.js
deleted file mode 100644
index e0cb801..0000000
--- a/app/addons/documents/tests/nightwatch/queryOptions.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Query Options: check startkey filters properly': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#betweenKeys', waitTime, false)
-      .setValue('#startkey', '"document_2"')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('#doc-list [data-id="document_1"]', waitTime, false)
-      .waitForElementPresent('#doc-list [data-id="document_2"]', waitTime, false)
-      .assert.elementPresent('#doc-list [data-id="document_2"]')
-      .waitForElementPresent('#doc-list [data-id="document_3"]', waitTime, false)
-      .assert.elementPresent('#doc-list [data-id="document_3"]')
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js b/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js
deleted file mode 100644
index 8fd4ce2..0000000
--- a/app/addons/documents/tests/nightwatch/queryOptionsCloseBug.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Query Options: close if opened / closed multiple times': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#betweenKeys', waitTime, false)
-      .setValue('#startkey', '"document_2"')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementNotPresent('#doc-list [data-id="document_1"]', waitTime, false)
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('.query-options .btn-cancelDark')
-
-      .waitForElementNotPresent('.query-options .js-view-query-update', waitTime, false)
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js b/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js
deleted file mode 100644
index e13cd45..0000000
--- a/app/addons/documents/tests/nightwatch/replicateDatabaseButton.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed 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.
-
-
-const helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-const testDbName = 'test_database';
-module.exports = {
-  before: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.create(testDbName, function () {
-      done();
-    });
-  },
-
-  after: function (client, done) {
-    const nano = helpers.getNanoInstance(client.options.db_url);
-    nano.db.destroy(testDbName, function () {
-      done();
-    });
-  },
-
-  'Shows correct view on replicate database': function (client) {
-    const waitTime = client.globals.maxWaitTime,
-          baseUrl = client.options.launch_url;
-    const srcDbSelector = '.replication__page .replication__section:nth-child(3) .replication__input-react-select .Select-value-label';
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + testDbName + '/_all_docs')
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper .fonticon-replicate')
-
-      //Wait for replication page to show up
-      .waitForElementVisible('.replication__page', waitTime, false)
-
-      //Wait for source select to show
-      .waitForElementVisible(srcDbSelector, waitTime, false)
-
-      //Get the text values
-      .getText(srcDbSelector, function (data) {
-        this.verify.ok(data.value === testDbName,
-          'Check if database name is filled in source name');
-      })
-      .end();
-  }
-};
-
diff --git a/app/addons/documents/tests/nightwatch/resultsToolbar.js b/app/addons/documents/tests/nightwatch/resultsToolbar.js
deleted file mode 100644
index 74c2e0f..0000000
--- a/app/addons/documents/tests/nightwatch/resultsToolbar.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-  'Defaults to metadata layout when displaying results': (client) => {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-    const newDocumentName = 'resultsToolbarTest';
-    const docContent = {
-      "foo": "bar"
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-
-      .url(`${baseUrl}#/database/${newDatabaseName}/_all_docs`)
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-      .assert.not.elementPresent('.table-container-autocomplete')
-      .end();
-  },
-
-  'Layouts update on manual url change/refresh and query options': (client) => {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-    const newDocumentName = 'resultsToolbarTest';
-    const docContent = {
-      "foo": "bar"
-    };
-
-    client
-      .createDocument(newDocumentName, newDatabaseName, docContent)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName)
-      .url(`${baseUrl}#/database/${newDatabaseName}/_all_docs`)
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-
-      // turn include_docs on through query options
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .waitForElementPresent('#qoIncludeDocsLabel', waitTime, false)
-      .clickWhenVisible('#qoIncludeDocsLabel')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Table')
-
-      // switch to json view and then turn off include_docs
-      .clickWhenVisible('.fonticon-json')
-      .assert.containsText('.two-sides-toggle-button button.active', 'JSON')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .waitForElementPresent('#qoIncludeDocsLabel', waitTime, false)
-      .assert.attributeEquals('#qoIncludeDocs', 'checked', 'true')
-      .clickWhenVisible('#qoIncludeDocsLabel')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .waitForElementPresent('.two-sides-toggle-button', waitTime, false)
-      .assert.containsText('.two-sides-toggle-button button.active', 'Metadata')
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/revBrowser.js b/app/addons/documents/tests/nightwatch/revBrowser.js
deleted file mode 100644
index bc0f363..0000000
--- a/app/addons/documents/tests/nightwatch/revBrowser.js
+++ /dev/null
@@ -1,108 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'is able to show two docs next to each other, and diff them' : function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = 'animaldb';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .checkForDocumentCreated('zebra', null, newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/zebra')
-
-      .clickWhenVisible('button.conflicts')
-
-      .waitForElementVisible('.revision-diff-area', waitTime, false)
-
-      .assert.containsText('.revision-diff-area', '"black & white"')
-      .assert.containsText('.revision-diff-area', '"white"')
-
-      .clickWhenVisible('.two-sides-toggle-button button:last-child')
-
-      .waitForElementVisible('.revision-split-area', waitTime, false)
-
-      .assert.containsText('.revision-split-area [data-id="ours"]', '"black & white"')
-      .assert.containsText('.revision-split-area [data-id="theirs"]', '"white"')
-
-
-      .clickWhenVisible('[data-id="button-select-theirs"]')
-      .clickWhenVisible('.modal-footer input[type="checkbox"]')
-      .clickWhenVisible('.modal-footer button.btn-danger')
-      .clickWhenVisible('.fonticon-json')
-
-      .clickWhenVisible('[data-id="zebra"] a')
-
-      .waitForElementVisible('.panel-section', waitTime, false)
-      .assert.not.elementPresent('button.conflicts')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '?include_docs=true&conflicts=true')
-
-      .getText('body', function (result) {
-        this.verify.ok(result.value.indexOf('"color": "white"') !== -1, 'check if doc version was promoted');
-      })
-
-      .end();
-  },
-  'is able to show two design docs next to each other, and diff them' : function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = 'animaldb';
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createAnimalDb()
-      .checkForDocumentCreated('_design/animals', null, newDatabaseName)
-
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/animals')
-
-      .clickWhenVisible('button.conflicts')
-
-      .waitForElementVisible('.revision-diff-area', waitTime, false)
-
-      .assert.containsText('.revision-diff-area', '"black & white"')
-      .assert.containsText('.revision-diff-area', '"white"')
-
-      .clickWhenVisible('.two-sides-toggle-button button:last-child')
-
-      .waitForElementVisible('.revision-split-area', waitTime, false)
-
-      .assert.containsText('.revision-split-area [data-id="ours"]', '"black & white"')
-      .assert.containsText('.revision-split-area [data-id="theirs"]', '"white"')
-
-
-      .clickWhenVisible('[data-id="button-select-theirs"]')
-      .clickWhenVisible('.modal-footer input[type="checkbox"]')
-      .clickWhenVisible('.modal-footer button.btn-danger')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotVisible('.Toastify__toast-container .Toastify__toast', waitTime, false)
-      .clickWhenVisible('[data-id="_design/animals"] a')
-
-      .waitForElementVisible('.panel-section', waitTime, false)
-      .assert.not.elementPresent('button.conflicts')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '?include_docs=true&conflicts=true')
-
-      .getText('body', function (result) {
-        this.verify.ok(result.value.indexOf('"color": "white"') !== -1, 'check if doc version was promoted');
-      })
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js b/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js
deleted file mode 100644
index b96340d..0000000
--- a/app/addons/documents/tests/nightwatch/selectDocViaTypeahead.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Select doc via typeahead field redirects user': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-      .keys(['\uE00C'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('.documents-pagination', waitTime, false)
-      .setValue('.jump-to-doc .Select-input input', ['_des'])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys(['\uE015', '\uE015', '\uE006'])
-      .waitForElementPresent('.panel-button.upload', waitTime, false)
-      .end();
-  },
-
-  'Select doc works for capitalised id': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument('MY_CAP_DOC_ID', newDatabaseName, {value: 2})
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.jump-to-doc', waitTime, false)
-      .keys(['\uE00C'])
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .waitForElementPresent('.documents-pagination', waitTime, false)
-      .setValue('.jump-to-doc .Select-input input', ['MY_CAP'])
-      .waitForElementPresent('.Select-option', waitTime, false)
-      .keys(['\uE015', '\uE015', '\uE006'])
-      .waitForElementPresent('.panel-button.upload', waitTime, false)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/tableView.js b/app/addons/documents/tests/nightwatch/tableView.js
deleted file mode 100644
index a5d3201..0000000
--- a/app/addons/documents/tests/nightwatch/tableView.js
+++ /dev/null
@@ -1,79 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Shows data in the full table for all docs (include docs enabled)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.fonticon-table')
-
-      .waitForElementVisible('.tableview-checkbox-cell', waitTime, false)
-      .waitForElementVisible('.table', waitTime, false)
-      .getText('.table', function (result) {
-        var data = result.value;
-
-        if (!data.indexOf) {
-          console.error('check your selenium test, race condition');
-        }
-
-        this.verify.ok(data.indexOf('testingValue') !== -1,
-          'Check if doc content is shown in table');
-      })
-
-      .end();
-  },
-
-  'Shows data in the metadata table for all docs (include docs disabled)': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        newDocumentName1 = 'bulktest1',
-        newDocumentName2 = 'bulktest2',
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDocument(newDocumentName1, newDatabaseName)
-      .createDocument(newDocumentName2, newDatabaseName)
-      .loginToGUI()
-      .checkForDocumentCreated(newDocumentName1)
-      .checkForDocumentCreated(newDocumentName2)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .assert.containsText('button.active', 'Metadata')
-      .waitForElementVisible('.tableview-checkbox-cell', waitTime, false)
-      .waitForElementVisible('.table', waitTime, false)
-      .getText('.table', function (result) {
-        var data = result.value;
-
-        if (!data.indexOf) {
-          console.error('check your selenium test, race condition');
-        }
-
-        this.verify.ok(data.indexOf('bulktest1') !== -1,
-          'Check if doc content is shown in table');
-      })
-
-      .end();
-  },
-};
diff --git a/app/addons/documents/tests/nightwatch/tableViewConflicts.js b/app/addons/documents/tests/nightwatch/tableViewConflicts.js
deleted file mode 100644
index 2c994a6..0000000
--- a/app/addons/documents/tests/nightwatch/tableViewConflicts.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Shows how many conflicts have appeared': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabaseWithConflicts(newDatabaseName)
-      .checkForDocumentCreated('outfit1')
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      .clickWhenVisible('.fonticon-table')
-      .waitForElementVisible('.table', waitTime, false)
-
-      .waitForElementVisible('.table-container-autocomplete', waitTime, false)
-      .waitForElementVisible('.tableview-conflict', waitTime, false)
-
-      .assert.visible('.table [data-conflicts-indicator="true"]')
-
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewClone.js b/app/addons/documents/tests/nightwatch/viewClone.js
deleted file mode 100644
index 1d6bbff..0000000
--- a/app/addons/documents/tests/nightwatch/viewClone.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-
-  'Clones a view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('.prettyprint', 'stub')
-      .clickWhenVisible('.index-list .active span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-files-o', waitTime, true)
-      .waitForElementVisible('#new-index-name', waitTime, true)
-      .setValue('#new-index-name', 'cloned-view')
-      .clickWhenVisible('.clone-index-modal .btn-primary', waitTime, true)
-
-      // now wait for the sidebar to be updated with the new view
-      .waitForElementVisible('#testdesigndoc_cloned-view', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewCreate.js b/app/addons/documents/tests/nightwatch/viewCreate.js
deleted file mode 100644
index aa83f64..0000000
--- a/app/addons/documents/tests/nightwatch/viewCreate.js
+++ /dev/null
@@ -1,141 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-
-  'creates design docs with js hint errors': function (client) {
-    const waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-0')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'furbie')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { if (doc != \'\') { emit(\'blerg\'); } else { emit(\'nana\'); }  }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-0')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="blerg"]', 'blerg')
-      .end();
-  },
-
-  'Creates a Design Doc using the dropdown at "all documents"': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-1')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase\'); }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-1')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="hasehase"]', 'hasehase')
-      .end();
-  },
-
-  'Creates a Design Doc and does not crash after navigating': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-3')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase\'); }");\
-      ')
-      .clickWhenVisible('#save-view', waitTime)
-      .checkForDocumentCreated('_design/test_design_doc-selenium-3')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // page now automatically redirects user to results of View. Confirm the new doc is present.
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="hasehase"]', 'hasehase')
-      .end();
-  },
-
-  'Creates a Design Doc using the dropdown at "the upper dropdown in the header"': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-
-    /*jshint multistr: true */
-    openDifferentDropdownsAndClick(client)
-      .waitForElementPresent('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-2')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'gaenseindex')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'gansgans\'); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/test_design_doc-selenium-2')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="gansgans"]', 'gansgans')
-      .end();
-  },
-
-  'Adds a View to a DDoc using an existing DDoc': function (client) {
-    var waitTime = client.globals.maxWaitTime;
-    var baseUrl = client.options.launch_url;
-    var newDatabaseName = client.globals.testDatabaseName;
-    /*jshint multistr: true */
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('#sidebar-tab-testdesigndoc a.dropdown-toggle.icon.fonticon-plus-circled', waitTime, false)
-      .clickWhenVisible('#sidebar-tab-testdesigndoc a[href*="new_view"]', waitTime, false)
-      .waitForElementVisible('#index-name', waitTime, false)
-      .clearValue('#index-name')
-      .setValue('#index-name', 'test-new-view')
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'enteente\', 1); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/testdesigndoc/_view/test-new-view')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .waitForElementPresent('.table-view-docs', waitTime, false)
-      .assert.containsText('td[title="enteente"]', 'enteente')
-      .end();
-  }
-};
-
-function openDifferentDropdownsAndClick (client) {
-  var waitTime = client.globals.maxWaitTime;
-  var newDatabaseName = client.globals.testDatabaseName;
-  var baseUrl = client.options.launch_url;
-
-  return client
-    .loginToGUI()
-    .populateDatabase(newDatabaseName)
-    .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-    .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-    .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-    .waitForElementPresent('.index-cancel-link', waitTime, false);
-}
diff --git a/app/addons/documents/tests/nightwatch/viewCreateBadView.js b/app/addons/documents/tests/nightwatch/viewCreateBadView.js
deleted file mode 100644
index ddac11c..0000000
--- a/app/addons/documents/tests/nightwatch/viewCreateBadView.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Displays an error if reduce is not possible': function (client) {
-    /*jshint multistr: true */
-    const waitTime = client.globals.maxWaitTime,
-          newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test_design_doc-selenium-bad-reduce')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'boom\', doc._id); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .closeNotifications()
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('label[for="qoReduce"]', waitTime, false)
-      .clickWhenVisible('.query-options .btn-secondary', waitTime, false)
-      .waitForElementVisible('div.table-view-docs', waitTime, false)
-      .waitForAttribute('.table-view-docs td:nth-child(4)', 'title', function (docContents) {
-        return (/_sum function requires/).test(docContents);
-      })
-      .end();
-  },
-
-  'Visit url of broken view displays error': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url,
-          waitTime = client.globals.maxWaitTime;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/brokenview/_view/brokenview')
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('label[for="qoReduce"]', waitTime, false)
-      .clickWhenVisible('.query-options .btn-secondary', waitTime, false)
-      .waitForElementVisible('div.table-view-docs', waitTime, false)
-      .waitForAttribute('.table-view-docs td:nth-child(4)', 'title', function (docContents) {
-        return (/_sum function requires/).test(docContents);
-      })
-      .end();
-  }
-
-
-};
diff --git a/app/addons/documents/tests/nightwatch/viewDelete.js b/app/addons/documents/tests/nightwatch/viewDelete.js
deleted file mode 100644
index 4959db4..0000000
--- a/app/addons/documents/tests/nightwatch/viewDelete.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Deletes a view': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-      .assert.containsText('.prettyprint', 'stub')
-
-      // confirm the sidebar shows the testdesigndoc design doc
-      .waitForElementVisible('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .clickWhenVisible('.index-list .active span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .clickWhenVisible('.confirmation-modal button.btn-primary', waitTime, true)
-      .waitForElementNotPresent('.confirmation-modal button.btn-primary', waitTime, true)
-
-      // now wait for the sidebar to have removed the design doc
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/documents/tests/nightwatch/viewEdit.js b/app/addons/documents/tests/nightwatch/viewEdit.js
deleted file mode 100644
index 0032e00..0000000
--- a/app/addons/documents/tests/nightwatch/viewEdit.js
+++ /dev/null
@@ -1,236 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-
-  'Edits a design doc - renames index': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#index-name', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForAttribute('#index-name', 'value', function (val) {
-        return val === 'stubview';
-      })
-      .clearValue('#index-name')
-      .setValue('#index-name', 'hasenindex5000')
-
-      .clickWhenVisible('#save-view')
-
-      // confirm the new index name is present
-      .waitForElementVisible('#testdesigndoc_hasenindex5000', waitTime, false)
-      .end();
-  },
-
-  'Edits a design doc': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var viewUrl = newDatabaseName + '/_design/testdesigndoc/_view/stubview?limit=6&reduce=false';
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#index-name', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForAttribute('#index-name', 'value', function (val) {
-        return val === 'stubview';
-      })
-
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(\'hasehase6000\', 1); }");\
-        editor._emit(\'blur\');\
-      ')
-      .clickWhenVisible('#save-view')
-
-      .checkForStringPresent(viewUrl, 'hasehase6000')
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-      .waitForAttribute('#doc-list', 'textContent', function (docContents) {
-        return (/hasehase6000/).test(docContents);
-      })
-      .end();
-  },
-
-  'Edits two design docs to confirm Map Editor correct on second': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // create the first view
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'view1-name')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'view1')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(doc._id, 100); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/view1-name')
-
-      // create the second view
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .closeNotifications()
-
-      .clickWhenVisible('.faux-header__doc-header-dropdown-toggle')
-      .clickWhenVisible('.faux-header__doc-header-dropdown-itemwrapper a[href*="new_view"]')
-
-      .waitForElementPresent('.index-cancel-link', waitTime, false)
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .setValue('#new-ddoc', 'view2-name')
-      .clearValue('#index-name')
-      .setValue('#index-name', 'view2')
-      .clickWhenVisible('#reduce-function-selector')
-      .keys(['\uE013', '\uE013', '\uE013', '\uE013', '\uE006'])
-      .execute('\
-        var editor = ace.edit("map-function");\
-        editor.getSession().setValue("function (doc) { emit(doc._id, 200); }");\
-      ')
-      .clickWhenVisible('#save-view')
-      .checkForDocumentCreated('_design/view2-name')
-
-      // now redirect back to first view and confirm the fields are all populated properly
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/view1-name/_view/view1/edit')
-
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-      .waitForElementVisible('#save-view', waitTime, false)
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .execute(function () {
-        var editor = window.ace.edit("map-function");
-        return editor.getSession().getValue();
-      }, [], function (resp) {
-        this.assert.equal(resp.value, 'function (doc) { emit(doc._id, 100); }');
-      })
-      .end();
-  },
-
-  'Editing a view and putting it into a new design doc removes it from the old design doc': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .deleteDatabase(newDatabaseName)
-      .createDatabase(newDatabaseName)
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementPresent('.prettyprint', waitTime, false)
-
-      // confirm the sidebar shows the testdesigndoc design doc
-      .waitForElementVisible('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      // now edit the view and move it into a brand new design doc
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/testdesigndoc/_view/stubview/edit')
-      .waitForElementPresent('.faux-header__doc-header-title', waitTime, false)
-      .waitForAttribute('.faux-header__doc-header-title', 'textContent', function (docContents) {
-        var regExp = new RegExp(newDatabaseName);
-        return regExp.test(docContents);
-      })
-
-      .waitForElementPresent('.index-cancel-link', waitTime, true)
-      .waitForElementVisible('.styled-select select', waitTime, true)
-      .waitForElementNotPresent('.loading-lines', waitTime, true)
-
-      .setValue('.styled-select select', 'new-doc')
-
-      // needed to get React to update + show the new design doc field
-      .click('body')
-
-      .waitForElementPresent('#new-ddoc', waitTime, true)
-      .execute('document.querySelector("#new-ddoc").scrollIntoView();')
-      .setValue('#new-ddoc', 'brand-new-ddoc')
-      .clickWhenVisible('#save-view')
-
-      // now wait for the old design doc to be gone, and the new one to have shown up
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .waitForElementPresent('#design-doc-menu-brand-new-ddoc', waitTime, true)
-      .end();
-  }
-
-};
diff --git a/app/addons/documents/tests/nightwatch/viewQueryOptions.js b/app/addons/documents/tests/nightwatch/viewQueryOptions.js
deleted file mode 100644
index 75743ef..0000000
--- a/app/addons/documents/tests/nightwatch/viewQueryOptions.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Edit view: Queryoptions work': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.control-toggle-queryoptions')
-      .clickWhenVisible('#byKeys', waitTime, false)
-      .setValue('#keys-input', '["document_1"]')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('#doc-list [data-id="document_2"]', waitTime, false)
-      .assert.not.elementPresent('#doc-list [data-id="document_2"]')
-      .assert.not.elementPresent('#doc-list [data-id="document_0"]')
-      .assert.elementPresent('#doc-list [data-id="document_1"]')
-      .end();
-  },
-
-  'Edit view: Queryoptions works querying index with newlines in key field': function (client) {
-    /*jshint multistr: true */
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName, 3)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_design/keyview/_view/keyview')
-      .clickWhenVisible('.control-toggle-queryoptions', waitTime, false)
-      .clickWhenVisible('#byKeys', waitTime, false)
-      .setValue('#keys-input', '["document_1",\n"document_2"]')
-      .clickWhenVisible('.query-options .btn-secondary')
-      .clickWhenVisible('.fonticon-json')
-      .waitForElementNotPresent('#doc-list [data-id="document_0"]', waitTime, false)
-      .assert.not.elementPresent('#doc-list [data-id="document_0"]')
-      .assert.elementPresent('#doc-list [data-id="document_1"]')
-      .end();
-  }
-
-};
diff --git a/app/addons/fauxton/__tests__/components.test.js b/app/addons/fauxton/__tests__/components.test.js
deleted file mode 100644
index a181353..0000000
--- a/app/addons/fauxton/__tests__/components.test.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-import Views from "../components";
-import React from "react";
-import {mount} from 'enzyme';
-import sinon from "sinon";
-
-describe('Pagination', () => {
-
-  it('renders 20-wise pages per default', () => {
-    const pageEl = mount(
-      <Views.Pagination page={3} total={55} urlPrefix="?prefix=" urlSuffix="&suffix=88" />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 3 + 1).toBe(lis.length);
-    expect(lis.first().hasClass("disabled")).toBeFalsy();
-    expect(lis.at(1).hasClass("class")).toBeFalsy();
-    expect(lis.at(2).hasClass("class")).toBeFalsy();
-    expect(lis.at(3).hasClass("active")).toBeTruthy();
-    expect(lis.at(4).hasClass("disabled")).toBeTruthy();
-    expect("2").toBe(lis.at(2).text());
-    expect("?prefix=2&suffix=88").toBe(lis.at(2).find("a").prop("href"));
-  });
-
-  it("can overwrite collection size", () => {
-    const pageEl = mount(
-      <Views.Pagination perPage={10} page={3} total={55} urlPrefix="?prefix=" urlSuffix="&suffix=88" />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 6 + 1).toBe(lis.length);
-  });
-
-  it("handles large collections properly - beginning", () => {
-    const pageEl = mount(
-      <Views.Pagination page={3} total={600} />,
-    );
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(3).hasClass("active")).toBeTruthy();
-    expect("3").toBe(lis.at(3).text());
-    expect("7").toBe(lis.at(7).text());
-    expect("10").toBe(lis.at(10).text());
-  });
-
-  it("handles large collections properly - middle", () => {
-    const pageEl = mount(
-      <Views.Pagination page={10} total={600} />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(6).hasClass("active")).toBeTruthy();
-    expect("7").toBe(lis.at(3).text());
-    expect("11").toBe(lis.at(7).text());
-    expect("14").toBe(lis.at(10).text());
-  });
-
-  it("handles large collections properly - end", () => {
-    const pageEl = mount(
-      <Views.Pagination page={29} total={600} />
-    );
-
-    const lis = pageEl.find('li');
-    expect(1 + 10 + 1).toBe(lis.length);
-    expect(lis.at(9).hasClass("active")).toBeTruthy();
-    expect("23").toBe(lis.at(3).text());
-    expect("27").toBe(lis.at(7).text());
-    expect("30").toBe(lis.at(10).text());
-  });
-
-  it('limits the number of total pages when customized', () => {
-    var maxNavPages = 15;
-    const pageEl = mount(
-      <Views.Pagination page={1} total={1000} maxNavPages={maxNavPages} />
-    );
-    const lis = pageEl.find('li');
-    expect(1 + maxNavPages + 1).toBe(lis.length);
-  });
-
-  it('calls callback method when supplied', () => {
-    var spy = sinon.spy();
-    const pageEl = mount(
-      <Views.Pagination page={1} total={100} onClick={spy} />
-    );
-    var links = pageEl.find('a');
-
-    links.at(3).simulate('click');
-
-    // confirm it gets called
-    expect(spy.calledOnce).toBeTruthy();
-
-    // confirm it's called with the pagination number (3)
-    expect(spy.calledWith(3)).toBeTruthy();
-  });
-
-  it('calls callback method with correct values for prev and next', () => {
-    var spy = sinon.spy();
-
-    var currentPage = 5;
-    const pageEl = mount(
-      <Views.Pagination page={currentPage} total={200} onClick={spy} />
-    );
-    var links = pageEl.find("a");
-
-    links.first().simulate('click');
-    expect(spy.calledWith(currentPage - 1)).toBeTruthy();
-
-    links.at(11).simulate('click');
-    expect(spy.calledWith(currentPage + 1)).toBeTruthy();
-  });
-
-});
diff --git a/app/addons/fauxton/appwrapper.js b/app/addons/fauxton/appwrapper.js
deleted file mode 100644
index 77cbca3..0000000
--- a/app/addons/fauxton/appwrapper.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import { connect } from 'react-redux';
-import NotificationPanelContainer from './notifications/components/NotificationPanelContainer';
-import PermanentNotificationContainer from './notifications/components/PermanentNotificationContainer';
-import NavBar from './navigation/container/NavBar';
-import * as NavbarActions from './navigation/actions';
-import classNames from 'classnames';
-import {toast, ToastContainer} from "react-toastify";
-
-
-class ContentWrapper extends React.Component {
-  constructor(props) {
-    super(props);
-    this.state = {
-      routerOptions: props.router.currentRouteOptions
-    };
-
-    if (props.router.currentRouteOptions && props.router.currentRouteOptions.selectedHeader) {
-      this.props.setNavbarActiveLink(this.state.routerOptions.selectedHeader);
-    }
-  }
-
-  onKeydown = e => {
-    const code = e.keyCode || e.which;
-    if (code === 27) {
-      toast.dismiss();
-    }
-  };
-
-  componentDidMount () {
-    this.props.router.on('new-component', (routerOptions) => {
-      this.setState({routerOptions});
-      this.props.setNavbarActiveLink(this.state.routerOptions.selectedHeader);
-    });
-
-    this.props.router.on('trigger-update', () => {
-      this.forceUpdate();
-    });
-
-    document.addEventListener('keydown', this.onKeydown);
-  }
-
-  componentWillUnmount() {
-    document.removeEventListener('keydown', this.onKeydown);
-  }
-
-  render () {
-    if (!this.state.routerOptions) {
-      return null;
-    }
-
-    const {component} = this.state.routerOptions;
-    if (!component) {return null;}
-    return component;
-  }
-}
-
-class App extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  render () {
-    const mainClass = classNames(
-      {'closeMenu': this.props.isPrimaryNavMinimized}
-    );
-    return (
-      <div>
-        <ToastContainer
-          className='toast-container'
-          position="top-right"
-          autoClose={5000}
-          closeButton={false}
-          hideProgressBar
-          newestOnTop={false}
-          closeOnClick
-          rtl={false}
-          pauseOnFocusLoss
-          draggable
-          pauseOnHover
-        />
-        <PermanentNotificationContainer/>
-        <div id="notifications">
-          <NotificationPanelContainer />
-        </div>
-        <div id="main"  className={mainClass}>
-          <div id="app-container">
-            <div className="wrapper">
-              <div role="main" className="pusher">
-                <ContentWrapper router={this.props.router} setNavbarActiveLink={this.props.setNavbarActiveLink}/>
-              </div>
-              <div id="primary-navbar">
-                <NavBar/>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-export default connect(
-  ({ navigation }) => {
-    return {
-      isPrimaryNavMinimized: navigation.isMinimized};
-  },
-  (dispatch) => {
-    return {
-      setNavbarActiveLink: (link) => { dispatch(NavbarActions.setNavbarActiveLink(link)); }
-    };
-  }
-)(App);
diff --git a/app/addons/fauxton/assets/less/components.less b/app/addons/fauxton/assets/less/components.less
deleted file mode 100644
index 26a0229..0000000
--- a/app/addons/fauxton/assets/less/components.less
+++ /dev/null
@@ -1,66 +0,0 @@
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/bootstrap/variables.less";
-@import "../../../../../assets/less/bootstrap/mixins.less";
-
-.api-bar-tray {
-  padding: 16px 20px;
-
-  input[type="text"].text-field-to-copy {
-    .border-radius(5px 0 0 5px);
-  }
-  .input-append.input-prepend {
-    margin-bottom: 0;
-
-    .btn {
-      background-color: @secondaryBlue;
-      color: @buttonText;
-      margin-left: -1px;
-      padding: 10px 10px 9px;
-      border: none;
-      line-height: 1.5em;
-      &:hover{
-        background-color: #cbcbcb;
-      }
-    }
-
-    .icon-question-sign {
-      margin-left: 3px;
-      color: @secondaryBlue;
-      &:hover {
-        color: @hoverHighlight;
-      }
-    }
-  }
-}
-
-.api-bar-tray:before {
-  right: 80px;
-}
-
-.clipboard-copy-element {
-  i:before {
-    margin-right: 0px;
-  }
-
-}
-
-button.clipboard-copy-element {
-  background: transparent;
-  border: 0;
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-#perma-warning {
-  background-color: white;
-}
-
-.perma-warning__content {
-  margin: 4px;
-  padding: 10px;
-  color: #B11925;
-  outline-style: solid;
-  outline-color: #B11925;
-  outline-width: 4px;
-}
diff --git a/app/addons/fauxton/assets/less/fauxton.less b/app/addons/fauxton/assets/less/fauxton.less
deleted file mode 100644
index c248f69..0000000
--- a/app/addons/fauxton/assets/less/fauxton.less
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "components.less";
-@import "navigation.less";
diff --git a/app/addons/fauxton/assets/less/navigation.less b/app/addons/fauxton/assets/less/navigation.less
deleted file mode 100644
index 74ba89a..0000000
--- a/app/addons/fauxton/assets/less/navigation.less
+++ /dev/null
@@ -1,222 +0,0 @@
-.faux-navbar {
-  background-color: @brandDark2;
-  position: absolute;
-  left: 0;
-  top: 0;
-  bottom: 0;
-  z-index: 5;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.faux-navbar nav {
-  height: 100%;
-}
-
-.faux-navbar__linkcontainer {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  height: 100%;
-}
-
-.faux-navbar__itemarea {
-  .box-sizing(border-box);
-  border-bottom: 1px solid @brandDark2;
-  height: 48px;
-  padding: 10px 20px;
-  line-height: 24px;
-}
-
-.faux-navbar__version-footer {
-  color: @buttonText;
-  font-size: 10px;
-  text-align: center;
-  background-color: @brandDark2;
-  padding-bottom: 10px;
-}
-
-.faux-navbar__burger {
-  background-color: @brandDark2;
-  padding: 19px 0 18px 18px;
-}
-
-.faux-navbar--narrow {
-  width: @collapsedNavWidth;
-}
-
-.faux-navbar--wide {
-  width: @navWidth;
-}
-
-.faux-navbar__burger:hover .faux-navbar__burger__icon {
-  color: @navIconActive;
-}
-
-.faux-navbar__burger__icon {
-  color: @navIconColor;
-  font-size: 27px;
-}
-
-.faux-navbar__burger__icon--flipped:before{
-  -moz-transform: scale(-1, 1);
-  -webkit-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-
-.faux-navbar__link, .faux-logout__link, .faux-login__link {
-  display: block;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.faux-navbar__link--active {
-  background-color: @brandHighlight;
-  text-decoration: none;
-}
-
-.faux-navbar__link--inactive {
-  background-color: @brandDark1;
-}
-
-.faux-navbar__link:hover, .faux-logout__link:hover, .faux-login__link:hover {
-  background-color: @hoverHighlight;
-  text-decoration: none;
-}
-
-.faux-navbar__link:active, .faux-navbar__link:focus {
-  text-decoration: none;
-}
-
-.faux-navbar__link:hover .faux-navbar__icon:before {
-  color: @navIconActive;
-}
-
-.faux-navbar__link--active .faux-navbar__icon:before {
-  color: @navIconActive;
-}
-
-.faux-navbar__icon {
-  margin-right: 14px;
-  color: @navIconColor;
-  font-size: 24px;
-  vertical-align: middle;
-  position: relative;
-}
-
-.faux-navbar__icon-badge:after {
-  content:"";
-  position: absolute;
-  background: @hoverHighlight;
-  border: 1px solid @hoverHighlight;
-  height:8px;
-  width:8px;
-  top:0;
-  right:-2px;
-  text-align: center;
-  font-size: 0.5rem;
-  border-radius: 50%;
-}
-
-.faux-navbar__link:hover .faux-navbar__icon-badge:after {
-  border-color: @navIconActive;
-}
-
-.faux-navbar__link--active .faux-navbar__icon-badge:after {
-  border-color: @navIconActive;
-}
-
-.faux-navbar__text {
-  margin: 0;
-  color: @buttonText;
-  vertical-align: middle;
-  font-size: 16px;
-  font-weight: normal;
-  font-family: Helvetica,sans-serif;
-  font-weight: 400;
-}
-
-.faux-navbar__logout__text {
-  font-size: 12px;
-  color: @buttonText;
-}
-
-.faux-navbar__logout__textcontainer {
-  text-align: center;
-  color: @buttonText;
-}
-
-.faux-navbar__logout__textcontainer--narrow {
-  padding-bottom: 4px;
-  padding: 15px 0;
-}
-
-.faux-navbar__logout__textcontainer--wide {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  padding: 15px;
-}
-
-.faux-navbar__login__textcontainer {
-  text-align: center;
-  color: @buttonText;
-}
-
-.faux-navbar__login__textcontainer--narrow {
-  padding-bottom: 4px;
-  padding: 15px 0;
-}
-
-.faux-navbar__login__textcontainer--wide {
-  padding: 15px;
-}
-
-.faux-navbar__brand {
-  margin: 20px 0 20px 0;
-  height: 50px;
-  padding: 10px 10px 10px 10px;
-  float: none;
-  background: @brandDark2;
-}
-
-.faux-navbar__brand-logo {
-  display: block;
-  height: 100%;
-  margin-top: 10px;
-}
-
-.faux-navbar__brand-logo--wide {
-  background: url(@largeLogoPath) no-repeat 23px 0px;
-  background-size: 150px;
-  width: 200px;
-}
-
-.faux-navbar__brand-logo--narrow {
-  width: 43px;
-  height: 40px;
-  background: url(@smallLogoPath) no-repeat 3px 0;
-  background-size: 40px;
-}
-
-.faux-navbar__footer {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-end;
-  height: 100%;
-  min-height: 200px;
-  width: 100%;
-}
-
-.faux-navbar__logout__username {
-  color: @buttonText;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  max-width: 150px;
-  white-space: nowrap;
-  padding-right: 5px;
-  padding-left: 10px;
-  font-size: 12px;
-}
diff --git a/app/addons/fauxton/base.js b/app/addons/fauxton/base.js
deleted file mode 100644
index a1bb98e..0000000
--- a/app/addons/fauxton/base.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import * as NavigationActions from './navigation/actions';
-import navigationReducers from './navigation/reducers';
-import notificationsReducer from './notifications/reducers';
-import './assets/less/fauxton.less';
-
-const Fauxton = FauxtonAPI.addon();
-
-Fauxton.initialize = () => {
-  const versionInfo = new Fauxton.VersionInfo();
-  versionInfo.fetch().then(function () {
-    NavigationActions.setNavbarVersionInfo(versionInfo.get('version'));
-  });
-};
-
-Fauxton.VersionInfo = Backbone.Model.extend({
-  url: function () {
-    return app.host;
-  }
-});
-
-FauxtonAPI.addReducers({
-  navigation: navigationReducers,
-  notifications: notificationsReducer
-});
-
-export default Fauxton;
diff --git a/app/addons/fauxton/components.js b/app/addons/fauxton/components.js
deleted file mode 100644
index 025d845..0000000
--- a/app/addons/fauxton/components.js
+++ /dev/null
@@ -1,213 +0,0 @@
-import FauxtonAPI from "../../core/api";
-
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from "react";
-import ReactDOM from "react-dom";
-import { Modal } from "react-bootstrap";
-
-// import "velocity-animate/velocity";
-// import "velocity-animate/velocity.ui";
-
-
-// formats a block of code and pretty-prints it in the page. Currently uses the prettyPrint plugin
-class CodeFormat extends React.Component {
-  static defaultProps = {
-    lang: "js"
-  };
-
-  getClasses = () => {
-    // added for forward compatibility. This component defines an api via it's props so you can pass lang="N" and
-    // not the class that prettyprint requires for that lang. If (when, hopefully!) we drop prettyprint we won't
-    // have any change this component's props API and break things
-    var classMap = {
-      js: 'lang-js'
-    };
-
-    var classNames = 'prettyprint';
-    if (_.has(classMap, this.props.lang)) {
-      classNames += ' ' + classMap[this.props.lang];
-    }
-    return classNames;
-  };
-
-  componentDidMount() {
-    // this one function is all the lib offers. It parses the entire page and pretty-prints anything with
-    // a .prettyprint class; only executes on an element once
-    prettyPrint();
-  }
-
-  render() {
-    const code = JSON.stringify(this.props.code, null, " ");
-    return (
-      <div><pre className={this.getClasses()}>{code}</pre></div>
-    );
-  }
-}
-
-class Pagination extends React.Component {
-  static defaultProps = {
-    perPage: FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE,
-    onClick: null,
-    page: 1,
-    total: 0,
-    urlPrefix: '',
-    urlSuffix: '',
-    maxNavPages: 10
-  };
-
-  getVisiblePages = (page, totalPages) => {
-    var from, to;
-    if (totalPages < this.props.maxNavPages) {
-      from = 1;
-      to = totalPages + 1;
-    } else {
-      var halfMaxNavPages = Math.floor(this.props.maxNavPages / 2);
-      from = page - halfMaxNavPages;
-      to = page + halfMaxNavPages;
-      if (from <= 1) {
-        from = 1;
-        to = this.props.maxNavPages + 1;
-      }
-      if (to > totalPages + 1) {
-        from = totalPages - (this.props.maxNavPages - 1);
-        to = totalPages + 1;
-      }
-    }
-    return {
-      from: from,
-      to: to
-    };
-  };
-
-  createItemsForPage = (visiblePages) => {
-    return _.range(visiblePages.from, visiblePages.to).map((i) => {
-      return (
-        <li key={i} className={(this.props.page === i ? 'active' : null)}>
-          {this.getLink(i, i)}
-        </li>
-      );
-    });
-  };
-
-  getOnPageClick(pageNumber) {
-    return (e) => {
-      if (e) {
-        e.preventDefault();
-      }
-      this.props.onClick(pageNumber);
-    };
-  }
-
-  getLink = (i, label) => {
-    if (this.props.onClick) {
-      return (
-        <a onClick={this.getOnPageClick(i)} dangerouslySetInnerHTML={{__html: label}}></a>
-      );
-    }
-    return (
-      <a href={this.props.urlPrefix + i + this.props.urlSuffix} dangerouslySetInnerHTML={{__html: label}}></a>
-    );
-  };
-
-  getTotalPages = () => {
-    return this.props.total === 0 ? 1 : Math.ceil(this.props.total / this.props.perPage);
-  };
-
-  render() {
-    var totalPages = this.getTotalPages();
-    var visiblePages = this.getVisiblePages(this.props.page, totalPages);
-    var rangeItems = this.createItemsForPage(visiblePages);
-    var prevPage = Math.max(this.props.page - 1, 1);
-    var nextPage = Math.min(this.props.page + 1, totalPages);
-
-    return (
-      <ul className="pagination">
-        <li className={(this.props.page === 1 ? "disabled" : null)}>
-          {this.getLink(prevPage, '&laquo;')}
-        </li>
-        {rangeItems}
-        <li className={(this.props.page < totalPages ? null : "disabled")}>
-          {this.getLink(nextPage, '&raquo;')}
-        </li>
-      </ul>
-    );
-  }
-}
-
-// a super-simple replacement for window.confirm()
-class ConfirmationModal extends React.Component {
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    text: PropTypes.oneOfType([
-      PropTypes.string,
-      PropTypes.element
-    ]).isRequired,
-    onClose: PropTypes.func.isRequired,
-    onSubmit: PropTypes.func.isRequired
-  };
-
-  static defaultProps = {
-    visible: false,
-    title: 'Please confirm',
-    text: '',
-    successButtonLabel: 'Okay',
-    buttonClass: 'btn-primary'
-  };
-
-  close = (e) => {
-    if (e) {
-      e.preventDefault();
-    }
-    this.props.onClose();
-  };
-
-  render() {
-    let content = <p>{this.props.text}</p>;
-    if (!_.isString(this.props.text)) {
-      content = this.props.text;
-    }
-    const btnClasses = 'btn ' + this.props.buttonClass;
-    const closeButton = this.props.onClose ? (
-      <a href="#" data-bypass="true" className="cancel-link" onClick={this.close}>Cancel</a>
-    ) : null;
-    const submitButton = this.props.onSubmit ? (
-      <button className={btnClasses} onClick={this.props.onSubmit}>
-        <i className="fonticon-ok-circled"></i> {this.props.successButtonLabel}
-      </button>
-    ) : null;
-    return (
-      <Modal dialogClassName="confirmation-modal" show={this.props.visible} onHide={this.close}>
-        <Modal.Header closeButton={true}>
-          <Modal.Title>{this.props.title}</Modal.Title>
-        </Modal.Header>
-        <Modal.Body>
-          {content}
-        </Modal.Body>
-        <Modal.Footer>
-          { closeButton }
-          { submitButton }
-        </Modal.Footer>
-      </Modal>
-    );
-  }
-}
-
-
-export default {
-  CodeFormat: CodeFormat,
-  Pagination: Pagination,
-  ConfirmationModal: ConfirmationModal
-};
diff --git a/app/addons/fauxton/navigation/__tests__/burger-test.js b/app/addons/fauxton/navigation/__tests__/burger-test.js
deleted file mode 100644
index 5f9640f..0000000
--- a/app/addons/fauxton/navigation/__tests__/burger-test.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-import Burger from "../components/Burger";
-import React from "react";
-import ReactDOM from "react-dom";
-import sinon from "sinon";
-import {mount} from 'enzyme';
-
-describe('Navigation Bar', () => {
-
-  describe('Burger', () => {
-    it('dispatch TOGGLE_NAVBAR_MENU on click', () => {
-      const toggleMenu = sinon.spy();
-      const burgerEl = mount(<Burger toggleMenu={toggleMenu} isMinimized={false} />);
-      burgerEl.simulate('click');
-      expect(toggleMenu.calledOnce).toBeTruthy();
-    });
-
-  });
-});
diff --git a/app/addons/fauxton/navigation/__tests__/login-logout-test.js b/app/addons/fauxton/navigation/__tests__/login-logout-test.js
deleted file mode 100644
index e84c2af..0000000
--- a/app/addons/fauxton/navigation/__tests__/login-logout-test.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// Licensed 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.
-
-
-import React from 'react';
-import { mount } from 'enzyme';
-import NavBar from '../components/NavBar';
-
-describe('Navigation Bar', () => {
-  const defaultProps = {
-    activeLink: '',
-    isMinimized: false,
-    version: '42',
-    navLinks: [],
-    bottomNavLinks: [],
-    footerNavLinks: [],
-    isNavBarVisible: true,
-    isLoginSectionVisible: true,
-    isLoginVisibleInsteadOfLogout: true,
-    toggleNavbarMenu: () => {}
-  };
-  it('renders with login button when logged out', () => {
-    const navBar = mount(<NavBar {...defaultProps} />);
-
-    const button = navBar.find('[href="#/login"]');
-    expect(button.text()).toContain('Login');
-  });
-
-  it('renders with logout button when logged in', () => {
-    const props = {
-      username: 'Rocko',
-      isLoginVisibleInsteadOfLogout: false
-    };
-
-    const navBar = mount(<NavBar {...defaultProps} {...props} />);
-
-    const button = navBar.find('[href="#/logout"]');
-    expect(button.text()).toContain('Log Out');
-  });
-
-  it('Admin Party has no Logout button and no Login button', () => {
-    const props = {
-      username: 'Rocko',
-      isLoginSectionVisible: false,
-      isLoginVisibleInsteadOfLogout: false
-    };
-
-    const navBar = mount(<NavBar {...defaultProps} {...props} />);
-
-    expect(navBar.text()).not.toMatch(/Login/);
-    expect(navBar.text()).not.toMatch(/Log Out/);
-  });
-
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navbar-test.js b/app/addons/fauxton/navigation/__tests__/navbar-test.js
deleted file mode 100644
index 8bb3978..0000000
--- a/app/addons/fauxton/navigation/__tests__/navbar-test.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import {mount} from 'enzyme';
-import React from 'react';
-import NavBar from '../components/NavBar';
-
-describe('Navigation Bar', () => {
-  const defaultProps = {
-    isMinimized: true,
-    version: '',
-    username: '',
-    navLinks: [],
-    bottomNavLinks: [],
-    footerNavLinks: [],
-    isNavBarVisible: true,
-    isLoginSectionVisible: false,
-    isLoginVisibleInsteadOfLogout: true,
-    toggleNavbarMenu: () => {}
-  };
-
-  it('is displayed by default', () => {
-    const navbar = mount(<NavBar {...defaultProps}/>);
-    expect(navbar.find('.faux-navbar').length).toBe(1);
-  });
-
-  it('is dynamically displayed by isNavBarVisible', () => {
-    const navbar = mount(<NavBar
-      {...defaultProps}
-      isNavBarVisible={false}/>);
-
-    expect(navbar.find('.faux-navbar').length).toBe(0);
-
-    navbar.setProps({ isNavBarVisible: true });
-    navbar.update();
-    expect(navbar.find('.faux-navbar').length).toBe(1);
-  });
-
-  it('can display items with icon badge', () => {
-    const navLinks = [
-      {
-        href: "#/_with_badge",
-        title: "WithBadge",
-        icon: "fonticon-database",
-        badge: true
-      },
-      {
-        href: "#/_without_badge",
-        title: "WithoutBadge",
-        icon: "fonticon-database"
-      }
-    ];
-
-    const navbar = mount(<NavBar
-      {...defaultProps}
-      navLinks={navLinks}/>);
-    expect(navbar.find('div[data-nav-name="WithoutBadge"] i.faux-navbar__icon-badge').length).toBe(0);
-    expect(navbar.find('div[data-nav-name="WithBadge"] i.faux-navbar__icon-badge').length).toBe(1);
-  });
-
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navigation-reducers.js b/app/addons/fauxton/navigation/__tests__/navigation-reducers.js
deleted file mode 100644
index f2f9f12..0000000
--- a/app/addons/fauxton/navigation/__tests__/navigation-reducers.js
+++ /dev/null
@@ -1,185 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from '../actiontypes';
-import reducer from '../reducers';
-
-describe('NavBar Reducer', () => {
-
-  describe('add links', () => {
-
-    it('to nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'mylink'
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.navLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to top nav links', () => {
-      const action1 = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: { id: 'mylink1' }
-      };
-      const action2 = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: { id: 'mylink2', top: true }
-      };
-      let newState = reducer(undefined, action1);
-      newState = reducer(newState, action2);
-
-      expect(newState.navLinks[0].id).toMatch(action2.link.id);
-    });
-
-    it('to bottom nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'bottomNav',
-          bottomNav: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to top of bottom nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'bottomNav',
-          bottomNav: true,
-          top: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
-    });
-
-    it('to footer nav', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'footerNav',
-          footerNav: true
-        }
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.footerNavLinks[0].id).toMatch(action.link.id);
-    });
-  });
-
-  describe('remove link', () => {
-    it('from nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link'
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.navLinks.length).toBe(0);
-    });
-
-    it('remove link from list only when it exists', () => {
-      const addAction = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link1',
-          footerNav: true
-        }
-      };
-      let newState = reducer(undefined, addAction);
-      addAction.link = { id: 'remove_link2', footerNav: true };
-      newState = reducer(newState, addAction);
-      addAction.link = { id: 'remove_link3', footerNav: true };
-      newState = reducer(newState, addAction);
-      expect(newState.footerNavLinks.length).toBe(3);
-
-      const removeAction = {
-        type: ActionTypes.REMOVE_NAVBAR_LINK,
-        link: addAction.link
-      };
-      newState = reducer(newState, removeAction);
-      newState = reducer(newState, removeAction);
-      newState = reducer(newState, removeAction);
-      expect(newState.footerNavLinks.length).toBe(2);
-    });
-
-    it('from bottom nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link',
-          bottomNav: true
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.bottomNavLinks.length).toBe(0);
-    });
-
-    it('from footer nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'remove_link',
-          footerNav: true
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.REMOVE_NAVBAR_LINK;
-      newState = reducer(newState, action);
-
-      expect(newState.footerNavLinks.length).toBe(0);
-    });
-  });
-
-  describe('update link', () => {
-    it('for nav links', () => {
-      const action = {
-        type: ActionTypes.ADD_NAVBAR_LINK,
-        link: {
-          id: 'update-link',
-          title: 'first'
-        }
-      };
-      let newState = reducer(undefined, action);
-      action.type = ActionTypes.UPDATE_NAVBAR_LINK;
-      action.link.title = 'second';
-      newState = reducer(newState, action);
-
-      expect(newState.navLinks[0].title).toMatch('second');
-    });
-
-  });
-
-  describe('set version', () => {
-    it('stores version number', () => {
-      const action = {
-        type: ActionTypes.NAVBAR_SET_VERSION_INFO,
-        version: 1234
-      };
-      const newState = reducer(undefined, action);
-      expect(newState.version).toBe(1234);
-    });
-
-  });
-});
diff --git a/app/addons/fauxton/navigation/__tests__/navlink-test.js b/app/addons/fauxton/navigation/__tests__/navlink-test.js
deleted file mode 100644
index 3c4a7c9..0000000
--- a/app/addons/fauxton/navigation/__tests__/navlink-test.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed 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.
-import NavLink from "../components/NavLink";
-import React from "react";
-import ReactDOM from "react-dom";
-import {mount} from 'enzyme';
-
-describe('Navigation Bar', () => {
-  const dbLink = {
-    href: "#/_all_dbs",
-    title: "Databases",
-    icon: "fonticon-database",
-    className: 'databases'
-  };
-
-  describe('Active Link', () => {
-    it('matching title sets active css class', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('a.faux-navbar__link--active').length).toBe(1);
-    });
-
-    it('different title sets inactive css class', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Replication"} isMinimized={false} />);
-      expect(linkEl.find('a.faux-navbar__link--inactive').length).toBe(1);
-    });
-  });
-
-  describe('Minimized Link', () => {
-    it('shows title when not minimized', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.text()).toMatch("Databases");
-    });
-
-    it('does not show title when minimized', () => {
-      const linkEl = mount(<NavLink link={dbLink} active={"Databases"} isMinimized={true} />);
-      expect(linkEl.find('span.faux-navbar__text').length).toBe(0);
-    });
-  });
-
-  describe('Link icon badge', () => {
-    const aLinkNoBadge = {
-      href: "#/_all_dbs",
-      title: "Databases",
-      icon: "fonticon-database"
-    };
-    it('is not displayed when not set', () => {
-      const linkEl = mount(<NavLink link={aLinkNoBadge} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('i.faux-navbar__icon-badge').length).toBe(0);
-    });
-
-    const aLinkWithBadge = {
-      href: "#/_all_dbs",
-      title: "Databases",
-      icon: "fonticon-database",
-      badge: true
-    };
-    it('is displayed when set to true', () => {
-      const linkEl = mount(<NavLink link={aLinkWithBadge} active={"Databases"} isMinimized={false} />);
-      expect(linkEl.find('i.faux-navbar__icon-badge').length).toBe(1);
-    });
-  });
-});
diff --git a/app/addons/fauxton/navigation/actions.js b/app/addons/fauxton/navigation/actions.js
deleted file mode 100644
index ac26091..0000000
--- a/app/addons/fauxton/navigation/actions.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import ActionTypes from './actiontypes';
-
-export const toggleNavbarMenu = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.TOGGLE_NAVBAR_MENU
-  });
-};
-
-export const addHeaderLink = (link) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_NAVBAR_LINK,
-    link: link
-  });
-};
-
-export const removeHeaderLink = (link) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.REMOVE_NAVBAR_LINK,
-    link: link
-  });
-};
-
-export const setNavbarVersionInfo = (versionInfo) => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.NAVBAR_SET_VERSION_INFO,
-    version: versionInfo
-  });
-};
-
-export const setNavbarActiveLink = (header) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_ACTIVE_LINK,
-    name: header
-  });
-};
-
-export const showNavBar = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_SHOW
-  });
-};
-
-export const hideNavBar = () => (dispatch) => {
-  dispatch({
-    type: ActionTypes.NAVBAR_HIDE
-  });
-};
diff --git a/app/addons/fauxton/navigation/actiontypes.js b/app/addons/fauxton/navigation/actiontypes.js
deleted file mode 100644
index e007062..0000000
--- a/app/addons/fauxton/navigation/actiontypes.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-export default {
-  ADD_NAVBAR_LINK: 'ADD_NAVBAR_LINK',
-  TOGGLE_NAVBAR_MENU: 'TOGGLE_NAVBAR_MENU',
-  UPDATE_NAVBAR_LINK: 'UPDATE_NAVBAR_LINK',
-  REMOVE_NAVBAR_LINK: 'REMOVE_NAVBAR_LINK',
-  HIDE_NAVBAR_LINK_BADGE: 'HIDE_NAVBAR_LINK_BADGE',
-  SHOW_NAVBAR_LINK_BADGE: 'SHOW_NAVBAR_LINK_BADGE',
-  NAVBAR_SET_VERSION_INFO: 'NAVBAR_SET_VERSION_INFO',
-  NAVBAR_ACTIVE_LINK: 'NAVBAR_ACTIVE_LINK',
-  NAVBAR_HIDE: 'NAVBAR_HIDE',
-  NAVBAR_SHOW: 'NAVBAR_SHOW',
-  NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION: 'NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION',
-  NAVBAR_SHOW_LOGIN_BUTTON: 'NAVBAR_SHOW_LOGIN_BUTTON',
-  NAVBAR_SHOW_LOGOUT_BUTTON: 'NAVBAR_SHOW_LOGOUT_BUTTON'
-};
diff --git a/app/addons/fauxton/navigation/components/Brand.js b/app/addons/fauxton/navigation/components/Brand.js
deleted file mode 100644
index fba6997..0000000
--- a/app/addons/fauxton/navigation/components/Brand.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const Brand = ({isMinimized}) => {
-
-  const burgerClasses = classNames(
-    'faux-navbar__brand-logo',
-    {'faux-navbar__brand-logo--wide':  !isMinimized},
-    {'faux-navbar__brand-logo--narrow': isMinimized}
-  );
-
-  return (
-    <div className="faux-navbar__brand">
-      <div className={burgerClasses}></div>
-    </div>
-  );
-};
-
-Brand.propTypes = {
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default Brand;
diff --git a/app/addons/fauxton/navigation/components/Burger.js b/app/addons/fauxton/navigation/components/Burger.js
deleted file mode 100644
index 07ee28d..0000000
--- a/app/addons/fauxton/navigation/components/Burger.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const Burger = ({toggleMenu, isMinimized}) => {
-
-  const burgerClasses = classNames(
-    'faux-navbar__burger',
-    {'faux-navbar--wide':  !isMinimized},
-    {'faux-navbar--narrow': isMinimized}
-  );
-
-  const icon = isMinimized ?
-    'icon-resize-horizontal' :
-    'icon-signin faux-navbar__burger__icon--flipped';
-
-  return (
-    <div aria-expanded={!isMinimized} aria-label="Toggle Navigation Menu" className={burgerClasses} onClick={toggleMenu} role="button" tabIndex="0">
-      <i aria-hidden="true" className={"faux-navbar__burger__icon " + icon}></i>
-    </div>
-  );
-};
-
-Burger.propTypes = {
-  toggleMenu: PropTypes.func.isRequired,
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default Burger;
diff --git a/app/addons/fauxton/navigation/components/Footer.js b/app/addons/fauxton/navigation/components/Footer.js
deleted file mode 100644
index 3655134..0000000
--- a/app/addons/fauxton/navigation/components/Footer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-const Footer = ({version}) => {
-
-  if (!version) { return null; }
-
-  return (
-    <div className="faux-navbar__version-footer">
-      Fauxton on &nbsp;
-      <a href="http://couchdb.apache.org/">Apache CouchDB</a>
-      <div>v. {version}</div>
-    </div>
-  );
-
-};
-
-Footer.propTypes = {
-  version: PropTypes.string
-};
-
-export default Footer;
diff --git a/app/addons/fauxton/navigation/components/LoginButton.js b/app/addons/fauxton/navigation/components/LoginButton.js
deleted file mode 100644
index de265ea..0000000
--- a/app/addons/fauxton/navigation/components/LoginButton.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-
-const LoginButton = ({isMinimized}) => {
-
-  const containerClasses = classNames(
-    'faux-navbar__login__textcontainer',
-    {'faux-navbar__login__textcontainer--narrow':  isMinimized},
-    {'faux-navbar__login__textcontainer--wide': !isMinimized}
-  );
-
-  return (
-    <a className="faux-login__link" href="#/login">
-
-      <div className={containerClasses}>
-        <span className="faux-navbar__logout__text">
-          Login
-        </span>
-      </div>
-
-    </a>
-  );
-};
-
-LoginButton.propTypes = {
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default LoginButton;
diff --git a/app/addons/fauxton/navigation/components/LogoutButton.js b/app/addons/fauxton/navigation/components/LogoutButton.js
deleted file mode 100644
index 80427f6..0000000
--- a/app/addons/fauxton/navigation/components/LogoutButton.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-import classNames from 'classnames';
-import _ from 'lodash';
-
-const LogoutButton = ({username, isMinimized}) => {
-
-  const containerClasses = classNames(
-    'faux-navbar__logout__textcontainer',
-    {'faux-navbar__logout__textcontainer--narrow':  isMinimized},
-    {'faux-navbar__logout__textcontainer--wide': !isMinimized}
-  );
-
-  return (
-    <a className="faux-logout__link" href="#/logout">
-      <div className={containerClasses}>
-        <span className="faux-navbar__logout__text">
-          Log Out
-        </span>
-        &nbsp;
-        {isMinimized ?
-          null :
-          <span className="faux-navbar__logout__username">{_.escape(username)}</span>
-        }
-      </div>
-    </a>
-  );
-};
-
-LogoutButton.propTypes = {
-  username: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired
-};
-
-export default LogoutButton;
diff --git a/app/addons/fauxton/navigation/components/NavBar.js b/app/addons/fauxton/navigation/components/NavBar.js
deleted file mode 100644
index 89d0c48..0000000
--- a/app/addons/fauxton/navigation/components/NavBar.js
+++ /dev/null
@@ -1,113 +0,0 @@
-// Licensed 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.
-
-import classNames from 'classnames';
-import PropTypes from 'prop-types';
-import React, { Component } from 'react';
-import Footer from './Footer';
-import Burger from './Burger';
-import NavLink from './NavLink';
-import Brand from './Brand';
-import LogoutButton from './LogoutButton';
-import LoginButton from './LoginButton';
-
-class NavBar extends Component {
-
-  constructor(props) {
-    super(props);
-  }
-
-  createLinks (links) {
-    const { activeLink, isMinimized } = this.props;
-
-    return links.map((link, i) => {
-      return <NavLink
-        key={i}
-        link={link}
-        active={activeLink}
-        isMinimized={isMinimized} />;
-    });
-  }
-
-  render () {
-    const {
-      isMinimized,
-      version,
-      isLoginSectionVisible,
-      isLoginVisibleInsteadOfLogout,
-      activeLink,
-      username,
-      isNavBarVisible,
-      toggleNavbarMenu
-    } = this.props;
-
-    if (!isNavBarVisible) {
-      return null;
-    }
-
-    const navLinks = this.createLinks(this.props.navLinks);
-    const bottomNavLinks = this.createLinks(this.props.bottomNavLinks);
-    const footerNavLinks = this.createLinks(this.props.footerNavLinks);
-
-    const navClasses = classNames(
-      'faux-navbar',
-      {'faux-navbar--wide':  !isMinimized},
-      {'faux-navbar--narrow': isMinimized}
-    );
-
-    const loginSection = isLoginVisibleInsteadOfLogout ?
-      <LoginButton active={activeLink} isMinimized={isMinimized} /> :
-      <LogoutButton username={username} isMinimized={isMinimized} />;
-
-    return (
-      <div className={navClasses}>
-        <nav>
-          <div className="faux-navbar__linkcontainer">
-            <Burger isMinimized={isMinimized} toggleMenu={toggleNavbarMenu}/>
-            <div className="faux-navbar__links">
-              {navLinks}
-              {bottomNavLinks}
-            </div>
-
-            <div className="faux-navbar__footer">
-              <Brand isMinimized={isMinimized} />
-
-              <div>
-                {footerNavLinks}
-              </div>
-
-              <Footer version={version}/>
-
-              {isLoginSectionVisible ? loginSection : null}
-            </div>
-          </div>
-        </nav>
-      </div>
-    );
-  }
-}
-
-NavBar.propTypes = {
-  activeLink: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired,
-  version: PropTypes.string,
-  username: PropTypes.string,
-  navLinks: PropTypes.array,
-  bottomNavLinks: PropTypes.array,
-  footerNavLinks: PropTypes.array,
-  isNavBarVisible: PropTypes.bool,
-  isLoginSectionVisible: PropTypes.bool.isRequired,
-  isLoginVisibleInsteadOfLogout: PropTypes.bool.isRequired,
-  toggleNavbarMenu: PropTypes.func.isRequired
-};
-
-export default NavBar;
diff --git a/app/addons/fauxton/navigation/components/NavLink.js b/app/addons/fauxton/navigation/components/NavLink.js
deleted file mode 100644
index 2afc4ea..0000000
--- a/app/addons/fauxton/navigation/components/NavLink.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import classNames from 'classnames';
-
-
-const NavLink = ({link, active, isMinimized}) => {
-
-  const isActive = active === link.title;
-  const linkClass = classNames(
-    'faux-navbar__link',
-    {'faux-navbar__link--active':  isActive},
-    {'faux-navbar__link--inactive': !isActive},
-    {'faux-navbar--wide':  !isMinimized},
-    {'faux-navbar--narrow': isMinimized}
-  );
-
-  const linkTitle = isMinimized ?
-    null :
-    <span className="faux-navbar__text">{link.title}</span>;
-
-  let linkIcon = null;
-  if (link.icon) {
-    linkIcon = (
-      <i aria-hidden="true" className={classNames(
-        link.icon,
-        'fonticon faux-navbar__icon',
-        {'faux-navbar__icon-badge': link.badge})}>
-      </i>
-    );
-  }
-
-  return (
-    <a aria-current={isActive ? "page" : null } aria-label={link.title} className={linkClass} href={link.href} target={link.target ? '_blank' : null} data-bypass={link.target ? 'true' : null}>
-      <div data-nav-name={link.title} className="faux-navbar__itemarea">
-        {linkIcon}
-        {linkTitle}
-      </div>
-    </a>
-  );
-};
-
-NavLink.propTypes = {
-  link: PropTypes.object.isRequired,
-  active: PropTypes.string,
-  isMinimized: PropTypes.bool.isRequired,
-};
-
-
-export default NavLink;
diff --git a/app/addons/fauxton/navigation/container/NavBar.js b/app/addons/fauxton/navigation/container/NavBar.js
deleted file mode 100644
index 2703b79..0000000
--- a/app/addons/fauxton/navigation/container/NavBar.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-import FauxtonAPI from '../../../../core/api';
-import NavBar from '../components/NavBar';
-import * as Actions from '../actions';
-
-const mapStateToProps = ({ navigation }) => {
-  const user = FauxtonAPI.session.user();
-  return {
-    navLinks: navigation.navLinks,
-    bottomNavLinks: navigation.bottomNavLinks,
-    footerNavLinks: navigation.footerNavLinks,
-    activeLink: navigation.activeLink,
-    version: navigation.version,
-    isMinimized: navigation.isMinimized,
-    isNavBarVisible: navigation.navBarVisible,
-    isLoginSectionVisible: navigation.loginSectionVisible,
-    isLoginVisibleInsteadOfLogout: navigation.loginVisibleInsteadOfLogout,
-    username: (user && user.name) ? user.name : ''
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    toggleNavbarMenu: () => {
-      dispatch(Actions.toggleNavbarMenu());
-    }
-  };
-};
-
-const NavBarContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(NavBar);
-
-export default NavBarContainer;
diff --git a/app/addons/fauxton/navigation/reducers.js b/app/addons/fauxton/navigation/reducers.js
deleted file mode 100644
index 6af5d2c..0000000
--- a/app/addons/fauxton/navigation/reducers.js
+++ /dev/null
@@ -1,209 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-
-const initialState = {
-  isMinimized: true,
-  activeLink: null,
-  version: null,
-  navLinks: [],
-  footerNavLinks: [],
-  bottomNavLinks: [],
-  navBarVisible: true,
-  loginSectionVisible: false,
-  loginVisibleInsteadOfLogout: true
-};
-
-function addLink(state, link) {
-  const newState = { ...state };
-
-  if (link.top && !link.bottomNav) {
-    newState.navLinks = [].concat(newState.navLinks);
-    newState.navLinks.unshift(link);
-    return newState;
-  }
-  if (link.top && link.bottomNav) {
-    newState.bottomNavLinks = [].concat(newState.bottomNavLinks);
-    newState.bottomNavLinks.unshift(link);
-    return newState;
-  }
-  if (link.bottomNav) {
-    newState.bottomNavLinks = [].concat(newState.bottomNavLinks);
-    newState.bottomNavLinks.push(link);
-    return newState;
-  }
-  if (link.footerNav) {
-    newState.footerNavLinks = [].concat(newState.footerNavLinks);
-    newState.footerNavLinks.push(link);
-    return newState;
-  }
-
-  newState.navLinks = [].concat(newState.navLinks);
-  newState.navLinks.push(link);
-  return newState;
-}
-
-function removeLink (state, removeLink) {
-  const {links, sectionName} = getLinkSection(state, removeLink);
-
-  // create new array without the link to remove
-  const newLinks = links.filter(link => link.id !== removeLink.id);
-
-  if (newLinks.length === links.length) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function updateLink (state, link) {
-  const {links, sectionName} = getLinkSection(state, link);
-
-  // create new array and updates the link when found
-  let found = false;
-  const newLinks = links.map(el => {
-    if (el.id === link.id) {
-      found = true;
-      return {
-        ...el,
-        title: link.title,
-        href: link.href
-      };
-    }
-    return el;
-  });
-
-  if (!found) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function setLinkBadgeVisible (state, link, visible) {
-  const {links, sectionName} = getLinkSection(state, link);
-
-  let found = false;
-  const newLinks = links.map(el => {
-    if (el.title === link.title) {
-      found = true;
-      return {
-        ...el,
-        badge: visible
-      };
-    }
-    return el;
-  });
-
-  if (!found) {
-    return state;
-  }
-
-  const newState = { ...state };
-  newState[sectionName] = newLinks;
-  return newState;
-}
-
-function getLinkSection (state, link) {
-  let links = state.navLinks;
-  let sectionName = 'navLinks';
-
-  if (link.bottomNav) {
-    links = state.bottomNavLinks;
-    sectionName = 'bottomNavLinks';
-  }
-
-  if (link.footerNav) {
-    links = state.footerNavLinks;
-    sectionName = 'footerNavLinks';
-  }
-
-  return { links, sectionName };
-}
-
-export default function navigation(state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.ADD_NAVBAR_LINK:
-      return addLink(state, action.link);
-
-    case ActionTypes.TOGGLE_NAVBAR_MENU:
-      return {
-        ...state,
-        isMinimized: !state.isMinimized
-      };
-
-    case ActionTypes.UPDATE_NAVBAR_LINK:
-      return updateLink(state, action.link);
-
-    case ActionTypes.REMOVE_NAVBAR_LINK:
-      return removeLink(state, action.link);
-
-    case ActionTypes.SHOW_NAVBAR_LINK_BADGE:
-      return setLinkBadgeVisible(state, action.link, true);
-
-    case ActionTypes.HIDE_NAVBAR_LINK_BADGE:
-      return setLinkBadgeVisible(state, action.link, false);
-
-    case ActionTypes.NAVBAR_SET_VERSION_INFO:
-      return {
-        ...state,
-        version: action.version
-      };
-
-    case ActionTypes.NAVBAR_ACTIVE_LINK:
-      return {
-        ...state,
-        activeLink: action.name
-      };
-
-    case ActionTypes.NAVBAR_HIDE:
-      return {
-        ...state,
-        navBarVisible: false
-      };
-
-    case ActionTypes.NAVBAR_SHOW:
-      return {
-        ...state,
-        navBarVisible: true
-      };
-
-    case ActionTypes.NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION:
-      return {
-        ...state,
-        loginSectionVisible: action.visible
-      };
-
-    case ActionTypes.NAVBAR_SHOW_LOGIN_BUTTON:
-      return {
-        ...state,
-        loginSectionVisible: true,
-        loginVisibleInsteadOfLogout: true
-      };
-
-    case ActionTypes.NAVBAR_SHOW_LOGOUT_BUTTON:
-      return {
-        ...state,
-        loginSectionVisible: true,
-        loginVisibleInsteadOfLogout: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/fauxton/notifications/__tests__/components.test.js b/app/addons/fauxton/notifications/__tests__/components.test.js
deleted file mode 100644
index 34c3248..0000000
--- a/app/addons/fauxton/notifications/__tests__/components.test.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-
-import React from "react";
-import moment from "moment";
-import { mount } from 'enzyme';
-import sinon from 'sinon';
-import NotificationCenterPanel from '../components/NotificationCenterPanel';
-import NotificationPanelRow from '../components/NotificationPanelRow';
-
-describe('NotificationPanelRow', () => {
-  const notifications = {
-    success: {
-      toastId: 1,
-      type: 'success',
-      msg: 'Success!',
-      cleanMsg: 'Success!',
-      time: moment()
-    },
-    info: {
-      toastId: 2,
-      type: 'info',
-      msg: 'Error!',
-      cleanMsg: 'Error!',
-      time: moment()
-    },
-    error: {
-      toastId: 3,
-      type: 'error',
-      msg: 'Error!',
-      cleanMsg: 'Error!',
-      time: moment()
-    }
-  };
-
-  const style = {
-    opacity: 1,
-    height: 64
-  };
-
-  const defaultProps = {
-    style,
-    isVisible: true,
-    filter: 'all',
-    clearSingleNotification: () => {}
-  };
-
-  it('shows all notification types when "all" filter applied', () => {
-    const row1 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.success}
-    />);
-
-    expect(row1.find('li').prop('aria-hidden')).toBeFalsy();
-
-    const row2 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.error}
-    />
-    );
-    expect(row2.find('li').prop('aria-hidden')).toBeFalsy();
-
-    const row3 = mount(<NotificationPanelRow
-      {...defaultProps}
-      item={notifications.info} />
-    );
-    expect(row3.find('li').prop('aria-hidden')).toBeFalsy();
-  });
-
-  it('hides notification when filter doesn\'t match', () => {
-    var rowEl = mount(
-      <NotificationPanelRow
-        {...defaultProps}
-        filter="success"
-        item={notifications.info}
-      />);
-    expect(rowEl.find('li').prop('aria-hidden')).toBeTruthy();
-  });
-
-  it('shows notification when filter exact match', () => {
-    const rowEl = mount(
-      <NotificationPanelRow
-        {...defaultProps}
-        filter="info"
-        item={notifications.info}
-      />);
-    expect(rowEl.find('li').prop('aria-hidden')).toBeFalsy();
-  });
-});
-
-
-describe('NotificationCenterPanel', () => {
-
-  const defaultProps = {
-    hideNotificationCenter: () => {},
-    selectNotificationFilter: () => {},
-    clearAllNotifications: () => {},
-    clearSingleNotification: () => {},
-    isVisible: true,
-    style:{ opacity: 1 }
-  };
-
-  it('clear all notifications', () => {
-    const stub = sinon.stub();
-    const panelEl = mount(<NotificationCenterPanel
-      {...defaultProps}
-      notifications={[]}
-      clearAllNotifications={stub}
-      filter={'all'} />);
-
-    panelEl.find('footer input').simulate('click');
-    sinon.assert.calledOnce(stub);
-  });
-});
diff --git a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js b/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
deleted file mode 100644
index 0ce231d..0000000
--- a/app/addons/fauxton/notifications/__tests__/permanentNotification.test.js
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed 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.
-import { mount } from 'enzyme';
-import React from 'react';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-import PermanentNotification from '../components/PermanentNotification';
-import PermanentNotificationContainer from '../components/PermanentNotificationContainer';
-import ActionTypes from '../actiontypes';
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import notificationsReducer from '../reducers';
-
-describe('PermanentNotification', () => {
-
-  it('doesn\'t render content by default', () => {
-    const wrapper = mount(<PermanentNotification visible={false}/>);
-    expect(wrapper.find('.perma-warning__content').length).toBe(0);
-  });
-});
-
-describe('PermanentNotificationContainer', () => {
-  const middlewares = [thunk];
-  const store = createStore(
-    combineReducers({ notifications: notificationsReducer }),
-    applyMiddleware(...middlewares)
-  );
-
-  it('shows/hides content when the display flag is switched', () => {
-    const wrapper = mount(
-      <Provider store={store}>
-        <PermanentNotificationContainer />
-      </Provider>
-    );
-    store.dispatch({
-      type: ActionTypes.SHOW_PERMANENT_NOTIFICATION,
-      options: {
-        msg: 'Hello World!'
-      }
-    });
-
-    wrapper.update();
-    expect(wrapper.find('.perma-warning__content').html()).toMatch(/Hello World!/);
-
-    store.dispatch({
-      type: ActionTypes.HIDE_PERMANENT_NOTIFICATION
-    });
-
-    wrapper.update();
-    expect(wrapper.find('.perma-warning__content').length).toBe(0);
-  });
-});
-
diff --git a/app/addons/fauxton/notifications/__tests__/reducers.test.js b/app/addons/fauxton/notifications/__tests__/reducers.test.js
deleted file mode 100644
index 66da88b..0000000
--- a/app/addons/fauxton/notifications/__tests__/reducers.test.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// Licensed 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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-
-describe('Notifications Reducer', () => {
-
-  it('sets reasonable defaults', () => {
-    const newState = reducer(undefined, { type: 'DO_NOTHING'});
-    expect(newState.notifications.length).toBe(0);
-    expect(newState.notificationCenterVisible).toBe(false);
-    expect(newState.selectedNotificationFilter).toBe('all');
-  });
-
-  it('confirm only known notification types get added', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'Hey there!', type: 'info' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    expect(newState.notifications.length).toBe(1);
-
-    action.options.info.type = 'success';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(2);
-
-    action.options.info.type = 'error';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(3);
-
-    action.options.info.type = 'rhubarb';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(3);
-  });
-
-  it('notifications should be escaped by default', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: '<script>window.whatever=1;</script>', type: 'info' }
-      }
-    };
-    let newState = reducer(undefined, action);
-    expect(newState.notifications[0].escape).toBe(true);
-  });
-
-  it('clears a specific notification', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'one', type: 'success' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    action.options.info.msg = 'two';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'three';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'four';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(4);
-
-    const idToRemove = newState.notifications[1].toastId;
-    const msgToRemove = newState.notifications[1].msg;
-    newState = reducer(newState, {
-      type: ActionTypes.CLEAR_SINGLE_NOTIFICATION,
-      options: { toastId: idToRemove }
-    });
-    expect(newState.notifications.length).toBe(3);
-    const item = newState.notifications.find(el => {
-      return el.msg === msgToRemove;
-    });
-    expect(item).not.toBeDefined();
-  });
-
-  it('setNotificationFilter only sets for known notification types', () => {
-    const action = {
-      type: ActionTypes.SELECT_NOTIFICATION_FILTER,
-      options: { filter: 'all' }
-    };
-    let newState = reducer(undefined, { type: 'DO_NOTHING' });
-    const validFilters = ['all', 'success', 'error', 'info'];
-    validFilters.forEach(filter => {
-      action.options.filter = filter;
-      newState = reducer(newState, action);
-      expect(newState.selectedNotificationFilter).toBe(filter);
-    });
-
-    action.options.filter = 'invalid_filter';
-    newState = reducer(newState, action);
-    expect(newState.selectedNotificationFilter).toBe(validFilters[validFilters.length - 1]);
-  });
-
-  it('clear all notifications', () => {
-    const action = {
-      type: ActionTypes.ADD_NOTIFICATION,
-      options: {
-        info: { msg: 'one', type: 'success' }
-      }
-    };
-
-    let newState = reducer(undefined, action);
-    action.options.info.msg = 'two';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'three';
-    newState = reducer(newState, action);
-    action.options.info.msg = 'four';
-    newState = reducer(newState, action);
-    expect(newState.notifications.length).toBe(4);
-
-    newState = reducer(newState, {
-      type: ActionTypes.CLEAR_ALL_NOTIFICATIONS
-    });
-    expect(newState.notifications.length).toBe(0);
-  });
-
-});
diff --git a/app/addons/fauxton/notifications/actions.js b/app/addons/fauxton/notifications/actions.js
deleted file mode 100644
index 8ef9621..0000000
--- a/app/addons/fauxton/notifications/actions.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-
-export const addNotification = (notificationInfo) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.ADD_NOTIFICATION,
-    options: {
-      info: notificationInfo
-    }
-  });
-};
-
-export const showNotificationCenter = () => (dispatch) => {
-  dispatch({ type: ActionTypes.SHOW_NOTIFICATION_CENTER });
-};
-
-export const hideNotificationCenter = () => (dispatch) => {
-  dispatch({ type: ActionTypes.HIDE_NOTIFICATION_CENTER });
-};
-
-export const clearAllNotifications = () => (dispatch) => {
-  dispatch({ type: ActionTypes.CLEAR_ALL_NOTIFICATIONS });
-};
-
-export const clearSingleNotification = (toastId) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.CLEAR_SINGLE_NOTIFICATION,
-    options: {
-      toastId: toastId
-    }
-  });
-};
-
-export const selectNotificationFilter = (filter) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SELECT_NOTIFICATION_FILTER,
-    options: {
-      filter: filter
-    }
-  });
-};
diff --git a/app/addons/fauxton/notifications/actiontypes.js b/app/addons/fauxton/notifications/actiontypes.js
deleted file mode 100644
index 654925b..0000000
--- a/app/addons/fauxton/notifications/actiontypes.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Licensed 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.
-
-export default {
-  ADD_NOTIFICATION: 'ADD_NOTIFICATION',
-  SHOW_NOTIFICATION_CENTER: 'SHOW_NOTIFICATION_CENTER',
-  HIDE_NOTIFICATION_CENTER: 'HIDE_NOTIFICATION_CENTER',
-  CLEAR_SINGLE_NOTIFICATION: 'CLEAR_SINGLE_NOTIFICATION',
-  CLEAR_ALL_NOTIFICATIONS: 'CLEAR_ALL_NOTIFICATIONS',
-  SELECT_NOTIFICATION_FILTER: 'SELECT_NOTIFICATION_FILTER',
-  SHOW_PERMANENT_NOTIFICATION: 'SHOW_PERMANENT_NOTIFICATION',
-  HIDE_PERMANENT_NOTIFICATION: 'HIDE_PERMANENT_NOTIFICATION'
-};
diff --git a/app/addons/fauxton/notifications/components/NotificationCenterButton.js b/app/addons/fauxton/notifications/components/NotificationCenterButton.js
deleted file mode 100644
index cf458a4..0000000
--- a/app/addons/fauxton/notifications/components/NotificationCenterButton.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import { showNotificationCenter } from '../actions';
-
-class ShowPanelButton extends React.Component {
-
-  static propTypes = {
-    onClick: PropTypes.func.isRequired,
-    visible: PropTypes.bool.isRequired
-  };
-
-  render() {
-    const classes = 'fonticon fonticon-bell' + ((!this.props.visible) ? ' hide' : '');
-    return (
-      <div className={classes} onClick={this.props.onClick}></div>
-    );
-  }
-}
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    visible: !notifications.notificationCenterVisible
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    onClick: () => {
-      dispatch(showNotificationCenter());
-    }
-  };
-};
-
-const NotificationCenterButton = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(ShowPanelButton);
-
-export default NotificationCenterButton;
-
-
-
diff --git a/app/addons/fauxton/notifications/components/NotificationCenterPanel.js b/app/addons/fauxton/notifications/components/NotificationCenterPanel.js
deleted file mode 100644
index 9657035..0000000
--- a/app/addons/fauxton/notifications/components/NotificationCenterPanel.js
+++ /dev/null
@@ -1,145 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TransitionMotion, spring, presets} from 'react-motion';
-import NotificationPanelRow from './NotificationPanelRow';
-
-export default class NotificationCenterPanel extends React.Component {
-  static propTypes = {
-    isVisible: PropTypes.bool.isRequired,
-    filter: PropTypes.string.isRequired,
-    notifications: PropTypes.array.isRequired,
-    hideNotificationCenter: PropTypes.func.isRequired,
-    selectNotificationFilter: PropTypes.func.isRequired,
-    clearAllNotifications: PropTypes.func.isRequired,
-    clearSingleNotification: PropTypes.func.isRequired
-  };
-
-  getNotifications = (items) => {
-    let notifications;
-    if (!items.length && !this.props.notifications.length) {
-      notifications = <li className="no-notifications">
-          No notifications.
-      </li>;
-    } else {
-      notifications = items
-        .map(({key, data: notification, style}) => {
-          return (
-            <NotificationPanelRow
-              item={notification}
-              filter={this.props.filter}
-              clearSingleNotification={this.props.clearSingleNotification}
-              key={key}
-              style={style}
-            />
-          );
-        });
-    }
-    return (
-      <ul className="notification-list">
-        {notifications}
-      </ul>
-    );
-  };
-
-  getStyles = (prevItems = []) => {
-    const styles = this.props.notifications
-      .map(notification => {
-        let item = prevItems.find(style => style.key === (notification.toastId.toString()));
-        let style = !item ? {opacity: 0, height: 0} : false;
-
-        if (!style && (notification.type === this.props.filter || this.props.filter === 'all')) {
-          style = {
-            opacity: spring(1, presets.stiff),
-            height: spring(61, presets.stiff)
-          };
-        } else if (notification.type !== this.props.filter) {
-          style = {
-            opacity: spring(0, presets.stiff),
-            height: spring(0, presets.stiff)
-          };
-        }
-
-        return {
-          key: notification.toastId.toString(),
-          style,
-          data: notification
-        };
-      });
-    return styles;
-  };
-
-  render() {
-    if (!this.props.isVisible && this.props.style.x === 0) {
-      // panelClasses += ' visible';
-      return null;
-    }
-
-    const filterClasses = {
-      all: 'flex-body',
-      success: 'flex-body',
-      error: 'flex-body',
-      info: 'flex-body'
-    };
-    filterClasses[this.props.filter] += ' selected';
-
-    const maskClasses = `notification-page-mask ${((this.props.isVisible) ? ' visible' : '')}`;
-    const panelClasses = 'notification-center-panel flex-layout flex-col visible';
-    return (
-      <div id="notification-center">
-        <div className={panelClasses} style={{transform: `translate(${this.props.style.x}px)`}}>
-
-          <header className="flex-layout flex-row">
-            <span className="fonticon fonticon-bell" />
-            <h1 className="flex-body">Notifications</h1>
-            <button aria-label="Hide Notifications Center" type="button" onClick={this.props.hideNotificationCenter}>×</button>
-          </header>
-
-          <ul aria-label="Filters" className="notification-filter flex-layout flex-row">
-            <li className={filterClasses.all} title="All notifications" data-filter="all"
-              onClick={() => this.props.selectNotificationFilter('all')}>All</li>
-            <li className={filterClasses.success} title="Success notifications" data-filter="success"
-              onClick={() => this.props.selectNotificationFilter('success')}>
-              <span className="fonticon fonticon-ok-circled" />
-            </li>
-            <li className={filterClasses.error} title="Error notifications" data-filter="error"
-              onClick={() => this.props.selectNotificationFilter('error')}>
-              <span className="fonticon fonticon-attention-circled" />
-            </li>
-            <li className={filterClasses.info} title="Info notifications" data-filter="info"
-              onClick={() => this.props.selectNotificationFilter('info')}>
-              <span className="fonticon fonticon-info-circled" />
-            </li>
-          </ul>
-
-          <div className="flex-body">
-            <TransitionMotion styles={this.getStyles}>
-              {this.getNotifications}
-            </TransitionMotion>
-          </div>
-
-          <footer>
-            <input
-              type="button"
-              value="Clear All"
-              className="btn btn-small btn-secondary"
-              onClick={this.props.clearAllNotifications} />
-          </footer>
-        </div>
-
-        <div className={maskClasses} onClick={this.props.hideNotificationCenter}></div>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelContainer.js b/app/addons/fauxton/notifications/components/NotificationPanelContainer.js
deleted file mode 100644
index a4d37e2..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelContainer.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { connect } from 'react-redux';
-import * as Actions from '../actions';
-import NotificationPanelWithTransition from './NotificationPanelWithTransition';
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    isVisible: notifications.notificationCenterVisible,
-    filter: notifications.selectedNotificationFilter,
-    notifications: notifications.notifications
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    hideNotificationCenter: () => {
-      dispatch(Actions.hideNotificationCenter());
-    },
-    selectNotificationFilter: (filter) => {
-      dispatch(Actions.selectNotificationFilter(filter));
-    },
-    clearAllNotifications: () => {
-      dispatch(Actions.clearAllNotifications());
-    },
-    clearSingleNotification: (toastId) => {
-      dispatch(Actions.clearSingleNotification(toastId));
-    }
-  };
-};
-
-
-const NotificationPanelContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(NotificationPanelWithTransition);
-
-export default NotificationPanelContainer;
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelRow.js b/app/addons/fauxton/notifications/components/NotificationPanelRow.js
deleted file mode 100644
index 8ece5bb..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelRow.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import uuid from 'uuid';
-import Components from '../../../components/react-components';
-const {Copy} = Components;
-
-export default class NotificationPanelRow extends React.Component {
-  static propTypes = {
-    item: PropTypes.object.isRequired,
-    filter: PropTypes.string.isRequired,
-    clearSingleNotification: PropTypes.func.isRequired
-  };
-
-  clearNotification = () => {
-    const {toastId} = this.props.item;
-    this.props.clearSingleNotification(toastId);
-  };
-
-  render() {
-    const iconMap = {
-      success: 'fonticon-ok-circled',
-      error: 'fonticon-attention-circled',
-      info: 'fonticon-info-circled'
-    };
-
-    const timeElapsed = this.props.item.time.fromNow();
-
-    // we can safely do this because the store ensures all notifications are of known types
-    const rowIconClasses = 'fonticon ' + iconMap[this.props.item.type];
-    const hidden = (this.props.filter === 'all' || this.props.filter === this.props.item.type) ? false : true;
-    const {style} = this.props;
-    const {opacity, height} = style;
-    if (opacity === 0 && height === 0) {
-      return null;
-    }
-    // N.B. wrapper <div> needed to ensure smooth hide/show transitions
-    return (
-      <li style={{opactiy: opacity, height: height + 'px', borderBottomColor: `rgba(34, 34, 34, ${opacity})`}} aria-hidden={hidden}>
-        <div className="flex-layout flex-row">
-          <span className={rowIconClasses}></span>
-          <div className="flex-body">
-            <p>{this.props.item.cleanMsg}</p>
-            <div className="notification-actions">
-              <span className="time-elapsed">{timeElapsed}</span>
-              <span className="divider">|</span>
-              <Copy uniqueKey={uuid.v4()} text={this.props.item.cleanMsg} displayType="text" />
-            </div>
-          </div>
-          <button type="button" onClick={this.clearNotification}>×</button>
-        </div>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js b/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js
deleted file mode 100644
index f744283..0000000
--- a/app/addons/fauxton/notifications/components/NotificationPanelWithTransition.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {TransitionMotion, spring} from 'react-motion';
-// import GlobalNotifications from './GlobalNotifications';
-import NotificationCenterPanel from './NotificationCenterPanel';
-
-// The one-stop-shop for Fauxton notifications. This controller handler the header notifications and the rightmost
-// notification center panel
-export default class NotificationPanelWithTransition extends React.Component {
-
-  getStyles = () => {
-    let item = {
-      key: '1',
-      style: {
-        x: 320
-      }
-    };
-
-    if (this.props.isVisible) {
-      item.style = {
-        x: spring(0)
-      };
-    } else {
-      item.style = {
-        x: spring(320)
-      };
-    }
-    return [item];
-  };
-
-  getNotificationCenterPanel = (items) => {
-    const panel = items.map(({style}) => {
-      return <NotificationCenterPanel
-        key={'1'}
-        style={style}
-        {...this.props} />;
-    });
-    return (
-      <aside aria-label="Notifications">
-        {panel}
-      </aside>
-    );
-  };
-
-  render() {
-    return (
-      <TransitionMotion
-        styles={this.getStyles}>
-        {this.getNotificationCenterPanel}
-      </TransitionMotion>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/PermanentNotification.js b/app/addons/fauxton/notifications/components/PermanentNotification.js
deleted file mode 100644
index ff5c396..0000000
--- a/app/addons/fauxton/notifications/components/PermanentNotification.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class PermanentNotification extends React.Component {
-
-  static defaultProps = {
-    visible: false
-  };
-
-  static propTypes = {
-    visible: PropTypes.bool.isRequired,
-    message: PropTypes.string
-  };
-
-  constructor (props) {
-    super(props);
-  }
-
-  // many messages contain HTML, hence the need for dangerouslySetInnerHTML
-  getMsg () {
-    return {__html: this.props.message};
-  }
-
-  getContent () {
-    if (!this.props.visible || !this.props.message) {
-      return null;
-    }
-    return (
-      <p className="perma-warning__content" dangerouslySetInnerHTML={this.getMsg()}></p>
-    );
-  }
-
-  render () {
-    return (
-      <div id="perma-warning">
-        {this.getContent()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js b/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js
deleted file mode 100644
index 123d6db..0000000
--- a/app/addons/fauxton/notifications/components/PermanentNotificationContainer.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { connect } from 'react-redux';
-import PermanentNotification from './PermanentNotification';
-
-const mapStateToProps = ({ notifications }) => {
-  return {
-    visible: notifications.permanentNotificationVisible,
-    message: notifications.permanentNotificationMessage
-  };
-};
-
-const PermanentNotificationContainer = connect(
-  mapStateToProps
-)(PermanentNotification);
-
-export default PermanentNotificationContainer;
diff --git a/app/addons/fauxton/notifications/reducers.js b/app/addons/fauxton/notifications/reducers.js
deleted file mode 100644
index c2b4f77..0000000
--- a/app/addons/fauxton/notifications/reducers.js
+++ /dev/null
@@ -1,143 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import moment from 'moment';
-import app from '../../../app';
-import ActionTypes from './actiontypes';
-import {toast} from "react-toastify";
-
-const initialState = {
-  notifications: [],
-  notificationCenterVisible: false,
-  selectedNotificationFilter: 'all',
-  permanentNotificationVisible: false,
-  permanentNotificationMessage: ''
-};
-
-let counter = 0;
-const validNotificationTypes = ['success', 'error', 'info'];
-const validFilters = ['all', 'success', 'error', 'info'];
-
-function addNotification ({ notifications }, info) {
-  const newNotifications = notifications.slice();
-  info = { ...info };
-  info.toastId = ++counter;
-  info.time = moment();
-  info.cleanMsg = app.utils.stripHTML(info.msg);
-
-  if (info.escape !== true && info.escape !== false) {
-    info.escape = true;
-  }
-
-  info.htmlMsg = {
-    __html: (info.escape ? _.escape(info.cleanMsg) : info.cleanMsg)
-  };
-
-  // clear: true causes all visible messages to be hidden
-  if (info.clear) {
-    const idsToClear = _.map(notifications, 'toastId');
-
-    // Add some delay to prevent weird flickering
-    setTimeout(() => {
-      idsToClear.forEach(id => toast.dismiss(id));
-    }, 800);
-  }
-
-  newNotifications.unshift(info);
-
-  toast(<span dangerouslySetInnerHTML={info.htmlMsg}/>, info);
-
-  return newNotifications;
-}
-
-function clearNotification({ notifications }, toastId) {
-  const idx = notifications.findIndex(el => {
-    return el.toastId === toastId;
-  });
-  if (idx === -1) {
-    // no changes
-    return notifications;
-  }
-
-  const newNotifications = [].concat(notifications);
-  newNotifications.splice(idx, 1);
-
-  toast.dismiss(toastId);
-
-  return newNotifications;
-}
-
-export default function notifications(state = initialState, action) {
-  const { options, type } = action;
-  switch (type) {
-
-    case ActionTypes.ADD_NOTIFICATION:
-      if (!validNotificationTypes.includes(options.info.type)) {
-        return state;
-      }
-      return {
-        ...state,
-        notifications: addNotification(state, options.info)
-      };
-
-    case ActionTypes.CLEAR_ALL_NOTIFICATIONS:
-      toast.dismiss();
-      return {
-        ...state,
-        notifications: []
-      };
-
-    case ActionTypes.CLEAR_SINGLE_NOTIFICATION:
-      return {
-        ...state,
-        notifications: clearNotification(state, options.toastId)
-      };
-
-    case ActionTypes.SHOW_NOTIFICATION_CENTER:
-      return {
-        ...state,
-        notificationCenterVisible: true
-      };
-
-    case ActionTypes.HIDE_NOTIFICATION_CENTER:
-      return {
-        ...state,
-        notificationCenterVisible: false
-      };
-
-    case ActionTypes.SELECT_NOTIFICATION_FILTER:
-      if (!validFilters.includes(options.filter)) {
-        return state;
-      }
-      return {
-        ...state,
-        selectedNotificationFilter: options.filter
-      };
-
-    case ActionTypes.SHOW_PERMANENT_NOTIFICATION:
-      return {
-        ...state,
-        permanentNotificationVisible: true,
-        permanentNotificationMessage: options.msg
-      };
-
-    case ActionTypes.HIDE_PERMANENT_NOTIFICATION:
-      return {
-        ...state,
-        permanentNotificationVisible: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/fauxton/tests/nightwatch/highlightsidebar.js b/app/addons/fauxton/tests/nightwatch/highlightsidebar.js
deleted file mode 100644
index 8dd1588..0000000
--- a/app/addons/fauxton/tests/nightwatch/highlightsidebar.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Highlight Sidebar' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl)
-      .waitForElementPresent('.add-new-database-btn', waitTime, false)
-      .click('a[href="#/replication"]')
-      .pause(1000)
-      .waitForElementVisible('.replication__activity_header-btn', waitTime, false)
-      .assert.cssClassPresent('a[href="#/replication"]', 'faux-navbar__link--active')
-      .end();
-  }
-};
diff --git a/app/addons/fauxton/tests/nightwatch/notificationCenter.js b/app/addons/fauxton/tests/nightwatch/notificationCenter.js
deleted file mode 100644
index 2738250..0000000
--- a/app/addons/fauxton/tests/nightwatch/notificationCenter.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-
-
-module.exports = {
-  'Notification Center' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .url(baseUrl + '/#/login')
-
-      // confirm the btn doesn't appear on the login screen
-      .waitForElementPresent('a[href="#/login"]', waitTime, false)
-      .waitForElementNotPresent('#notification-center-btn div.fonticon-bell', waitTime, false)
-
-      .loginToGUI()
-      .waitForElementNotPresent('.notification-wrapper', waitTime, false)
-      .waitForElementPresent('#notification-center-btn', waitTime, false)
-      .assert.cssClassNotPresent('.notification-page-mask', 'visible')
-      .clickWhenVisible('#notification-center-btn', waitTime, false)
-      .waitForElementPresent('.notification-page-mask.visible', waitTime, false)
-      .waitForElementPresent('.notification-list div.flex-layout', waitTime, false)
-
-      .getText('.notification-center-panel', function (result) {
-        var content = result.value;
-        this.verify.ok(/You\shave\sbeen\slogged\sin\./.test(content),
-          'Confirming login message appears');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js b/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js
deleted file mode 100644
index 354ad39..0000000
--- a/app/addons/fauxton/tests/nightwatch/updatesUrlsSameRouteobject.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-
-
-module.exports = {
-  'it updates the API url even for routes in the same routeobject' : function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_find')
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', newDatabaseName + '/_find')
-      .clickWhenVisible('.edit-link')
-      .waitForElementVisible('.prettyprint', waitTime, false)
-      .waitForElementVisible('.faux__jsonlink-link', waitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', newDatabaseName + '/_index')
-      .end();
-  }
-};
diff --git a/app/addons/news/assets/less/news.less b/app/addons/news/assets/less/news.less
deleted file mode 100644
index d3cd9cf..0000000
--- a/app/addons/news/assets/less/news.less
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-.news-page {
-  width: 100%;
-  height: 100%;
-
-  .news-checkbox {
-    margin-top: 8px;
-    input {
-      margin: 0 4px 0 0;
-    }
-  }
-}
diff --git a/app/addons/news/base.js b/app/addons/news/base.js
deleted file mode 100644
index cebd785..0000000
--- a/app/addons/news/base.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import News from "./routes";
-import "./assets/less/news.less";
-
-News.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    id: 'News',
-    title: 'News',
-    icon: 'fonticon-clipboard',
-    href: '#/news',
-    bottomNav: true,
-    top: true
-  });
-};
-
-export default News;
diff --git a/app/addons/news/components.js b/app/addons/news/components.js
deleted file mode 100644
index b4581b8..0000000
--- a/app/addons/news/components.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// Licensed 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.
-import app from "../../app";
-
-import React from "react";
-
-const LoadNewsButton = ({ showNews, isChecked, toggleChange }) => {
-  return (
-    <div>
-      <p>
-        When you click this button, you are requesting content and sharing your IP address with <a href="https://blog.couchdb.org/">blog.couchdb.org</a> which is edited by the Apache CouchDB PMC and maintained by <a href="https://wordpress.com/">wordpress.com</a>.
-      </p>
-      <p>
-        If you don’t want to share your IP address, do not click the button.
-      </p>
-      <button className="btn btn-primary" onClick={showNews}>Load News</button>
-      <label className="news-checkbox">
-        <input type="checkbox"
-          checked={isChecked}
-          onChange={toggleChange}
-        />
-        Remember my choice
-      </label>
-    </div>
-  );
-};
-
-class NewsPage extends React.Component {
-  constructor (props) {
-    super(props);
-    this.showNews = this.showNews.bind(this);
-    this.toggleChange = this.toggleChange.bind(this);
-
-    const allowsIpSharing = !!app.utils.localStorageGet('allow-IP-sharing');
-
-    this.state = {
-      showNews: allowsIpSharing ? true : false,
-      allowsIpSharing
-    };
-  }
-
-  showNews() {
-    this.setState({ showNews: true });
-  }
-
-  toggleChange() {
-    const allowsIpSharing = this.state.allowsIpSharing;
-    this.setState({ allowsIpSharing: !allowsIpSharing });
-    app.utils.localStorageSet('allow-IP-sharing', !allowsIpSharing);
-  }
-
-  render() {
-    let newsContent = <LoadNewsButton
-      showNews={this.showNews}
-      toggleChange={this.toggleChange}
-      isChecked={this.state.allowsIpSharing}></LoadNewsButton>;
-
-    if (this.state.showNews) {
-      newsContent = <iframe src="https://blog.couchdb.org" width="100%" height="100%"></iframe>;
-    }
-
-    return (
-      <div className="news-page">
-        {newsContent}
-      </div>
-    );
-  }
-}
-
-export default {
-  NewsPage: NewsPage
-};
diff --git a/app/addons/news/routes.js b/app/addons/news/routes.js
deleted file mode 100644
index fd152eb..0000000
--- a/app/addons/news/routes.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import NewsComponents from "./components";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-var NewsRouteObject = FauxtonAPI.RouteObject.extend({
-  selectedHeader: 'News',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-  routes: {
-    'news': 'news'
-  },
-  roles: ['fx_loggedIn'],
-  news: function () {
-    return <OnePaneSimpleLayout
-      component={<NewsComponents.NewsPage/>}
-      crumbs={[
-        {'name': 'News'}
-      ]}
-    />;
-  }
-});
-NewsRouteObject.RouteObjects = [NewsRouteObject];
-
-export default NewsRouteObject;
diff --git a/app/addons/permissions/__tests__/actions-test.js b/app/addons/permissions/__tests__/actions-test.js
deleted file mode 100644
index 5f74223..0000000
--- a/app/addons/permissions/__tests__/actions-test.js
+++ /dev/null
@@ -1,112 +0,0 @@
-// Licensed 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.
-
-import {
-  setPermissionOnObject,
-  deletePermissionFromObject
-} from '../actions';
-
-
-describe('Permissions Actions', () => {
-
-  describe('deleting roles', () => {
-    it('throws if a role is not in permissions', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      expect(() => {
-        deletePermissionFromObject(p, 'admins', 'names', 'pizza');
-      }).toThrow();
-    });
-
-    it('deletes roles', () => {
-      const p = {
-        admins: {
-          names: ['abc', 'furbie'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      const res = deletePermissionFromObject(p, 'admins', 'names', 'abc');
-
-      expect(res).toEqual({
-        admins: {
-          names: ['furbie'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      });
-    });
-
-  });
-
-  describe('adding roles', () => {
-    it('throws if a role is already in permissions', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      expect(() => {
-        setPermissionOnObject(p, 'admins', 'names', 'abc');
-      }).toThrow();
-    });
-
-    it('adds if not already present', () => {
-      const p = {
-        admins: {
-          names: ['abc'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      };
-
-      const res = setPermissionOnObject(p, 'admins', 'names', 'test123');
-
-      expect(res).toEqual({
-        admins: {
-          names: ['abc', 'test123'],
-          roles: []
-        },
-        members: {
-          names: [],
-          roles: []
-        }
-      });
-    });
-
-  });
-});
diff --git a/app/addons/permissions/__tests__/container-test.js b/app/addons/permissions/__tests__/container-test.js
deleted file mode 100644
index 83aaf0b..0000000
--- a/app/addons/permissions/__tests__/container-test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-import { receivedPermissions } from '../actions';
-
-import React from 'react';
-import { mount } from 'enzyme';
-
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-
-import reducer from '../reducers';
-import PermissionsContainer from '../container/PermissionsContainer';
-
-var fetchMock = require('fetch-mock');
-
-describe('Permissions Container', () => {
-
-  it('renders with new results', () => {
-
-    fetchMock.once("*", {});
-
-    const middlewares = [thunk];
-    const store = createStore(
-      combineReducers({ permissions: reducer}),
-      applyMiddleware(...middlewares)
-    );
-
-    const wrapper = mount(
-      <Provider store={store}>
-        <PermissionsContainer url="http://example.com/abc" />
-      </Provider>
-    );
-
-    store.dispatch(
-      receivedPermissions({
-        admins:  { names: ['banana'], roles: [] }
-      })
-    );
-
-    wrapper.update();
-    const item = wrapper
-      .find('.permissions__admins .permissions__entry');
-
-    expect(item.text()).toContain('banana');
-  });
-});
diff --git a/app/addons/permissions/__tests__/helpers-test.js b/app/addons/permissions/__tests__/helpers-test.js
deleted file mode 100644
index a3fd54b..0000000
--- a/app/addons/permissions/__tests__/helpers-test.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Licensed 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.
-
-import {
-  isValueAlreadySet,
-  addValueToPermissions
-} from '../helpers';
-
-describe('Permissions - Helpers', () => {
-
-  describe('isValueAlreadySet', () => {
-
-    it('returns false if object does not have properties', () => {
-
-      let permissions = {};
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-
-      permissions = { admins: {} };
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-
-      permissions = { admins: { names: [] } };
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(false);
-    });
-
-    it('confirms existing properties', () => {
-
-      const permissions = { admins: { names: ['michelle', 'rocko', 'garren'] } };
-
-      expect(
-        isValueAlreadySet(permissions, 'admins', 'names', 'rocko')
-      ).toBe(true);
-    });
-
-  });
-
-  describe('addValueToPermissions', () => {
-
-    it('adds values, even if properties not set', () => {
-
-      const permissions = {};
-      expect(
-        addValueToPermissions(permissions, 'admins', 'names', 'rocko')
-      ).toEqual({
-        admins: {
-          names: ['rocko']
-        }
-      });
-    });
-
-    it('adds values', () => {
-
-      const permissions = {
-        admins: {
-          names: ['rocko']
-        }
-      };
-
-      expect(
-        addValueToPermissions(permissions, 'admins', 'names', 'garren')
-      ).toEqual({
-        admins: {
-          names: ['rocko', 'garren']
-        }
-      });
-    });
-
-  });
-
-});
diff --git a/app/addons/permissions/__tests__/permissionsScreen-test.js b/app/addons/permissions/__tests__/permissionsScreen-test.js
deleted file mode 100644
index 2283a47..0000000
--- a/app/addons/permissions/__tests__/permissionsScreen-test.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import { mount } from 'enzyme';
-
-import PermissionsScreen from '../components/PermissionsScreen';
-
-
-describe('PermissionsScreen', () => {
-
-  it('add permississon: does not dispatch if value already exists', () => {
-
-    const security = {
-      admins:  { names: ['abc'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen
-        adminRoles={security.admins.roles}
-        adminNames={security.admins.names}
-        memberRoles={security.members.roles}
-        memberNames={security.members.names}
-        security={security}
-        dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user input')
-      .simulate('change', {target: {value: 'abc'}});
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user')
-      .simulate('submit');
-
-    expect(stub).not.toHaveBeenCalled();
-  });
-
-  it('add permississon: dispatches if values does not exist', () => {
-
-    const security = {
-      admins:  { names: ['pineapple'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen security={security} dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user input')
-      .simulate('change', {target: {value: 'mango'}});
-
-    wrapper
-      .find('.permissions__admins .permissions-add-user')
-      .simulate('submit');
-
-    expect(stub).toHaveBeenCalled();
-  });
-
-  it('remove permississon: dispatches', () => {
-
-    const security = {
-      admins:  { names: ['pineapple'], roles: [] },
-      members: { names: [], roles: [] }
-    };
-    const stub = jest.fn();
-
-    const wrapper = mount(
-      <PermissionsScreen
-        adminRoles={security.admins.roles}
-        adminNames={security.admins.names}
-        memberRoles={security.members.roles}
-        memberNames={security.members.names}
-        security={security}
-        dispatch={stub} />
-    );
-
-    wrapper
-      .find('.permissions__admins .permissions__entry button')
-      .simulate('click');
-
-    expect(stub).toHaveBeenCalled();
-  });
-});
diff --git a/app/addons/permissions/actions.js b/app/addons/permissions/actions.js
deleted file mode 100644
index 2b44b49..0000000
--- a/app/addons/permissions/actions.js
+++ /dev/null
@@ -1,129 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import 'whatwg-fetch';
-import { isValueAlreadySet, addValueToPermissions } from './helpers';
-
-
-import {
-  PERMISSIONS_UPDATE
-} from './actiontypes';
-
-
-export const receivedPermissions = json => {
-  return {
-    type: PERMISSIONS_UPDATE,
-    permissions: json
-  };
-};
-
-export const fetchPermissions = url => dispatch => {
-  return fetch(url, {
-    headers: {'Accept': 'application/json' },
-    credentials: 'include'
-  })
-    .then((res) => res.json())
-    .then(json => {
-      if (json.error && json.reason) {
-        dispatch(receivedPermissions(
-          {admins:{roles:["_admin"]}, members:{roles:["_admin"]}}));
-        throw new Error(json.reason);
-      }
-      dispatch(receivedPermissions(json));
-    })
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: 'Failed to retrieve permissions. Please try again. Reason:'
-         + err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const setPermissionOnObject = (p, section, type, value) => {
-  if (isValueAlreadySet(p, section, type, value)) {
-    throw new Error('Role/Name has already been added');
-  }
-
-  const res = addValueToPermissions(p, section, type, value);
-
-  return res;
-};
-
-export const deletePermissionFromObject = (p, section, type, value) => {
-  if (!isValueAlreadySet(p, section, type, value)) {
-    throw new Error('Role/Name does not exist');
-  }
-
-  p[section][type] = p[section][type].filter((el) => {
-    return el !== value;
-  });
-
-  return p;
-};
-
-export const updatePermission = (url, permissions, section, type, value) => dispatch => {
-  setPermissionOnObject(permissions, section, type, value);
-
-  updatePermissionUnsafe(url, permissions, dispatch)
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const deletePermission = (url, permissions, section, type, value) => dispatch => {
-  deletePermissionFromObject(permissions, section, type, value);
-
-  updatePermissionUnsafe(url, permissions, dispatch)
-    .catch((err) => {
-      FauxtonAPI.addNotification({
-        msg: err.message,
-        type: 'error'
-      });
-    });
-};
-
-export const updatePermissionUnsafe = (url, p, dispatch) => {
-  return fetch(url, {
-    headers: {
-      'Accept': 'application/json',
-      'Content-Type': 'application/json'
-    },
-    credentials: 'include',
-    method: 'PUT',
-    body: JSON.stringify(p)
-  })
-    .then((res) => res.json())
-    .then((json) => {
-      if (!json.ok) {
-        throw new Error(json.reason);
-      }
-      return json;
-    })
-    .then(() => {
-      FauxtonAPI.addNotification({
-        msg: 'Database permissions has been updated.'
-      });
-
-      return dispatch(receivedPermissions(p));
-    })
-    .catch((error) => {
-      FauxtonAPI.addNotification({
-        msg: 'Could not update permissions - reason: ' + error,
-        type: 'error'
-      });
-    });
-};
diff --git a/app/addons/permissions/actiontypes.js b/app/addons/permissions/actiontypes.js
deleted file mode 100644
index f474fbd..0000000
--- a/app/addons/permissions/actiontypes.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Licensed 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.
-
-
-export const PERMISSIONS_UPDATE = 'PERMISSIONS_UPDATE';
diff --git a/app/addons/permissions/assets/less/permissions.less b/app/addons/permissions/assets/less/permissions.less
deleted file mode 100644
index 3c206d0..0000000
--- a/app/addons/permissions/assets/less/permissions.less
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-@import "../../../../../assets/less/variables.less";
-
-.permission-items.unstyled {
-  margin-left: 0px;
-  li {
-    padding: 5px;
-    border-bottom: 1px solid #E3E3E3;
-    border-right: 1px solid #E3E3E3;
-    border-left: 3px solid #E3E3E3;
-    &:first-child {
-      border-top: 1px solid #E3E3E3;
-    }
-    &:nth-child(odd) {
-      border-left: 3px solid red;
-    }
-  }
-}
-
-#dashboard #dashboard-content div.permissions-page {
-  padding: 5px @panelPadding;
-}
diff --git a/app/addons/permissions/base.js b/app/addons/permissions/base.js
deleted file mode 100644
index c02fbba..0000000
--- a/app/addons/permissions/base.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import Permissions from "./routes";
-import reducers from './reducers';
-import "./assets/less/permissions.less";
-
-Permissions.initialize = function () {};
-
-FauxtonAPI.addReducers({
-  permissions: reducers
-});
-
-export default Permissions;
diff --git a/app/addons/permissions/components/Permissions.js b/app/addons/permissions/components/Permissions.js
deleted file mode 100644
index bb7f273..0000000
--- a/app/addons/permissions/components/Permissions.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from 'react';
-
-import PermissionsScreen  from './PermissionsScreen';
-
-import { fetchPermissions } from '../actions';
-import { LoadLines } from '../../components/components/loadlines';
-
-
-export default class Permissions extends Component {
-
-  constructor (props) {
-    super(props);
-  }
-
-  componentDidMount() {
-    const { dispatch, url } = this.props;
-    dispatch(fetchPermissions(url));
-  }
-
-  render () {
-    const { isLoading } = this.props;
-
-    return (
-      isLoading ? <LoadLines /> : <PermissionsScreen {...this.props} />
-    );
-  }
-}
-
-Permissions.propTypes = {
-  isLoading: PropTypes.bool.isRequired,
-  adminRoles: PropTypes.array.isRequired,
-  adminNames: PropTypes.array.isRequired,
-  memberNames: PropTypes.array.isRequired,
-  memberRoles: PropTypes.array.isRequired,
-  security: PropTypes.object.isRequired
-};
diff --git a/app/addons/permissions/components/PermissionsItem.js b/app/addons/permissions/components/PermissionsItem.js
deleted file mode 100644
index 069b77a..0000000
--- a/app/addons/permissions/components/PermissionsItem.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-const PermissionsItem = ({removeItem, section, type, value}) => {
-
-  return (
-    <li className="permissions__entry">
-      <span>{value}</span>
-      <button
-        onClick={() => removeItem(section, type, value)}
-        type="button"
-        className="pull-right close"
-      >
-        ×
-      </button>
-    </li>
-  );
-};
-
-PermissionsItem.propTypes = {
-  value: PropTypes.string.isRequired,
-  removeItem: PropTypes.func.isRequired,
-};
-
-export default PermissionsItem;
diff --git a/app/addons/permissions/components/PermissionsScreen.js b/app/addons/permissions/components/PermissionsScreen.js
deleted file mode 100644
index a118761..0000000
--- a/app/addons/permissions/components/PermissionsScreen.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import FauxtonAPI from '../../../core/api';
-
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-
-import React, { Component } from 'react';
-
-import PermissionsSection from './PermissionsSection';
-import { updatePermission, deletePermission } from '../actions';
-import { isValueAlreadySet } from '../helpers';
-
-export default class PermissionsScreen extends Component {
-
-  constructor (props) {
-    super(props);
-
-    this.addItem = this.addItem.bind(this);
-    this.removeItem = this.removeItem.bind(this);
-  }
-
-  addItem ({ section, type, value }) {
-
-    if (isValueAlreadySet(this.props.security, section, type, value)) {
-      FauxtonAPI.addNotification({
-        msg: 'Role/Name has already been added',
-        type: 'error'
-      });
-
-      return null;
-    }
-
-    this.props.dispatch(
-      updatePermission(this.props.url, this.props.security, section, type, value)
-    );
-  }
-
-  removeItem (section, type, value) {
-
-    this.props.dispatch(
-      deletePermission(this.props.url, this.props.security, section, type, value)
-    );
-  }
-
-  render () {
-    const {
-      adminRoles,
-      adminNames,
-      memberRoles,
-      memberNames
-    } = this.props;
-
-    return (
-      <div className="permissions-page flex-body">
-        <div>
-          <PermissionsSection
-            roles={adminRoles}
-            names={adminNames}
-            addItem={this.addItem}
-            removeItem={this.removeItem}
-            section="admins" />
-
-          <PermissionsSection
-            roles={memberRoles}
-            names={memberNames}
-            addItem={this.addItem}
-            removeItem={this.removeItem}
-            section="members" />
-        </div>
-      </div>
-    );
-  }
-
-}
-
-PermissionsScreen.propTypes = {
-  security: PropTypes.object.isRequired
-};
diff --git a/app/addons/permissions/components/PermissionsSection.js b/app/addons/permissions/components/PermissionsSection.js
deleted file mode 100644
index da24bb6..0000000
--- a/app/addons/permissions/components/PermissionsSection.js
+++ /dev/null
@@ -1,158 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import _ from 'lodash';
-
-import PermissionsItem from './PermissionsItem';
-
-
-const getDocUrl = app.helpers.getDocUrl;
-
-class PermissionsSection extends React.Component {
-  static defaultProps = {
-    names: [],
-    roles: []
-  };
-
-  state = {
-    newRole: '',
-    newName: ''
-  };
-
-  getHelp = () => {
-    if (this.props.section === 'admins') {
-      return 'Database members can access the database. If no members are defined, the database is public. ';
-    }
-
-    return 'Database members can access the database. If no members are defined, the database is public. ';
-  };
-
-  isEmptyValue = (value, type) => {
-    if (!_.isEmpty(value)) {
-      return false;
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Cannot add an empty value for ' + type + '.',
-      type: 'error'
-    });
-
-    return true;
-  };
-
-  addNames = (e) => {
-    e.preventDefault();
-    if (this.isEmptyValue(this.state.newName, 'names')) {
-      return;
-    }
-    this.props.addItem({
-      type: 'names',
-      section: this.props.section,
-      value: this.state.newName
-    });
-
-    this.setState({newName: ''});
-  };
-
-  addRoles = (e) => {
-    e.preventDefault();
-    if (this.isEmptyValue(this.state.newRole, 'roles')) {
-      return;
-    }
-    this.props.addItem({
-      type: 'roles',
-      section: this.props.section,
-      value: this.state.newRole
-    });
-
-    this.setState({newRole: ''});
-  };
-
-  getItems = (items, type) => {
-    return items.map((item, i) => {
-      return <PermissionsItem
-        key={i}
-        value={item}
-        section={this.props.section}
-        type={type}
-        removeItem={this.props.removeItem} />;
-    });
-  };
-
-  getNames = () => {
-    return this.getItems(this.props.names, 'names');
-  };
-
-  getRoles = () => {
-    return this.getItems(this.props.roles, 'roles');
-  };
-
-  nameChange = (e) => {
-    this.setState({newName: e.target.value});
-  };
-
-  roleChange = (e) => {
-    this.setState({newRole: e.target.value});
-  };
-
-  render() {
-
-    const { section } = this.props;
-
-    return (
-      <div className={"permissions__" + section}>
-        <header className="page-header">
-          <h3>{section}</h3>
-          <p className="help">
-            {this.getHelp()}
-            <a className="help-link" data-bypass="true" href={getDocUrl('DB_PERMISSION')} target="_blank" rel="noopener noreferrer">
-              <i className="icon-question-sign"></i>
-            </a>
-          </p>
-        </header>
-        <div className="row-fluid">
-          <div className="span6">
-            <header>
-              <h4>Users</h4>
-              <p>Specify users who will have {this.props.section} access to this database.</p>
-            </header>
-            <form onSubmit={this.addNames} className="permission-item-form permissions-add-user form-inline">
-              <input onChange={this.nameChange} value={this.state.newName} type="text" className="item input-small" placeholder="Username" />
-              <button type="submit" className="btn btn-primary"><i className="icon fonticon-plus-circled" /> Add User</button>
-            </form>
-            <ul className="unstyled permission-items span10">
-              {this.getNames()}
-            </ul>
-          </div>
-          <div className="span6">
-            <header>
-              <h4>Roles</h4>
-              <p>Users with any of the following role(s) will have {this.props.section} access.</p>
-            </header>
-            <form onSubmit={this.addRoles} className="permission-item-form permissions-add-role form-inline">
-              <input onChange={this.roleChange} value={this.state.newRole} type="text" className="item input-small" placeholder="Role" />
-              <button type="submit" className="btn btn-primary"><i className="icon fonticon-plus-circled" /> Add Role</button>
-            </form>
-            <ul className="unstyled permission-items span10">
-              {this.getRoles()}
-            </ul>
-          </div>
-        </div>
-      </div>
-    );
-  }
-}
-
-export default PermissionsSection;
diff --git a/app/addons/permissions/container/PermissionsContainer.js b/app/addons/permissions/container/PermissionsContainer.js
deleted file mode 100644
index f5cbcaf..0000000
--- a/app/addons/permissions/container/PermissionsContainer.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-import { connect } from 'react-redux';
-
-import Permissions from '../components/Permissions';
-
-import {
-  getIsLoading,
-  getSecurity,
-  getAdminRoles,
-  getAdminNames,
-  getMemberNames,
-  getMemberRoles
-} from '../reducers';
-
-
-const mapStateToProps = ({permissions}) => {
-  return {
-    isLoading: getIsLoading(permissions),
-    adminRoles: getAdminRoles(permissions),
-    adminNames: getAdminNames(permissions),
-    memberNames: getMemberNames(permissions),
-    memberRoles: getMemberRoles(permissions),
-    security: getSecurity(permissions)
-  };
-};
-
-export default connect(
-  mapStateToProps
-)(Permissions);
diff --git a/app/addons/permissions/helpers.js b/app/addons/permissions/helpers.js
deleted file mode 100644
index 6658f8c..0000000
--- a/app/addons/permissions/helpers.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed 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.
-
-export function isValueAlreadySet (p, section, type, value) {
-
-  if (!p[section]) {
-    return false;
-  }
-
-  if (!p[section][type]) {
-    return false;
-  }
-
-  return p[section][type].indexOf(value) !== -1;
-}
-
-export function addValueToPermissions (p, section, type, value) {
-
-  if (!p[section]) {
-    p[section] = {};
-  }
-
-  if (!p[section][type]) {
-    p[section][type] = [];
-  }
-
-  p[section][type].push(value);
-
-  return p;
-}
diff --git a/app/addons/permissions/layout.js b/app/addons/permissions/layout.js
deleted file mode 100644
index 435a37b..0000000
--- a/app/addons/permissions/layout.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import {TabsSidebarHeader} from '../documents/layouts';
-import PermissionsContainer from './container/PermissionsContainer';
-import SidebarControllerContainer from "../documents/sidebar/SidebarControllerContainer";
-import {SidebarItemSelection} from '../documents/sidebar/helpers';
-
-export const PermissionsLayout = ({docURL, database, endpoint, dbName, dropDownLinks, partitionKey}) => {
-  const selectedNavItem = new SidebarItemSelection('permissions');
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        hideQueryOptions={true}
-        hideJumpToDoc={true}
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={dbName}
-        dropDownLinks={dropDownLinks}
-        database={database}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <PermissionsContainer url={endpoint} />
-        </section>
-      </div>
-    </div>
-  );
-};
-
-export default PermissionsLayout;
diff --git a/app/addons/permissions/reducers.js b/app/addons/permissions/reducers.js
deleted file mode 100644
index 20bb27d..0000000
--- a/app/addons/permissions/reducers.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// Licensed 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.
-
-import {
-  PERMISSIONS_UPDATE
-} from './actiontypes';
-
-const initialState = {
-  isLoading: true,
-  security: {},
-  adminRoles: [],
-  adminNames: [],
-  memberNames: [],
-  memberRoles: []
-};
-
-export default function permissions (state = initialState, action) {
-  switch (action.type) {
-
-    case PERMISSIONS_UPDATE:
-      const { permissions } = action;
-      return Object.assign({}, state, {
-        isLoading: false,
-
-        security: permissions,
-        adminRoles: getRoles('admins', permissions),
-        adminNames: getNames('admins', permissions),
-        memberRoles: getRoles('members', permissions),
-        memberNames: getNames('members', permissions)
-      });
-
-    default:
-      return state;
-  }
-}
-
-function getRoles (type, permissions) {
-  if (!permissions[type]) {
-    return [];
-  }
-
-  return permissions[type].roles ? permissions[type].roles : [];
-}
-
-function getNames (type, permissions) {
-  if (!permissions[type]) {
-    return [];
-  }
-
-  return permissions[type].names ? permissions[type].names : [];
-}
-
-export const getIsLoading = state => state.isLoading;
-export const getSecurity = state => state.security;
-export const getAdminRoles = state => state.adminRoles;
-export const getAdminNames = state => state.adminNames;
-export const getMemberNames = state => state.memberNames;
-export const getMemberRoles = state => state.memberRoles;
diff --git a/app/addons/permissions/routes.js b/app/addons/permissions/routes.js
deleted file mode 100644
index f18e1e1..0000000
--- a/app/addons/permissions/routes.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from '../../app';
-import FauxtonAPI from '../../core/api';
-import Databases from '../databases/base';
-import BaseRoute from '../documents/shared-routes';
-import Layout from './layout';
-
-const PermissionsRouteObject = BaseRoute.extend({
-
-  roles: ['fx_loggedIn'],
-  routes: {
-    'database/:database/_partition/:partitionKey/permissions': {
-      route: 'permissions',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/permissions': {
-      route: 'permissions',
-      roles: ['fx_loggedIn']
-    }
-  },
-
-  initialize: function () {
-    const docOptions = app.getParams();
-
-    docOptions.include_docs = true;
-  },
-
-  permissions: function (databaseId, partitionKey) {
-
-    // XXX magic inheritance props we need to maintain for BaseRoute
-    this.database = new Databases.Model({ id: databaseId });
-
-    // XXX magic methods we have to call - originating from BaseRoute.extend
-    this.createDesignDocsCollection();
-    this.addSidebar('permissions');
-
-    const crumbs = [
-      { name: this.database.id, link: Databases.databaseUrl(databaseId)},
-      { name: 'Permissions' }
-    ];
-
-    const encodedDatabaseId = encodeURIComponent(databaseId);
-    const url = FauxtonAPI.urls('permissions', 'server', encodedDatabaseId);
-
-    return <Layout
-      docURL={FauxtonAPI.constants.DOC_URLS.DB_PERMISSION}
-      endpoint={url}
-      dbName={this.database.id}
-      dropDownLinks={crumbs}
-      database={this.database}
-      partitionKey={partitionKey} />;
-
-  }
-});
-
-const Permissions = {
-  RouteObjects: [PermissionsRouteObject]
-};
-
-export default Permissions;
diff --git a/app/addons/permissions/tests/nightwatch/permissions.js b/app/addons/permissions/tests/nightwatch/permissions.js
deleted file mode 100644
index a51db00..0000000
--- a/app/addons/permissions/tests/nightwatch/permissions.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-
-module.exports = {
-
-  'CouchDB Database Permissions Test' : (client) => {
-
-    const waitTime = client.globals.maxWaitTime;
-    const newDatabaseName = client.globals.testDatabaseName;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/permissions')
-
-      .waitForElementVisible('.permissions__admins', waitTime, false)
-
-      .setValue('.permissions__admins [placeholder="Username"]', 'blergie')
-      .clickWhenVisible('.permissions__admins .permissions-add-user button')
-
-      .waitForElementVisible('.permissions__admins .permissions__entry', waitTime, false)
-      .assert.containsText('.permissions__entry span', 'blergie')
-
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/permissions')
-      .waitForElementVisible('.permissions__admins .permissions__entry', waitTime, false)
-      .assert.containsText('.permissions__entry span', 'blergie')
-
-      .end();
-  }
-};
diff --git a/app/addons/replication/__tests__/actions.test.js b/app/addons/replication/__tests__/actions.test.js
deleted file mode 100644
index b9cfa64..0000000
--- a/app/addons/replication/__tests__/actions.test.js
+++ /dev/null
@@ -1,276 +0,0 @@
-// Licensed 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.
-
-import {replicate, getReplicationStateFrom, deleteDocs} from '../actions';
-import ActionTypes from '../actiontypes';
-import fetchMock from 'fetch-mock';
-import FauxtonAPI from '../../../core/api';
-
-FauxtonAPI.session = {
-  user () {
-    return {
-      name: 'test-user-name'
-    };
-  }
-};
-
-describe("Replication Actions", () => {
-
-  describe('replicate', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('creates a new database if it does not exist', () => {
-      const dispatch = () => {};
-      fetchMock.postOnce('./_replicator', {
-        status: 404,
-        body: {
-          error: "not_found",
-          reason: "Database does not exist."
-        }
-      });
-
-      fetchMock.putOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      });
-
-      const finalPost = fetchMock.postOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      }, { overwriteRoutes: false });
-
-      return replicate ({
-        localSource: "animaldb",
-        localTarget: "boom123",
-        password: "testerpass",
-        remoteSource: "",
-        remoteTarget: "",
-        replicationDocName: "",
-        replicationSource: "REPLICATION_SOURCE_LOCAL",
-        replicationTarget: "REPLICATION_TARGET_NEW_LOCAL_DATABASE",
-        replicationType: "",
-        username: "tester"
-      })(dispatch).then(() => {
-        expect(finalPost.calls('./_replicator').length).toBe(3);
-
-        //fetchMock.done();
-      });
-    });
-
-    it('does not try to create new database if it already exist', () => {
-      const dispatch = () => {};
-      const mockPost = fetchMock.postOnce('./_replicator', {
-        status: 200,
-        body: {
-          ok: true
-        }
-      });
-
-      return replicate ({
-        localSource: "animaldb",
-        localTarget: "boom123",
-        password: "testerpass",
-        remoteSource: "",
-        remoteTarget: "",
-        replicationDocName: "",
-        replicationSource: "REPLICATION_SOURCE_LOCAL",
-        replicationTarget: "REPLICATION_TARGET_NEW_LOCAL_DATABASE",
-        replicationType: "",
-        username: "tester"
-      })(dispatch).then(() => {
-        expect(mockPost.calls('./_replicator').length).toBe(1);
-        fetchMock.done();
-      });
-    });
-  });
-
-  describe('getReplicationStateFrom', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    const doc = {
-      "_id": "7dcea9874a8fcb13c6630a1547001559",
-      "_rev": "2-98d29cc74e77b6dc38f5fc0dcec0033c",
-      "user_ctx": {
-        "name": "tester",
-        "roles": [
-          "_admin",
-          "_reader",
-          "_writer"
-        ]
-      },
-      "source": {
-        "headers": {
-          "Authorization": "Basic dGVzdGVyOnRlc3RlcnBhc3M="
-        },
-        "url": "http://localhost:8000/animaldb"
-      },
-      "target": {
-        "headers": {
-          "Authorization": "Basic dGVzdGVyOnRlc3RlcnBhc3M="
-        },
-        "url": "http://localhost:8000/boom123"
-      },
-      "create_target": true,
-      "continuous": false,
-      "owner": "tester",
-      "_replication_id": "90ff5a45623aa6821a6b0c20f5d3b5e8"
-    };
-
-    const docState = {
-      "replicationDocName": "7dcea9874a8fcb13c6630a1547001559",
-      "replicationType": "REPLICATION_TYPE_ONE_TIME",
-      "replicationSource": "REPLICATION_SOURCE_LOCAL",
-      "localSource": "animaldb",
-      "sourceAuthType":"BASIC_AUTH",
-      "sourceAuth":{"username":"tester", "password":"testerpass"},
-      "replicationTarget": "REPLICATION_TARGET_EXISTING_LOCAL_DATABASE",
-      "localTarget": "boom123",
-      "targetAuthType":"BASIC_AUTH",
-      "targetAuth":{"username":"tester", "password":"testerpass"},
-      "targetDatabasePartitioned": false
-    };
-
-    it('builds up correct state', (done) => {
-      const dispatch = ({type, options}) => {
-        if (ActionTypes.REPLICATION_SET_STATE_FROM_DOC === type) {
-          expect(options).toEqual(docState);
-          done();
-        }
-      };
-
-      fetchMock.getOnce('./_replicator/7dcea9874a8fcb13c6630a1547001559', doc);
-      getReplicationStateFrom(doc._id)(dispatch);
-    });
-
-    it('builds up correct state with custom auth', (done) => {
-      const docWithCustomAuth = Object.assign(
-        {}, doc, {
-          "_id": "rep_custom_auth",
-          "continuous": true,
-          "source": {
-            "headers": {},
-            "url": "http://localhost:8000/animaldb",
-            "auth": {
-              "creds": "source_user_creds"
-            }
-          },
-          "target": {
-            "headers": {},
-            "url": "http://localhost:8000/boom123",
-            "auth": {
-              "creds": "target_user_creds"
-            }
-          }
-        });
-
-      const docStateWithCustomAuth = {
-        "replicationDocName": "rep_custom_auth",
-        "replicationType": "REPLICATION_TYPE_CONTINUOUS",
-        "replicationSource": "REPLICATION_SOURCE_LOCAL",
-        "localSource": "animaldb",
-        "sourceAuthType":"TEST_CUSTOM_AUTH",
-        "sourceAuth":{"creds":"source_user_creds"},
-        "replicationTarget": "REPLICATION_TARGET_EXISTING_LOCAL_DATABASE",
-        "localTarget": "boom123",
-        "targetAuthType":"TEST_CUSTOM_AUTH",
-        "targetAuth":{"creds":"target_user_creds"},
-        "targetDatabasePartitioned": false
-      };
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        getCredentials: (repSourceOrTarget) => {
-          if (repSourceOrTarget.auth && repSourceOrTarget.auth.creds) {
-            return { creds: repSourceOrTarget.auth.creds };
-          }
-          return undefined;
-        }
-      });
-      const dispatch = ({type, options}) => {
-        if (ActionTypes.REPLICATION_SET_STATE_FROM_DOC === type) {
-          expect(options).toEqual(docStateWithCustomAuth);
-          done();
-        }
-      };
-
-      fetchMock.getOnce('./_replicator/rep_custom_auth', docWithCustomAuth);
-      getReplicationStateFrom(docWithCustomAuth._id)(dispatch);
-    });
-  });
-
-  describe('deleteDocs', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('sends bulk doc request', (done) => {
-      const resp = [
-        {
-          "ok": true,
-          "id": "should-fail",
-          "rev": "32-14e8495723c34271ef1391adf83defc2"
-        },
-        {
-          "ok": true,
-          "id": "my-cool-id",
-          "rev": "3-f16f14d11708952b3d787846ef6ef8a9"
-        }
-      ];
-
-      const docs = [
-        {
-          _id: "should-fail",
-          _rev: "31-cdc233eb8a98e3aa3a87cd72f6a86301",
-          raw: {
-            _id: "should-fail",
-            _rev: "31-cdc233eb8a98e3aa3a87cd72f6a86301"
-          },
-        },
-        {
-          _id: "my-cool-id",
-          _rev: "2-da6af558740409e61d563769a8044a68",
-          raw: {
-            _id: "my-cool-id",
-            _rev: "2-da6af558740409e61d563769a8044a68"
-          }
-        }
-      ];
-
-      fetchMock.getOnce('./_scheduler/jobs', 404);
-      fetchMock.getOnce('./_replicator/_all_docs?include_docs=true&limit=100', {rows: []});
-      fetchMock.postOnce('./_replicator/_bulk_docs', {
-        status: 200,
-        body: resp
-      });
-
-
-      const dispatch = ({type}) => {
-        if (ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS === type) {
-          done();
-        }
-      };
-
-      deleteDocs(docs)(dispatch);
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/api.tests.js b/app/addons/replication/__tests__/api.tests.js
deleted file mode 100644
index ff2db57..0000000
--- a/app/addons/replication/__tests__/api.tests.js
+++ /dev/null
@@ -1,610 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from '../../../core/api';
-import {
-  getSource,
-  getTarget,
-  continuous,
-  createTarget,
-  addDocIdAndRev,
-  getDocUrl,
-  encodeFullUrl,
-  decodeFullUrl,
-  getCredentialsFromUrl,
-  removeCredentialsFromUrl,
-  removeSensitiveUrlInfo,
-  supportNewApi,
-  fetchReplicationDocs
-} from '../api';
-import Constants from '../constants';
-import fetchMock from 'fetch-mock';
-
-describe('Replication API', () => {
-
-  describe("removeSensiteiveUrlInfo", () => {
-    it('removes password username', () => {
-      const url = 'http://tester:testerpass@127.0.0.1/fancy/db/name';
-
-      const res = removeSensitiveUrlInfo(url);
-
-      expect(res).toBe('http://127.0.0.1/fancy/db/name');
-    });
-
-    // see https://issues.apache.org/jira/browse/COUCHDB-3257
-    // CouchDB accepts and returns invalid urls
-    it('does not throw on invalid urls', () => {
-      const url = 'http://tester:tes#terpass@127.0.0.1/fancy/db/name';
-
-      const res = removeSensitiveUrlInfo(url);
-
-      expect(res).toBe('http://tester:tes#terpass@127.0.0.1/fancy/db/name');
-    });
-  });
-
-  describe('getSource', () => {
-
-    it('encodes remote db', () => {
-      const remoteSource = 'http://remote-couchdb.com/my/db/here';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource
-      });
-
-      expect(source.url).toEqual('http://remote-couchdb.com/my%2Fdb%2Fhere');
-    });
-
-    it('returns local source with auth info and encoded', () => {
-      const localSource = 'my/db';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localSource,
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toMatch(/my%2Fdb/);
-    });
-
-    it('returns local source with auth info and encoded when use relative url', () => {
-      const localSource = 'my/db';
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localSource,
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767', pathname:'/db/_utils'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toMatch(/\/db\/my%2Fdb/);
-    });
-
-    it('returns remote source url and auth header', () => {
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(source.url).toBe('http://my-couchdb.com/my-db');
-    });
-
-    it('returns source with no auth', () => {
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        sourceAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.headers).toEqual({});
-
-      const source2 = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local"
-      }, {origin: 'http://dev:6767'});
-
-      expect(source2.headers).toEqual({});
-    });
-
-    it('returns source with custom auth', () => {
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        setCredentials: (repSourceOrTarget, auth) => {
-          repSourceOrTarget.auth = {
-            auth_creds: auth.creds
-          };
-        }
-      });
-      const source = getSource({
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        remoteSource: 'http://my-couchdb.com/my-db',
-        localSource: "local",
-        sourceAuth: { creds: 'sample_creds' },
-        sourceAuthType: 'TEST_CUSTOM_AUTH'
-      }, {origin: 'http://dev:6767'});
-
-      expect(source.auth).toEqual({ auth_creds: 'sample_creds' });
-    });
-  });
-
-  describe('getTarget', () => {
-
-    it('returns remote encoded target', () => {
-      const remoteTarget = 'http://remote-couchdb.com/my/db';
-
-      const url = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE,
-        remoteTarget: remoteTarget
-      }).url;
-      expect(url).toBe("http://remote-couchdb.com/my%2Fdb");
-    });
-
-    it("encodes username and password for remote", () => {
-      const remoteTarget = 'http://remote-couchdb.com/my/db';
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE,
-        remoteTarget: remoteTarget,
-        targetAuth: {
-          username: 'jimi',
-          password: 'my-password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.url).toEqual('http://remote-couchdb.com/my%2Fdb');
-      expect(target.headers).toEqual({Authorization:"Basic amltaTpteS1wYXNzd29yZA=="});
-    });
-
-    it('returns existing local database', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE,
-        localTarget: 'my-existing/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-existing%2Fdb/);
-    });
-
-    it('returns existing local database even with relative urls', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE,
-        localTarget: 'my-existing/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin:'http://dev:6767', pathname:'/db/_utils'});
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-existing%2Fdb/);
-    });
-
-    it('returns new local database', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localTarget: 'my-new/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      });
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-new%2Fdb/);
-    });
-
-    it('returns new local for remote source', () => {
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db',
-        targetAuth: {
-          username: 'the-user',
-          password: 'password'
-        },
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.BASIC
-      }, {origin: 'http://dev:5555'});
-
-      expect(target.headers).toEqual({Authorization:"Basic dGhlLXVzZXI6cGFzc3dvcmQ="});
-      expect(target.url).toMatch(/my-new%2Fdb/);
-    });
-
-    it("doesn't encode username and password if it is not supplied", () => {
-      const location = {
-        host: "dev:8000",
-        hostname: "dev",
-        href: "http://dev:8000/#database/animaldb/_all_docs",
-        origin: "http://dev:8000",
-        pathname: "/",
-        port: "8000",
-        protocol: "http:",
-      };
-
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db'
-      }, location);
-
-      expect(target.url).toBe("http://dev:8000/my-new%2Fdb");
-      expect(target.headers).toEqual({});
-
-      const targetNoAuth = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.REMOTE,
-        localTarget: 'my-new/db',
-        targetAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH
-      }, location);
-      expect(targetNoAuth.headers).toEqual({});
-    });
-
-    it('returns target with custom auth', () => {
-      FauxtonAPI.registerExtension('Replication:Auth', {
-        typeValue: 'TEST_CUSTOM_AUTH',
-        typeLabel: 'Test Custom Auth',
-        setCredentials: (repSourceOrTarget, auth) => {
-          repSourceOrTarget.auth = {
-            auth_creds: auth.creds
-          };
-        }
-      });
-      const target = getTarget({
-        replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-        replicationSource: Constants.REPLICATION_SOURCE.LOCAL,
-        localTarget: 'my-new/db',
-        targetAuth: { creds: 'sample_creds' },
-        targetAuthType: 'TEST_CUSTOM_AUTH'
-      });
-
-      expect(target.auth).toEqual({ auth_creds: 'sample_creds' });
-    });
-
-  });
-
-  describe('continuous', () => {
-
-    it('returns true for continuous', () => {
-      expect(continuous(Constants.REPLICATION_TYPE.CONTINUOUS)).toBeTruthy();
-    });
-
-    it('returns false for once', () => {
-      expect(continuous(Constants.REPLICATION_TYPE.ONE_TIME)).toBeFalsy();
-    });
-  });
-
-  describe('create target', () => {
-
-    it('returns true for new local', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE)).toBeTruthy();
-    });
-
-    it('returns true for new remote', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE)).toBeTruthy();
-    });
-
-    it('returns false for existing', () => {
-      expect(createTarget(Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE)).toBeFalsy();
-    });
-
-  });
-
-  describe('addDocId', () => {
-
-    it('adds doc id if it exists', () => {
-      const docId = 'docId';
-
-      expect(addDocIdAndRev(docId, null,  {})).toEqual({
-        _id: docId
-      });
-    });
-
-    it('adds doc and Rev if it exists', () => {
-      const docId = 'docId';
-      const _rev = "1-rev123";
-
-      expect(addDocIdAndRev(docId, _rev, {})).toEqual({
-        _id: docId,
-        _rev: _rev
-      });
-    });
-
-    it('does not add doc id if it does not exists', () => {
-      expect(addDocIdAndRev(null, null, {})).toEqual({});
-    });
-  });
-
-  describe("getDocUrl", () => {
-    it("scrubs passwords and decodes", () => {
-      const url = "http://userone:theirpassword@couchdb-host.com/my%2Fdb%2fhere";
-      const cleanedUrl = "http://couchdb-host.com/my/db/here";
-
-      expect(getDocUrl(url)).toEqual(cleanedUrl);
-    });
-  });
-
-  describe("encodeFullUrl", () => {
-    it("encodes db correctly", () => {
-      const url = "http://dev:5984/boom/aaaa";
-      const encodedUrl = encodeFullUrl(url);
-
-      expect(encodedUrl).toBe("http://dev:5984/boom%2Faaaa");
-    });
-
-  });
-
-  describe("decodeFullUrl", () => {
-
-    it("encodes db correctly", () => {
-      const url = "http://dev:5984/boom%2Faaaa";
-      const encodedUrl = decodeFullUrl(url);
-
-      expect(encodedUrl).toBe("http://dev:5984/boom/aaaa");
-    });
-
-  });
-
-  describe("getCredentialsFromUrl", () => {
-
-    it("can get username and password", () => {
-      const {username, password } = getCredentialsFromUrl("https://bob:marley@my-couchdb.com/db");
-
-      expect(username).toBe('bob');
-      expect(password).toBe('marley');
-    });
-
-    it("can get username and password with special characters", () => {
-      const {username, password } = getCredentialsFromUrl("http://bob:m@:/rley@my-couchdb.com/db");
-
-      expect(username).toBe('bob');
-      expect(password).toBe('m@:/rley');
-    });
-
-    it("returns nothing for no username and password", () => {
-      const {username, password } = getCredentialsFromUrl("http://my-couchdb.com/db");
-
-      expect(username).toBe('');
-      expect(password).toBe('');
-    });
-  });
-
-  describe("removeCredentialsFromUrl", () => {
-
-    it("can remove username and password", () => {
-      const url = removeCredentialsFromUrl("https://bob:marley@my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-
-    it("returns url if no password", () => {
-      const url = removeCredentialsFromUrl("https://my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-
-    it("can remove username and password with special characters", () => {
-      const url = removeCredentialsFromUrl("https://bob:m@:/rley@my-couchdb.com/db");
-      expect(url).toBe('https://my-couchdb.com/db');
-    });
-  });
-
-  describe('supportNewApi', () => {
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('returns true for support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {});
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeTruthy();
-        });
-    });
-
-    it('returns false for no support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {
-        status: 404,
-        body: {error: "missing"}
-      });
-
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeFalsy();
-        });
-    });
-
-  });
-
-  describe('setCredentials', () => {
-
-    afterEach(() => {
-      fetchMock.reset();
-    });
-
-    it('returns true for support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {});
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeTruthy();
-        });
-    });
-
-    it('returns false for no support', () => {
-      fetchMock.getOnce('./_scheduler/jobs', {
-        status: 404,
-        body: {error: "missing"}
-      });
-
-      return supportNewApi(true)
-        .then(resp => {
-          expect(resp).toBeFalsy();
-        });
-    });
-
-  });
-
-  describe("fetchReplicationDocs", () => {
-    const _repDocs = {
-      "total_rows":2,
-      "offset":0,
-      "rows":[
-        {
-          "id":"_design/_replicator",
-          "key":"_design/_replicator",
-          "value":{
-            "rev":"1-1390740c4877979dbe8998382876556c"
-          },
-          "doc":{"_id":"_design/_replicator",
-            "_rev":"1-1390740c4877979dbe8998382876556c",
-            "language":"javascript",
-            "validate_doc_update":"\n    function(newDoc, oldDoc, userCtx) {\n        function reportError(error_msg) {\n            log('Error writing document `' + newDoc._id +\n                '\\' to the replicator database: ' + error_msg);\n            throw({forbidden: error_msg});\n        }\n\n        function validateEndpoint(endpoint, fieldName) {\n            if ((typeof endpoint !== 'string') &&\n                ((typeof endpoint !== 'object') || (endpoint === null))) {\n\n                reportError('The `' + fieldName + '\\' property must exist' +\n                    ' and be either a string or an object.');\n            }\n\n            if (typeof endpoint === 'object') {\n                if ((typeof endpoint.url !== 'string') || !endpoint.url) {\n                    reportError('The url property must exist in the `' +\n                        fieldName + '\\' field and must be a non-empty string.');\n                }\n\n                if ((typeof endpoint.auth !== 'undefined') &&\n                    ((typeof endpoint.auth !== 'object') ||\n                        endpoint.auth === null)) {\n\n                    reportError('`' + fieldName +\n                        '.auth\\' must be a non-null object.');\n                }\n\n                if ((typeof endpoint.headers !== 'undefined') &&\n                    ((typeof endpoint.headers !== 'object') ||\n                        endpoint.headers === null)) {\n\n                    reportError('`' + fieldName +\n                        '.headers\\' must be a non-null object.');\n                }\n            }\n        }\n\n        var isReplicator = (userCtx.roles.indexOf('_replicator') >= 0);\n        var isAdmin = (userCtx.roles.indexOf('_admin') >= 0);\n\n        if (oldDoc && !newDoc._deleted && !isReplicator &&\n            (oldDoc._replication_state === 'triggered')) {\n            reportError('Only the replicator can edit replication documents ' +\n                'that are in the triggered state.');\n        }\n\n        if (!newDoc._deleted) {\n            validateEndpoint(newDoc.source, 'source');\n            validateEndpoint(newDoc.target, 'target');\n\n            if ((typeof newDoc.create_target !== 'undefined') &&\n                (typeof newDoc.create_target !== 'boolean')) {\n\n                reportError('The `create_target\\' field must be a boolean.');\n            }\n\n            if ((typeof newDoc.continuous !== 'undefined') &&\n                (typeof newDoc.continuous !== 'boolean')) {\n\n                reportError('The `continuous\\' field must be a boolean.');\n            }\n\n            if ((typeof newDoc.doc_ids !== 'undefined') &&\n                !isArray(newDoc.doc_ids)) {\n\n                reportError('The `doc_ids\\' field must be an array of strings.');\n            }\n\n            if ((typeof newDoc.selector !== 'undefined') &&\n                (typeof newDoc.selector !== 'object')) {\n\n                reportError('The `selector\\' field must be an object.');\n            }\n\n            if ((typeof newDoc.filter !== 'undefined') &&\n                ((typeof newDoc.filter !== 'string') || !newDoc.filter)) {\n\n                reportError('The `filter\\' field must be a non-empty string.');\n            }\n\n            if ((typeof newDoc.doc_ids !== 'undefined') &&\n                (typeof newDoc.selector !== 'undefined')) {\n\n                reportError('`doc_ids\\' field is incompatible with `selector\\'.');\n            }\n\n            if ( ((typeof newDoc.doc_ids !== 'undefined') ||\n                  (typeof newDoc.selector !== 'undefined')) &&\n                 (typeof newDoc.filter !== 'undefined') ) {\n\n                reportError('`filter\\' field is incompatible with `selector\\' and `doc_ids\\'.');\n            }\n\n            if ((typeof newDoc.query_params !== 'undefined') &&\n                ((typeof newDoc.query_params !== 'object') ||\n                    newDoc.query_params === null)) {\n\n                reportError('The `query_params\\' field must be an object.');\n            }\n\n            if (newDoc.user_ctx) {\n                var user_ctx = newDoc.user_ctx;\n\n                if ((typeof user_ctx !== 'object') || (user_ctx === null)) {\n                    reportError('The `user_ctx\\' property must be a ' +\n                        'non-null object.');\n                }\n\n                if (!(user_ctx.name === null ||\n                    (typeof user_ctx.name === 'undefined') ||\n                    ((typeof user_ctx.name === 'string') &&\n                        user_ctx.name.length > 0))) {\n\n                    reportError('The `user_ctx.name\\' property must be a ' +\n                        'non-empty string or null.');\n                }\n\n                if (!isAdmin && (user_ctx.name !== userCtx.name)) {\n                    reportError('The given `user_ctx.name\\' is not valid');\n                }\n\n                if (user_ctx.roles && !isArray(user_ctx.roles)) {\n                    reportError('The `user_ctx.roles\\' property must be ' +\n                        'an array of strings.');\n                }\n\n                if (!isAdmin && user_ctx.roles) {\n                    for (var i = 0; i < user_ctx.roles.length; i++) {\n                        var role = user_ctx.roles[i];\n\n                        if (typeof role !== 'string' || role.length === 0) {\n                            reportError('Roles must be non-empty strings.');\n                        }\n                        if (userCtx.roles.indexOf(role) === -1) {\n                            reportError('Invalid role (`' + role +\n                                '\\') in the `user_ctx\\'');\n                        }\n                    }\n                }\n            } else {\n                if (!isAdmin) {\n                    reportError('The `user_ctx\\' property is missing (it is ' +\n                       'optional for admins only).');\n                }\n            }\n        } else {\n            if (!isAdmin) {\n                if (!oldDoc.user_ctx || (oldDoc.user_ctx.name !== userCtx.name)) {\n                    reportError('Replication documents can only be deleted by ' +\n                        'admins or by the users who created them.');\n                }\n            }\n        }\n    }\n"
-          }
-        },
-        {
-          "id":"_design/filters",
-          "key":"_design/filters",
-          "value":{
-            "rev":"1-1390740c4877979dbe8998382876556c"
-          },
-          "doc":{
-            "_id":"_design/filters",
-            "_rev":"1-1390740c4877979dbe8998382876556c",
-            "filters": {
-              "afilter": "\n function (doc, req) { if (doc.type === 'a-doc') { return true; } \n return false }"
-            }
-          }
-        },
-        {
-          "id":"c94d4839d1897105cb75e1251e0003ea",
-          "key":"c94d4839d1897105cb75e1251e0003ea",
-          "value":{
-            "rev":"3-4559cb522de85ce03bd0e1991025e89a"
-          },
-          "doc":{"_id":"c94d4839d1897105cb75e1251e0003ea",
-            "_rev":"3-4559cb522de85ce03bd0e1991025e89a",
-            "user_ctx":{
-              "name":"tester",
-              "roles":["_admin", "_reader", "_writer"]},
-            "source":{
-              "headers":{
-                "Authorization":"Basic dGVzdGVyOnRlc3RlcnBhc3M="
-              },
-              "url":"http://dev:5984/animaldb"},
-            "target":{
-              "headers":{
-                "Authorization":"Basic dGVzdGVyOnRlc3RlcnBhc3M="},
-              "url":"http://dev:5984/animaldb-clone"
-            },
-            "create_target":true,
-            "continuous":false,
-            "owner":"tester",
-            "_replication_state":"completed",
-            "_replication_state_time":"2017-02-28T12:16:28+00:00",
-            "_replication_id":"0ce2939af29317b5dbe11c15570ddfda",
-            "_replication_stats":{
-              "revisions_checked":14,
-              "missing_revisions_found":14,
-              "docs_read":14,
-              "docs_written":14,
-              "changes_pending":null,
-              "doc_write_failures":0,
-              "checkpointed_source_seq":"15-g1AAAAJDeJyV0N0NgjAQAOAKRnlzBJ3AcKWl9Uk20ZbSEII4gm6im-gmugke1AQJ8aFpck3u50vuakJIVIaGrJqzKSADKrYxPqixECii123bVmWoFidMLGVsqEjYtP0voTcY9f6rzHqFKcglsz5K1imHkcJTnoJVPsqxUy4jxepEioJ7KM0cI7nih9BtkDSlkAif2zjp7qRHJwW9lLNdDkZ6S08nvQZJMsNT4b_d20k_d4oVE1aK6VT1AXTajes"
-            }
-          }
-        }
-      ]};
-
-    const _schedDocs = {
-      "offset": 0,
-      "docs": [
-        {
-          "database":"_replicator",
-          "doc_id":"c94d4839d1897105cb75e1251e0003ea",
-          "id":null,
-          "state":"completed",
-          "error_count":0,
-          "info":{
-            "revisions_checked":0,
-            "missing_revisions_found":0,
-            "docs_read":0,
-            "docs_written":0,
-            "changes_pending":null,
-            "doc_write_failures":0,
-            "checkpointed_source_seq":"56-g1AAAAGweJzLYWBgYMlgTmFQTElKzi9KdUhJMjTQy00tyixJTE_VS87JL01JzCvRy0styQEqZUpkSLL___9_VgZzIm8uUIDd1NIkNSk5LYVBAW6AKXb9aLYY47ElyQFIJtVDLeIBW2ScbGJiYGJKjBloNhnisSmPBUgyNAApoGX7QbaJg21LTDEwNE8zR_aWCVGW4VCFZNkBiGVgr3GALTNLSzQ0T0xEtgyHm7MAbEaMZw"},
-          "last_updated":"2017-03-07T14:46:17Z",
-          "start_time":"2017-03-07T14:46:16Z"
-        }
-      ],
-      "total": 1
-    };
-
-    describe('old api', () => {
-      afterEach(() => {
-        fetchMock.reset();
-      });
-
-      it("returns parsedReplicationDocs and ignores all design docs", () => {
-        fetchMock.getOnce('./_scheduler/jobs', 404);
-        fetchMock.get('./_replicator/_all_docs?include_docs=true&limit=100', _repDocs);
-        return supportNewApi(true)
-          .then(fetchReplicationDocs)
-          .then(docs => {
-            expect(docs.length).toBe(1);
-            expect(docs[0]._id).toBe("c94d4839d1897105cb75e1251e0003ea");
-          });
-      });
-    });
-
-    describe('new api', () => {
-      afterEach(() => {
-        fetchMock.reset();
-      });
-
-      it("returns parsedReplicationDocs", () => {
-        fetchMock.getOnce('./_scheduler/jobs', 200);
-        fetchMock.get('./_replicator/_all_docs?include_docs=true&limit=100', _repDocs);
-        fetchMock.get('./_scheduler/docs?include_docs=true', _schedDocs);
-        return supportNewApi(true)
-          .then(fetchReplicationDocs)
-          .then(docs => {
-            expect(docs.length).toBe(1);
-            expect(docs[0]._id).toBe("c94d4839d1897105cb75e1251e0003ea");
-            expect(docs[0].stateTime.toDateString()).toBe((new Date('2017-03-07T14:46:17')).toDateString());
-          });
-      });
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/auth-options.test.js b/app/addons/replication/__tests__/auth-options.test.js
deleted file mode 100644
index b9aba5d..0000000
--- a/app/addons/replication/__tests__/auth-options.test.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed 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.
-
-import { mount } from 'enzyme';
-import React from "react";
-import sinon from "sinon";
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from '../../../core/api';
-import { ReplicationAuth } from '../components/auth-options';
-import Constants from '../constants';
-
-const {restore}  = utils;
-
-describe('ReplicationAuth', () => {
-
-  describe('custom help shows up when correct auth type is selected', () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.getExtensions);
-    });
-
-    it('returns true for local source and target selected', () => {
-      const testAuthHelp = {
-        authType: Constants.REPLICATION_AUTH_METHOD.BASIC,
-        helpText: 'test_help'
-      };
-      sinon.stub(FauxtonAPI, 'getExtensions').withArgs('Replication:Auth-help').returns([testAuthHelp]);
-
-      const newRepAuth = mount(<ReplicationAuth
-        authId="test-auth"
-        authType=""
-        credentials={{}}
-        onChangeAuth={() => {}}
-        onChangeAuthType={(newType) => {
-          newRepAuth.setProps({authType: newType});
-        }} />);
-
-      expect(newRepAuth.find('div.replication__help-tile').exists()).toBe(false);
-      newRepAuth.find('select#select-test-auth').first().simulate('change', {
-        target: {
-          value: 'BASIC_AUTH'
-        }
-      });
-      // Help is displayed after selecting the associated auth type
-      expect(newRepAuth.find('div.replication__help-tile').exists()).toBe(true);
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/common-table.test.js b/app/addons/replication/__tests__/common-table.test.js
deleted file mode 100644
index 50af1de..0000000
--- a/app/addons/replication/__tests__/common-table.test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-
-import { shallow } from 'enzyme';
-import {formatUrl} from '../components/common-table';
-
-describe('Common Table Component', () => {
-
-  describe("formatUrl", () => {
-
-    beforeEach(() => {
-      window.history.pushState({}, 'Test title', '/my-db');
-    });
-
-    it("renders a url with tricky password characters", () => {
-      const url = "http://hello:h#$!^@localhost:8000/my-db";
-      const el = shallow(formatUrl(url));
-      expect(el.find('a').prop('href')).toBe('#/database/my-db/_all_docs');
-    });
-
-    it("renders a url with no password characters", () => {
-      const url = "http://localhost:8000/my-db";
-      const el = shallow(formatUrl(url));
-      expect(el.find('a').prop('href')).toBe('#/database/my-db/_all_docs');
-    });
-
-    it('renders a with a default url if no url is supplied', () => {
-      expect(formatUrl()).toBe('');
-    });
-  });
-});
diff --git a/app/addons/replication/__tests__/helpers.tests.js b/app/addons/replication/__tests__/helpers.tests.js
deleted file mode 100644
index 20b1715..0000000
--- a/app/addons/replication/__tests__/helpers.tests.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed 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.
-
-import helpers from '../helpers';
-
-describe('Replication Helpers - getDatabaseLabel', () => {
-
-  it('returns database name for string', () => {
-    const db = 'http://tester:testerpass@127.0.0.1/db/fancy%2Fdb%2Fname';
-
-    const res = helpers.getDatabaseLabel(db);
-
-    expect(res).toBe('fancy%2Fdb%2Fname');
-  });
-
-  it('returns database name for object', () => {
-    const db = {
-      url: 'http://tester:testerpass@127.0.0.1/fancy'
-    };
-
-    const res = helpers.getDatabaseLabel(db);
-    expect(res).toBe('fancy');
-  });
-
-});
diff --git a/app/addons/replication/__tests__/newreplication.test.js b/app/addons/replication/__tests__/newreplication.test.js
deleted file mode 100644
index 11ee0c6..0000000
--- a/app/addons/replication/__tests__/newreplication.test.js
+++ /dev/null
@@ -1,416 +0,0 @@
-// Licensed 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.
-import React from "react";
-import utils from "../../../../test/mocha/testUtils";
-import FauxtonAPI from '../../../core/api';
-import { shallow } from 'enzyme';
-import sinon from "sinon";
-import NewReplication from '../components/newreplication';
-import Constants from '../constants';
-
-const {restore}  = utils;
-
-describe('New Replication Component', () => {
-
-  describe('validation', () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.addNotification);
-    });
-
-    it('returns true for local source and target selected', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"mydb"}
-        localSource={"anotherdb"}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        remoteSource={""}
-        remoteTarget={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeTruthy();
-    });
-
-    it('returns true for remote source and target selected', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"https://mydb.com/db2"}
-        remoteSource={"https://mydb.com/db1"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeTruthy();
-    });
-
-    it('returns false for invalid remote source', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"https://mydb.com/db"}
-        remoteSource={"anotherdb"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeFalsy();
-    });
-
-    it('returns false for invalid remote target', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-        remoteTarget={"anotherdb"}
-        remoteSource={"https://mydb.com/db"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().checkSourceTargetDatabases()).toBeFalsy();
-    });
-
-    it("warns if new local database exists", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={["existingdb"]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"existingdb"}
-        localSource={"anotherdb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/database already exists/);
-    });
-
-    it("warns if database name is wrong", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"existing db"}
-        localSource={"anotherdb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/may not contain any spaces/);
-    });
-
-    it("warns if database is same for local", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"samedb"}
-        localSource={"samedb"}
-        remoteTarget={""}
-        remoteSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/Cannot replicate a database to itself/);
-    });
-
-    it("warns if database is same for remote", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={"http://localhost/samedb"}
-        remoteSource={"http://localhost/samedb"}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkSourceTargetDatabases();
-      expect(spy.calledOnce).toBeTruthy();
-
-      const notification = spy.args[0][0];
-      expect(notification.msg).toMatch(/Cannot replicate a database to itself/);
-    });
-  });
-
-  describe('confirmButtonEnabled', () => {
-
-    it('returns false for default', () => {
-      const newreplication = shallow(<NewReplication
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it('returns false for empty remote source', () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        databases={[]}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it('returns false for empty local source', () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        remoteSource={'db'}
-        databases={[]}
-        remoteTarget={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeFalsy();
-    });
-
-    it("returns true for all details filled in", () => {
-      const newreplication = shallow(<NewReplication
-        submittedNoChange={false}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        remoteSource={'db'}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        localTarget={"new-db"}
-        locallocalTargetKnown={false}
-        locallocalSourceKnown={false}
-        databases={[]}
-        remoteTarget={""}
-        localSource={""}
-        replicationType={""}
-        replicationDocName={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-
-      expect(newreplication.instance().confirmButtonEnabled()).toBeTruthy();
-    });
-
-  });
-
-  describe("runReplicationChecks", () => {
-
-    it("shows conflict modal for existing replication doc", (done) => {
-      const showConflictModal = () => {
-        expect(true).toBeTruthy();
-        done();
-      };
-
-      const checkReplicationDocID = () => {
-        const promise = FauxtonAPI.Deferred();
-        promise.resolve(true);
-        return promise;
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName="my-doc-id"
-        checkReplicationDocID={checkReplicationDocID}
-        showConflictModal={showConflictModal}
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().runReplicationChecks();
-    });
-
-    it("calls auth checks", () => {
-      let called = false;
-      const checkAuth = () => {called = true;};
-      const checkReplicationDocID = () => {
-        const promise = FauxtonAPI.Deferred();
-        promise.resolve(false);
-        return promise;
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName={''}
-        checkReplicationDocID={checkReplicationDocID}
-        databases={[]}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkAuth = checkAuth;
-      newreplication.instance().runReplicationChecks();
-      expect(called).toBeTruthy();
-    });
-
-  });
-
-  describe("checkAuth", () => {
-
-    afterEach(() => {
-      restore(FauxtonAPI.addNotification);
-      FauxtonAPI.session = undefined;
-    });
-
-    it("prompts user for local target auth method", () => {
-      const spy = sinon.spy(FauxtonAPI, 'addNotification');
-      FauxtonAPI.session = {
-        isAdminParty: () => false
-      };
-      const newreplication = shallow(<NewReplication
-        replicationDocName="my-doc-id"
-        checkReplicationDocID={() => {}}
-        showConflictModal={() => {}}
-        databases={[]}
-        replicationSource={Constants.REPLICATION_SOURCE.REMOTE}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        targetAuthType={Constants.REPLICATION_AUTH_METHOD.NO_AUTH}
-        remoteTarget={""}
-        remoteSource={""}
-        localTarget={""}
-        localSource={""}
-        replicationType={""}
-        conflictModalVisible={false}
-        clearReplicationForm={() => {}}
-        hideConflictModal={() => {}}
-        updateFormField={() => { return () => {}; }}
-      />);
-
-      newreplication.instance().checkAuth();
-      sinon.assert.calledWith(spy, {
-        msg: 'Missing credentials for local target database.',
-        clear: true,
-        type: 'error'
-      });
-    });
-  });
-
-});
diff --git a/app/addons/replication/__tests__/target.test.js b/app/addons/replication/__tests__/target.test.js
deleted file mode 100644
index 16b879b..0000000
--- a/app/addons/replication/__tests__/target.test.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import { mount } from 'enzyme';
-import { ReplicationTarget } from '../components/target';
-import Constants from '../constants';
-
-describe('ReplicationTarget', () => {
-
-  describe('NewTargetDatabaseOptionsRow', () => {
-
-    const defaultProps = {
-      databases: ["db1"],
-      onTargetChange: () => {},
-      onLocalTargetChange: () => {},
-      onRemoteTargetChange: () => {},
-      remoteTarget: "",
-      localTarget: "",
-      replicationTarget: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-      onTargetDatabasePartitionedChange: () => {},
-      targetDatabasePartitioned: false,
-      allowNewPartitionedLocalDbs: false
-    };
-
-    it('Does not show partitioned option for existing remote database', () => {
-      const repRemoteTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE}
-      />);
-
-      expect(repRemoteTarget.find('input#target-db-is-partitioned').exists()).toBe(false);
-    });
-
-    it('Does not show partitioned option for existing local database', () => {
-      const repLocalTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE}
-      />);
-
-      expect(repLocalTarget.find('input#target-db-is-partitioned').exists()).toBe(false);
-    });
-
-    it('Shows partitioned option for new remote database', () => {
-      const repRemoteTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE}
-      />);
-
-      expect(repRemoteTarget.find('input#target-db-is-partitioned').exists()).toBe(true);
-    });
-
-    it('Shows partitioned option for new local database', () => {
-      const repLocalTarget = mount(<ReplicationTarget
-        {...defaultProps}
-        replicationTarget={Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE}
-        allowNewPartitionedLocalDbs={false}
-      />);
-
-      var input = repLocalTarget.find('input#target-db-is-partitioned');
-      expect(input.exists()).toBe(true);
-      expect(input.prop("disabled")).toBeTruthy();
-
-      repLocalTarget.setProps({allowNewPartitionedLocalDbs: true});
-      input = repLocalTarget.find('input#target-db-is-partitioned');
-      expect(input.exists()).toBe(true);
-      expect(input.prop("disabled")).toBeFalsy();
-    });
-
-  });
-
-});
diff --git a/app/addons/replication/actions.js b/app/addons/replication/actions.js
deleted file mode 100644
index 745a361..0000000
--- a/app/addons/replication/actions.js
+++ /dev/null
@@ -1,418 +0,0 @@
-// Licensed 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.
-import base64 from 'base-64';
-import FauxtonAPI from '../../core/api';
-import {get, post} from '../../core/ajax';
-import ActionTypes from './actiontypes';
-import Helpers from './helpers';
-import MainHelper from '../../helpers';
-import Constants from './constants';
-import {
-  supportNewApi,
-  createReplicationDoc,
-  fetchReplicateInfo,
-  fetchReplicationDocs,
-  decodeFullUrl,
-  deleteReplicatesApi,
-  createReplicatorDB
-} from './api';
-
-
-export const initReplicator = (routeLocalSource, localSource) => dispatch => {
-  if (routeLocalSource && routeLocalSource !== localSource) {
-    dispatch({
-      type: ActionTypes.INIT_REPLICATION,
-      options: {
-        localSource: routeLocalSource
-      }
-    });
-  }
-};
-
-export const getDatabasesList = () => dispatch => {
-  const url = MainHelper.getServerUrl("/_all_dbs");
-  get(url)
-    .then((databases) => {
-      dispatch({
-        type: ActionTypes.REPLICATION_DATABASES_LOADED,
-        options: {
-          databases
-        }
-      });
-    });
-};
-
-export const replicate = (params) => dispatch => {
-  const replicationDoc = createReplicationDoc(params);
-  const url = MainHelper.getServerUrl("/_replicator");
-  const promise = post(url, replicationDoc);
-
-  const source = Helpers.getDatabaseLabel(replicationDoc.source);
-  const target = Helpers.getDatabaseLabel(replicationDoc.target);
-
-  dispatch({
-    type: ActionTypes.REPLICATION_STARTING,
-  });
-
-  const handleError = (json) => {
-    FauxtonAPI.addNotification({
-      msg: json.reason,
-      type: 'error',
-      clear: true
-    });
-  };
-
-  // Return promise for testing
-  return promise
-    .then(json => {
-      if (!json.ok) {
-        throw json;
-      }
-
-      FauxtonAPI.addNotification({
-        msg: `Replication from <code>${decodeURIComponent(source)}</code> to <code>${decodeURIComponent(target)}</code> has been scheduled.`,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-
-      dispatch(getReplicationActivity());
-      FauxtonAPI.navigate('#/replication');
-    }).catch(json => {
-      if (json.error && json.error === "not_found") {
-        return createReplicatorDB().then(() => {
-          return replicate(params)(dispatch);
-        }).catch(handleError);
-      }
-      handleError(json);
-    });
-};
-
-export const updateFormField = (fieldName, value) => {
-  return {
-    type: ActionTypes.REPLICATION_UPDATE_FORM_FIELD,
-    options: {
-      fieldName: fieldName,
-      value: value
-    }
-  };
-};
-
-export const clearReplicationForm = () => {
-  return { type: ActionTypes.REPLICATION_CLEAR_FORM };
-};
-
-export const getReplicationActivity = () => dispatch => {
-  dispatch({
-    type: ActionTypes.REPLICATION_FETCHING_STATUS,
-  });
-
-  supportNewApi()
-    .then(supportNewApi => {
-      return fetchReplicationDocs(supportNewApi);
-    })
-    .then(docs => {
-      dispatch({
-        type: ActionTypes.REPLICATION_STATUS,
-        options: docs
-      });
-    });
-};
-
-export const getReplicateActivity = () => dispatch => {
-  supportNewApi()
-    .then(newApi => {
-      if (!newApi) {
-        return;
-      }
-
-      dispatch({
-        type: ActionTypes.REPLICATION_FETCHING_REPLICATE_STATUS,
-      });
-
-      fetchReplicateInfo()
-        .then(replicateInfo => {
-          dispatch({
-            type: ActionTypes.REPLICATION_REPLICATE_STATUS,
-            options: replicateInfo
-          });
-        });
-    });
-};
-
-export const filterDocs = (filter) => {
-  return {
-    type: ActionTypes.REPLICATION_FILTER_DOCS,
-    options: filter
-  };
-};
-
-export const filterReplicate = (filter) => {
-  return {
-    type: ActionTypes.REPLICATION_FILTER_REPLICATE,
-    options: filter
-  };
-};
-
-export const selectAllDocs = () => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_ALL_DOCS
-  };
-};
-
-export const selectDoc = (id) => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_DOC,
-    options: id
-  };
-};
-
-export const selectAllReplicates = () => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_ALL_REPLICATE
-  };
-};
-
-export const selectReplicate = (id) => {
-  return {
-    type: ActionTypes.REPLICATION_TOGGLE_REPLICATE,
-    options: id
-  };
-};
-
-export const clearSelectedDocs = () => {
-  return {
-    type: ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS
-  };
-};
-
-export const clearSelectedReplicates = () => {
-  return {
-    type: ActionTypes.REPLICATION_CLEAR_SELECTED_REPLICATES
-  };
-};
-
-export const deleteDocs = (docs) => dispatch => {
-  const bulkDocs = docs.map(({raw: doc}) => {
-    doc._deleted = true;
-    return doc;
-  });
-
-  FauxtonAPI.addNotification({
-    msg: `Deleting doc${bulkDocs.length > 1 ? 's' : ''}.`,
-    type: 'success',
-    escape: false,
-    clear: true
-  });
-
-  const url = MainHelper.getServerUrl('/_replicator/_bulk_docs');
-  post(url, {docs: bulkDocs}, {raw: true})
-    .then(resp => {
-      if (!resp.ok) {
-        throw resp;
-      }
-      return resp;
-    })
-    .then(() => {
-
-      let msg = 'The selected documents have been deleted.';
-      if (docs.length === 1) {
-        msg = `Document <code>${docs[0]._id}</code> has been deleted`;
-      }
-
-      FauxtonAPI.addNotification({
-        msg: msg,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-
-      dispatch(clearSelectedDocs());
-      dispatch(getReplicationActivity());
-    })
-    .catch(resp => {
-      resp.json()
-        .then(error => {
-          FauxtonAPI.addNotification({
-            msg: error.reason,
-            type: 'error',
-            clear: true
-          });
-        });
-
-    });
-};
-
-export const deleteReplicates = (replicates) => dispatch => {
-  FauxtonAPI.addNotification({
-    msg: `Deleting _replicate${replicates.length > 1 ? 's' : ''}.`,
-    type: 'success',
-    escape: false,
-    clear: true
-  });
-
-  deleteReplicatesApi(replicates)
-    .then(() => {
-      let msg = 'The selected replications have been deleted.';
-      if (replicates.length === 1) {
-        msg = `Replication <code>${replicates[0]._id}</code> has been deleted`;
-      }
-
-      dispatch(clearSelectedReplicates());
-      dispatch(getReplicateActivity());
-
-      FauxtonAPI.addNotification({
-        msg: msg,
-        type: 'success',
-        escape: false,
-        clear: true
-      });
-    }, (xhr) => {
-      const errorMessage = JSON.parse(xhr.responseText);
-      FauxtonAPI.addNotification({
-        msg: errorMessage.reason,
-        type: 'error',
-        clear: true
-      });
-    });
-};
-
-const getAuthTypeAndCredentials = (repSourceOrTarget) => {
-  const authTypeAndCreds = {
-    type: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-    creds: {}
-  };
-  if (repSourceOrTarget.headers && repSourceOrTarget.headers.Authorization) {
-    // Removes 'Basic ' prefix
-    const encodedCreds = repSourceOrTarget.headers.Authorization.substring(6);
-    const decodedCreds = base64.decode(encodedCreds);
-    authTypeAndCreds.type = Constants.REPLICATION_AUTH_METHOD.BASIC;
-    authTypeAndCreds.creds = {
-      username: decodedCreds.split(':')[0],
-      password: decodedCreds.split(':')[1]
-    };
-    return authTypeAndCreds;
-  }
-
-  // Tries to get creds using one of the custom auth methods
-  // The extension should provide:
-  //   - 'getCredentials(obj)' method that extracts the credentials from obj which is the 'target'/'source' field of the replication doc.
-  //   - 'typeValue' field with an arbitrary ID representing the auth type the extension supports.
-  const authExtensions = FauxtonAPI.getExtensions('Replication:Auth');
-  let credentials = undefined;
-  let customAuthType = undefined;
-  if (authExtensions) {
-    authExtensions.map(ext => {
-      if (!credentials && ext.getCredentials) {
-        credentials = ext.getCredentials(repSourceOrTarget);
-        customAuthType = ext.typeValue;
-      }
-    });
-  }
-  if (credentials) {
-    authTypeAndCreds.type = customAuthType;
-    authTypeAndCreds.creds = credentials;
-  }
-  return authTypeAndCreds;
-};
-
-const getTargetDatabasePartitioned = (createTargetParams) => {
-  if (createTargetParams && createTargetParams.partitioned === true) {
-    return true;
-  }
-  return false;
-};
-
-export const getReplicationStateFrom = (id) => dispatch => {
-  dispatch({
-    type: ActionTypes.REPLICATION_FETCHING_FORM_STATE
-  });
-
-  const url = MainHelper.getServerUrl(`/_replicator/${encodeURIComponent(id)}`);
-  get(url)
-    .then((doc) => {
-      const stateDoc = {
-        replicationDocName: doc._id,
-        replicationType: doc.continuous ? Constants.REPLICATION_TYPE.CONTINUOUS : Constants.REPLICATION_TYPE.ONE_TIME,
-      };
-
-      const sourceUrl = _.isObject(doc.source) ? doc.source.url : doc.source;
-      const targetUrl = _.isObject(doc.target) ? doc.target.url : doc.target;
-
-      if (sourceUrl.indexOf(window.location.hostname) > -1) {
-        const url = new URL(sourceUrl);
-        stateDoc.replicationSource = Constants.REPLICATION_SOURCE.LOCAL;
-        stateDoc.localSource = decodeURIComponent(url.pathname.slice(1));
-      } else {
-        stateDoc.replicationSource = Constants.REPLICATION_SOURCE.REMOTE;
-        stateDoc.remoteSource = decodeFullUrl(sourceUrl);
-      }
-      const sourceAuth = getAuthTypeAndCredentials(doc.source);
-      stateDoc.sourceAuthType = sourceAuth.type;
-      stateDoc.sourceAuth = sourceAuth.creds;
-
-      if (targetUrl.indexOf(window.location.hostname) > -1) {
-        const url = new URL(targetUrl);
-        stateDoc.replicationTarget = Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE;
-        stateDoc.localTarget = decodeURIComponent(url.pathname.slice(1));
-      } else {
-        stateDoc.replicationTarget = Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE;
-        stateDoc.remoteTarget = decodeFullUrl(targetUrl);
-      }
-      const targetAuth = getAuthTypeAndCredentials(doc.target);
-      stateDoc.targetAuthType = targetAuth.type;
-      stateDoc.targetAuth = targetAuth.creds;
-
-      stateDoc.targetDatabasePartitioned = getTargetDatabasePartitioned(doc.create_target_params);
-
-      dispatch({
-        type: ActionTypes.REPLICATION_SET_STATE_FROM_DOC,
-        options: stateDoc
-      });
-
-    })
-    .catch(error => {
-      FauxtonAPI.addNotification({
-        msg: error.reason,
-        type: 'error',
-        clear: true
-      });
-    });
-};
-
-export const showConflictModal = () => {
-  return {
-    type: ActionTypes.REPLICATION_SHOW_CONFLICT_MODAL
-  };
-};
-
-export const hideConflictModal = () => {
-  return {
-    type: ActionTypes.REPLICATION_HIDE_CONFLICT_MODAL
-  };
-};
-
-export const changeActivitySort = (sort) => {
-  return {
-    type: ActionTypes.REPLICATION_CHANGE_ACTIVITY_SORT,
-    options: sort
-  };
-};
-
-export const checkForNewApi = () => dispatch => {
-  supportNewApi().then(newApi => {
-    dispatch({
-      type: ActionTypes.REPLICATION_SUPPORT_NEW_API,
-      options: newApi
-    });
-  });
-};
diff --git a/app/addons/replication/actiontypes.js b/app/addons/replication/actiontypes.js
deleted file mode 100644
index 7143868..0000000
--- a/app/addons/replication/actiontypes.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-export default {
-  INIT_REPLICATION: 'INIT_REPLICATION',
-  CHANGE_REPLICATION_SOURCE: 'CHANGE_REPLICATION_SOURCE',
-  REPLICATION_DATABASES_LOADED: 'REPLICATION_DATABASES_LOADED',
-  REPLICATION_UPDATE_FORM_FIELD: 'REPLICATION_UPDATE_FORM_FIELD',
-  REPLICATION_CLEAR_FORM: 'REPLICATION_CLEAR_FORM',
-  REPLICATION_STARTING: 'REPLICATION_STARTING',
-  REPLICATION_STATUS: 'REPLICATION_STATUS',
-  REPLICATION_FETCHING_STATUS: 'REPLICATION_FETCHING_STATUS',
-  REPLICATION_FILTER_DOCS: 'REPLICATION_FILTER_DOCS',
-  REPLICATION_TOGGLE_ALL_DOCS: 'REPLICATION_TOGGLE_ALL_DOCS',
-  REPLICATION_TOGGLE_DOC: 'REPLICATION_TOGGLE_DOC',
-  REPLICATION_DELETE_DOCS: 'REPLICATION_DELETE_DOCS',
-  REPLICATION_SET_STATE_FROM_DOC: 'REPLICATION_SET_STATE_FROM_DOC',
-  REPLICATION_SHOW_CONFLICT_MODAL: 'REPLICATION_SHOW_CONFLICT_MODAL',
-  REPLICATION_HIDE_CONFLICT_MODAL: 'REPLICATION_HIDE_CONFLICT_MODAL',
-  REPLICATION_CHANGE_ACTIVITY_SORT: 'REPLICATION_CHANGE_ACTIVITY_SORT',
-  REPLICATION_CLEAR_SELECTED_DOCS: 'REPLICATION_CLEAR_SELECTED_DOCS',
-  REPLICATION_CHANGE_TAB_SECTION: 'REPLICATION_CHANGE_TAB_SECTION',
-  REPLICATION_FETCHING_REPLICATE_STATUS: 'REPLICATION_FETCHING_REPLICATE_STATUS',
-  REPLICATION_REPLICATE_STATUS: 'REPLICATION_REPLICATE_STATUS',
-  REPLICATION_SUPPORT_NEW_API: 'REPLICATION_SUPPORT_NEW_API',
-  REPLICATION_FILTER_REPLICATE: 'REPLICATION_FILTER_REPLICATE',
-  REPLICATION_TOGGLE_ALL_REPLICATE: 'REPLICATION_TOGGLE_ALL_REPLICATE',
-  REPLICATION_TOGGLE_REPLICATE: 'REPLICATION_TOGGLE_REPLICATE',
-  REPLICATION_CLEAR_SELECTED_REPLICATES: 'REPLICATION_CLEAR_SELECTED_REPLICATES',
-  REPLICATION_FETCHING_FORM_STATE: 'REPLICATION_FETCHING_FORM_STATE',
-  REPLICATION_HIDE_PASSWORD_MODAL: 'REPLICATION_HIDE_PASSWORD_MODAL',
-  REPLICATION_SHOW_PASSWORD_MODAL: 'REPLICATION_SHOW_PASSWORD_MODAL'
-};
diff --git a/app/addons/replication/api.js b/app/addons/replication/api.js
deleted file mode 100644
index 75dee5f..0000000
--- a/app/addons/replication/api.js
+++ /dev/null
@@ -1,418 +0,0 @@
-// Licensed 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.
-
-import '@webcomponents/url';
-import Constants from './constants';
-import FauxtonAPI from '../../core/api';
-import Helpers from '../../helpers';
-import {get, post, put} from '../../core/ajax';
-import base64 from 'base-64';
-import _ from 'lodash';
-
-let newApiPromise = null;
-export const supportNewApi = (forceCheck) => {
-  if (!newApiPromise || forceCheck) {
-    newApiPromise = new FauxtonAPI.Promise((resolve) => {
-      const url = Helpers.getServerUrl('/_scheduler/jobs');
-      get(url, {raw: true})
-        .then(resp => {
-          if (resp.status > 202) {
-            return resolve(false);
-          }
-          resolve(true);
-        });
-    });
-  }
-
-  return newApiPromise;
-};
-
-export const encodeFullUrl = (fullUrl) => {
-  if (!fullUrl) {return '';}
-  const url = new URL(fullUrl);
-  return `${url.origin}/${encodeURIComponent(url.pathname.slice(1))}`;
-};
-
-export const decodeFullUrl = (fullUrl) => {
-  if (!fullUrl) {return '';}
-  const url = new URL(fullUrl);
-  return `${url.origin}/${decodeURIComponent(url.pathname.slice(1))}`;
-};
-
-export const getUsername = () => {
-  return FauxtonAPI.session.user().name;
-};
-
-export const getAuthHeaders = (username, password) => {
-  if (!username || !password) {
-    return {};
-  }
-  return {
-    'Authorization': 'Basic ' + base64.encode(username + ':' + password)
-  };
-};
-
-export const getCredentialsFromUrl = (url) => {
-  const index = url.lastIndexOf('@');
-  if (index === -1) {
-    return {
-      username: '',
-      password: ''
-    };
-  }
-
-  const startIndex = url.startsWith("https") ? 8 : 7;
-  const rawCreds = url.slice(startIndex, index);
-  const colonIndex = rawCreds.indexOf(':');
-  const username = rawCreds.slice(0, colonIndex);
-  const password = rawCreds.slice(colonIndex + 1, rawCreds.length);
-
-  return {
-    username,
-    password
-  };
-};
-
-export const removeCredentialsFromUrl = (url) => {
-  const index = url.lastIndexOf('@');
-  if (index === -1) {
-    return url;
-  }
-
-  const protocol = url.startsWith("https") ? "https://" : 'http://';
-  const cleanUrl = url.slice(index + 1);
-  return protocol + cleanUrl;
-};
-
-export const getSource = ({
-  replicationSource,
-  localSource,
-  remoteSource,
-  sourceAuthType,
-  sourceAuth
-},
-{origin, pathname} = window.location) => {
-
-  const source = {};
-  if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL) {
-    const encodedLocalTarget = encodeURIComponent(localSource);
-
-    const root = Helpers.getRootUrl({origin, pathname});
-    source.url = `${root}${encodedLocalTarget}`;
-  } else {
-    source.url = encodeFullUrl(removeCredentialsFromUrl(remoteSource));
-  }
-
-  setCredentials(source, sourceAuthType, sourceAuth);
-  return source;
-};
-
-export const getTarget = ({
-  replicationTarget,
-  localTarget,
-  remoteTarget,
-  targetAuthType,
-  targetAuth
-},
-//this allows us to mock out window.location for our tests
-{origin, pathname} = window.location) => {
-
-  const target = {};
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-        replicationTarget === Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE) {
-    target.url = encodeFullUrl(removeCredentialsFromUrl(remoteTarget));
-  } else {
-    const encodedLocalTarget = encodeURIComponent(localTarget);
-    const root = Helpers.getRootUrl({origin, pathname});
-    target.url = `${root}${encodedLocalTarget}`;
-  }
-
-  setCredentials(target, targetAuthType, targetAuth);
-  return target;
-};
-
-const setCredentials = (target, authType, auth) => {
-  if (!authType || authType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-    target.headers = {};
-  } else if (authType === Constants.REPLICATION_AUTH_METHOD.BASIC) {
-    target.headers = getAuthHeaders(auth.username, auth.password);
-  } else {
-    // Tries to set creds using one of the custom auth methods
-    // The extension should provide:
-    //   - 'setCredentials(target, auth)' method which sets the 'auth' credentials into 'target' which is the 'target'/'source' field of the replication doc.
-    const authExtensions = FauxtonAPI.getExtensions('Replication:Auth');
-    if (authExtensions) {
-      authExtensions.filter(ext => ext.typeValue === authType).map(ext => {
-        if (ext.setCredentials) {
-          ext.setCredentials(target, auth);
-        }
-      });
-    }
-  }
-};
-
-export const createTarget = (replicationTarget) => {
-  if (_.includes([
-    Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE,
-    Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE],
-  replicationTarget)) {
-    return true;
-  }
-
-  return false;
-};
-
-export const continuous = (replicationType) => {
-  if (replicationType === Constants.REPLICATION_TYPE.CONTINUOUS) {
-    return true;
-  }
-
-  return false;
-};
-
-export const addDocIdAndRev = (docId, _rev, doc) => {
-  if (docId) {
-    doc._id = docId;
-  }
-
-  if (_rev) {
-    doc._rev = _rev;
-  }
-
-  return doc;
-};
-
-export const createReplicationDoc = ({
-  replicationTarget,
-  replicationSource,
-  replicationType,
-  replicationDocName,
-  localTarget,
-  localSource,
-  remoteTarget,
-  remoteSource,
-  _rev,
-  sourceAuthType,
-  sourceAuth,
-  targetAuthType,
-  targetAuth,
-  targetDatabasePartitioned
-}) => {
-  const username = getUsername();
-  const replicationDoc = {
-    user_ctx: {
-      name: username,
-      roles: ['_admin', '_reader', '_writer']
-    },
-    source: getSource({
-      replicationSource,
-      localSource,
-      remoteSource,
-      sourceAuthType,
-      sourceAuth
-    }),
-    target: getTarget({
-      replicationTarget,
-      replicationSource,
-      remoteTarget,
-      localTarget,
-      targetAuthType,
-      targetAuth
-    }),
-    create_target: createTarget(replicationTarget),
-    continuous: continuous(replicationType),
-  };
-  if (targetDatabasePartitioned) {
-    replicationDoc.create_target_params = {
-      partitioned: true
-    };
-  }
-  return addDocIdAndRev(replicationDocName, _rev, replicationDoc);
-};
-
-export const removeSensitiveUrlInfo = (url) => {
-  try {
-    const urlObj = new URL(url);
-    return `${urlObj.origin}/${decodeURIComponent(urlObj.pathname.slice(1))}`;
-  } catch (e) {
-    return url;
-  }
-};
-
-export const getDocUrl = (doc) => {
-  let url = doc;
-  if (!doc) {
-    return '';
-  }
-
-  if (typeof doc === "object") {
-    url = doc.url;
-  }
-  return removeSensitiveUrlInfo(url);
-};
-
-export const parseReplicationDocs = (rows) => {
-  return rows.map(row => row.doc).map(doc => {
-    return {
-      _id: doc._id,
-      _rev: doc._rev,
-      selected: false, //use this field for bulk delete in the ui
-      source: getDocUrl(doc.source),
-      target: getDocUrl(doc.target),
-      createTarget: doc.create_target,
-      continuous: doc.continuous === true ? true : false,
-      status: doc._replication_state,
-      errorMsg: doc._replication_state_reason ? doc._replication_state_reason : '',
-      statusTime: new Date(doc._replication_state_time),
-      startTime: new Date(doc._replication_start_time),
-      url: `#/database/_replicator/${encodeURIComponent(doc._id)}`,
-      raw: doc
-    };
-  });
-};
-
-export const convertState = (state) => {
-  if (state.toLowerCase() === 'error' || state.toLowerCase() === 'crashing') {
-    return 'retrying';
-  }
-
-  return state;
-};
-
-export const combineDocsAndScheduler = (docs, schedulerDocs) => {
-  return docs.map(doc => {
-    const schedule = schedulerDocs.find(s => s.doc_id === doc._id);
-    if (!schedule) {
-      return doc;
-    }
-
-    doc.status = convertState(schedule.state);
-    if (schedule.start_time) {
-      doc.startTime = new Date(schedule.start_time);
-    }
-
-    if (schedule.last_updated) {
-      doc.stateTime = new Date(schedule.last_updated);
-    }
-
-    return doc;
-  });
-};
-
-export const fetchReplicationDocs = () => {
-  return supportNewApi()
-    .then(newApi => {
-      const url = Helpers.getServerUrl('/_replicator/_all_docs?include_docs=true&limit=100');
-      const docsPromise = get(url)
-        .then((res) => {
-          if (res.error) {
-            return [];
-          }
-
-          return parseReplicationDocs(res.rows.filter(row => row.id.indexOf("_design/") === -1));
-        });
-
-      if (!newApi) {
-        return docsPromise;
-      }
-      const schedulerPromise = fetchSchedulerDocs();
-      return FauxtonAPI.Promise.join(docsPromise, schedulerPromise, (docs, schedulerDocs) => {
-        return combineDocsAndScheduler(docs, schedulerDocs);
-      })
-        .catch(() => {
-          return [];
-        });
-    });
-};
-
-export const fetchSchedulerDocs = () => {
-  const url = Helpers.getServerUrl('/_scheduler/docs?include_docs=true');
-  return get(url)
-    .then((res) => {
-      if (res.error) {
-        return [];
-      }
-
-      return res.docs;
-    });
-};
-
-export const checkReplicationDocID = (docId) => {
-  return new Promise((resolve) => {
-    const url = Helpers.getServerUrl(`/_replicator/${docId}`);
-    get(url)
-      .then(resp => {
-        if (resp.error === "not_found") {
-          resolve(false);
-          return;
-        }
-        resolve(true);
-      });
-  });
-};
-
-export const parseReplicateInfo = (resp) => {
-  return resp.jobs.filter(job => job.database === null).map(job => {
-    return {
-      _id: job.id,
-      source: getDocUrl(job.source.slice(0, job.source.length - 1)),
-      target: getDocUrl(job.target.slice(0, job.target.length - 1)),
-      startTime: new Date(job.start_time),
-      statusTime: new Date(job.last_updated),
-      //making an asumption here that the first element is the latest
-      status: convertState(job.history[0].type),
-      errorMsg: '',
-      selected: false,
-      continuous: /continuous/.test(job.id),
-      raw: job
-    };
-  });
-};
-
-export const fetchReplicateInfo = () => {
-  return supportNewApi()
-    .then(newApi => {
-      if (!newApi) {
-        return [];
-      }
-
-      const url = Helpers.getServerUrl('/_scheduler/jobs');
-      return get(url)
-        .then(resp => {
-          return parseReplicateInfo(resp);
-        });
-    });
-};
-
-export const deleteReplicatesApi = (replicates) => {
-  const promises = replicates.map(replicate => {
-    const data = {
-      replication_id: replicate._id,
-      cancel: true
-    };
-    const url = Helpers.getServerUrl('/_replicate');
-    return post(url, data);
-  });
-
-  return FauxtonAPI.Promise.all(promises);
-};
-
-export const createReplicatorDB = () => {
-  const url = Helpers.getServerUrl('/_replicator');
-  return put(url)
-    .then(res => {
-      if (!res.ok) {
-        throw {reason: 'Failed to create the _replicator database.'};
-      }
-      return true;
-    });
-};
diff --git a/app/addons/replication/assets/less/replication.less b/app/addons/replication/assets/less/replication.less
deleted file mode 100644
index ec1c0ad..0000000
--- a/app/addons/replication/assets/less/replication.less
+++ /dev/null
@@ -1,376 +0,0 @@
-// Licensed 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.
-
-@import "../../../../../assets/less/variables.less";
-@import "../../../../../assets/less/mixins.less";
-
-@replication_input_field_width: 400px;
-
-div.replication__page {
-  padding-top: 25px !important;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-
-.replication__section {
-  display: flex;
-  flex-flow: row wrap;
-  justify-content: flex-start;
-  & input {
-    width: @replication_input_field_width;
-    font-size: 14px;
-  }
-}
-
-.replication__seperator {
-  margin: 6px 0 15px;
-  width: 100%;
-}
-
-.replication__help-tile {
-  width: 400px;
-}
-
-.replication__input-checkbox {
-  display: flex;
-  align-items: center;
-  width: 400px;
-  height: 55px;
-
-  input[type="checkbox"] {
-    width: auto;
-    margin-right: 0.65rem;
-  }
-
-  label {
-    padding-bottom: 10px;
-  }
-
-  &--disabled label {
-    cursor: not-allowed;
-  }
-}
-
-.replication__input-label {
-  padding-right: 15px;
-  width: 165px;
-  text-align: right;
-  margin-top: 12px;
-  font-size: 14px;
-  margin-right: 10px;
-}
-
-.replication__input-select {
-  width: 540px;
-  select {
-    font-size: 14px;
-    width: @replication_input_field_width;
-    margin-bottom: 10px;
-    background-color: white;
-    border: 1px solid #cccccc;
-  }
-  .styled-select {
-    width: @replication_input_field_width;
-  }
-}
-
-.replication__input-react-select {
-  font-size: 14px;
-  padding-bottom: 10px;
-
-  .Select .Select-menu-outer {
-    width: @replication_input_field_width;
-  }
-
-  .Select div.Select-control {
-    padding: 6px;
-    border: 1px solid #cccccc;
-    width: @replication_input_field_width;
-
-    .Select-value, .Select-placeholder {
-      padding: 6px 15px 6px 10px;
-    }
-
-    input {
-      margin-left: -6px;
-    }
-
-    .Select-arrow-zone {
-      padding: 0;
-      width: 18px;
-      color: black;
-    }
-  }
-}
-
-.replication__remote-connection-url[type="text"] {
-  font-size: 14px;
-  width: @replication_input_field_width;
-  color: #333;
-}
-
-.replication__remote-connection-url-text {
-  font-size: 9pt;
-  color: #999999;
-  margin-bottom: 8px;
-}
-
-.replication__new-input[type="text"] {
-  width: @replication_input_field_width;
-  font-size: 14px;
-  color: #333;
-}
-
-.replication__doc-name {
-  position: relative;
-  width: @replication_input_field_width;
-
-}
-
-.replication__doc-name-icon {
-  cursor: pointer;
-  position: absolute;
-  right: 6px;
-  top: 8px;
-  font-size: 11px;
-  padding: 8px;
-  color: #333;
-  .transition(all 0.25s linear);
-}
-
-.replication__doc-name-icon:hover {
-  color: @hoverHighlight;
-}
-
-//use attribute selector to strengthen this to override bootstraps default font size for inputs
-.replication__doc-name-input[type="text"] {
-  padding-right: 32px;
-  font-size: 14px;
-  width: @replication_input_field_width;
-  color: #333;
-}
-
-.replication__button-row {
-  margin-top: 10px;
-  width: 378px;
-  display: flex;
-  justify-content: flex-end;
-}
-
-.replication__clear-link {
-  padding: 12px;
-  font-size: 14px;
-  padding: 12px 0 12px 24px;
-}
-
-.replication__clear-link:focus,
-.replication__clear-link:hover {
-  text-decoration: none;
-}
-
-.replication__activity {
-  padding: 0 10px 0 10px !important;
-  width:100%;
-}
-
-.replication__table-row {
-  font-size: 14px;
-  height: 50px;
-}
-
-td.replication__table-col {
-  vertical-align: middle;
-}
-
-.replication__table--selected {
-  color: @hoverHighlight;
-}
-
-.replication__table-header-source {
-  width: 30%;
-  font-weight: bold;
-  cursor: pointer;
-}
-
-.replication__table-header-target {
-  width: 30%;
-  font-weight: bold;
-  cursor: pointer;
-}
-
-.replication__table-header-type {
-  font-weight: bold;
-  width: 9%;
-  cursor: pointer;
-}
-
-.replication__table-header-status {
-  font-weight: bold;
-  width: 9%;
-  cursor: pointer;
-}
-
-.replication__table-header-time {
-  font-weight: bold;
-  width: 13%;
-  cursor: pointer;
-}
-
-.replication__table-header-actions {
-  font-weight: bold;
-  width: 13%;
-}
-
-td.replication__row-status {
-  text-transform: capitalize;
-  vertical-align: middle;
-}
-
-.replication__row-status--completed {
-  color: #5cb85c;
-}
-
-.replication__row-status--error {
-  color: #d9534f;
-}
-
-.replication__table-header-icon {
-  margin-left: 6px;
-  width: 16px;
-}
-
-.replication__activity_header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-.replication__activity_header-btn {
-  height: 42px;
-}
-
-a.replication__activity_header-btn:active,
-a.replication__activity_header-btn:visited {
-  color: #fff;
-}
-
-.replication__table-bulk-select {
-  width: 68px;
-}
-
-.replication__bulk-select-wrapper {
-  display: flex;
-}
-
-.replication__bulk-select-header {
-  width: 30px;
-  border: 1px solid #aaa;
-}
-
-input.replication__bulk-select-input[type="checkbox"] {
-  margin: 8px;
-}
-
-.bulk-select-trash {
-  color: #505050;
-  border: 1px solid #aaa;
-  background-color: rgba(0, 0, 0, 0);
-  margin-left: 3px;
-  padding-left: 8px;
-  &:hover{
-    color: @hoverHighlight}
-}
-
-.replication__row-actions-list {
-  margin: 0px;
-  text-decoration: none;
-}
-
-.replication__row-list {
-  display: inline;
-}
-
-.replication__row-btn {
-  font-size: 16px;
-  text-decoration: none;
-  cursor: pointer;
-  padding-right: 8px;
-  padding-left: 8px;
-  color: #333;
-  &:visited {
-    color: #333;
-    text-decoration: none;
-  }
-  &:hover {
-    color: @hoverHighlight;
-    text-decoration: none;
-  }
-
-}
-
-.replication__row-btn--no-left-pad {
-  padding-left: 0px;
-}
-
-.replication__row-btn--warning {
-  color: @dangerRed;
-}
-
-.replication__filter-icon {
-  padding-right: 8px;
-}
-
-input.replication__filter-input[type="text"] {
-  font-size: 14px;
-  border: 0;
-  padding: 10px;
-  margin-bottom: 0;
-}
-
-button.replication__error-continue {
-  margin-left: 20px !important; //needed to override bootstrap
-}
-
-.replication__error-cancel,
-.replication__error-continue {
-  background-color: @secondaryBlue;
-  color: #FFF;
-}
-
-.replication__error-cancel:hover,
-.replication__error-continue:hover {
-  background-color: @hoverHighlight;
-  color: #FFF;
-}
-
-td.replication__empty-row {
-  text-align: center;
-}
-
-.replication__remote_icon_help {
-  color: @secondaryBlue
-}
-
-.replication__remote_icon_help:hover {
-  color: @hoverHighlight;
-}
-
-.replication__tooltip {
-  .tooltip-inner {
-    text-align: left
-  }
-}
-
-.replication__activity-caveat {
-  padding-left: 80px;
-}
diff --git a/app/addons/replication/base.js b/app/addons/replication/base.js
deleted file mode 100644
index 951a335..0000000
--- a/app/addons/replication/base.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../core/api';
-import Helpers from "../../helpers";
-import replication from './route';
-import './assets/less/replication.less';
-import { checkForNewApi } from './actions';
-import replicationReducer from './reducers';
-
-replication.initialize = function () {
-  FauxtonAPI.addHeaderLink({ title: 'Replication', href: '#/replication', icon: 'fonticon-replicate' });
-  FauxtonAPI.session.isAuthenticated().then(() => {
-    checkForNewApi();
-  });
-};
-
-FauxtonAPI.addReducers({
-  replication: replicationReducer
-});
-
-FauxtonAPI.registerUrls('replication', {
-  app: (db) => '#/replication/_create/' + db,
-  api: () => Helpers.getApiUrl('/_replicator')
-});
-
-export default replication;
diff --git a/app/addons/replication/components/activity.js b/app/addons/replication/components/activity.js
deleted file mode 100644
index 0d1ae98..0000000
--- a/app/addons/replication/components/activity.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {DeleteModal} from './modals';
-import {ReplicationTable} from './common-table';
-import {ReplicationHeader} from './common-activity';
-
-export default class Activity extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    };
-  }
-
-  closeModal () {
-    this.setState({
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    });
-  }
-
-  showModal (doc) {
-    this.setState({
-      modalVisible: true,
-      unconfirmedDeleteDocId: doc
-    });
-  }
-
-  confirmDeleteDocs () {
-    let docs = [];
-    if (this.state.unconfirmedDeleteDocId) {
-      const doc = this.props.docs.find(doc => doc._id === this.state.unconfirmedDeleteDocId);
-      docs.push(doc);
-    } else {
-      docs = this.props.docs.filter(doc => doc.selected);
-    }
-
-    this.props.deleteDocs(docs);
-    this.closeModal();
-  }
-
-  numDocsSelected () {
-    return this.props.docs.filter(doc => doc.selected).length;
-  }
-
-  render () {
-    const {
-      onFilterChange,
-      activitySort,
-      changeActivitySort,
-      docs,
-      filter,
-      selectAllDocs,
-      someDocsSelected,
-      allDocsSelected,
-      selectDoc
-    } = this.props;
-
-    const {modalVisible} = this.state;
-    return (
-      <div className="replication__activity">
-        <p className="replication__activity-caveat">
-          Replications must have a replication document to display in the following table.
-        </p>
-        <ReplicationHeader
-          filter={filter}
-          onFilterChange={onFilterChange}
-        />
-        <ReplicationTable
-          someDocsSelected={someDocsSelected}
-          allDocsSelected={allDocsSelected}
-          selectAllDocs={selectAllDocs}
-          docs={docs}
-          selectDoc={selectDoc}
-          deleteDocs={this.showModal.bind(this)}
-          descending={activitySort.descending}
-          column={activitySort.column}
-          changeSort={changeActivitySort}
-        />
-        <DeleteModal
-          isReplicationDB={true}
-          multipleDocs={this.numDocsSelected()}
-          visible={modalVisible}
-          onClose={this.closeModal.bind(this)}
-          onClick={this.confirmDeleteDocs.bind(this)}
-        />
-      </div>
-    );
-  }
-}
-
-Activity.propTypes = {
-  docs: PropTypes.array.isRequired,
-  filter: PropTypes.string.isRequired,
-  selectAllDocs: PropTypes.func.isRequired,
-  allDocsSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  onFilterChange: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  activitySort: PropTypes.object.isRequired,
-  changeActivitySort: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/auth-options.js b/app/addons/replication/components/auth-options.js
deleted file mode 100644
index f21f855..0000000
--- a/app/addons/replication/components/auth-options.js
+++ /dev/null
@@ -1,198 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-
-const { StyledSelect } = Components;
-
-export class ReplicationAuth extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.onChangeType = this.onChangeType.bind(this);
-    this.onChangeValue = this.onChangeValue.bind(this);
-
-    // init auth extensions
-    // The extension should provide:
-    //   - 'inputComponent' a React component that will be displayed when the user selects the auth method.
-    //   - 'typeValue' field with an arbitrary ID representing the auth type the extension supports.
-    //   - 'typeLabel' field containing the display label for the authentication method.
-    this.customAuths = FauxtonAPI.getExtensions('Replication:Auth');
-    if (!this.customAuths) {
-      this.customAuths = [];
-    }
-    this.customAuthTypes = this.customAuths.map(auth => auth.typeValue);
-
-    // The extension should provide:
-    //   - 'authType' is a string representing the auth type.
-    //   - 'helpText' string with the text to be displayed when the auth type is selected.
-    this.customAuthHelp = FauxtonAPI.getExtensions('Replication:Auth-help');
-    if (!this.customAuthHelp) {
-      this.customAuthHelp = [];
-    }
-  }
-
-  getAuthOptions = () => {
-    const userPasswordLabel = app.i18n.en_US['replication-user-password-auth-label'];
-    const authOptions = [
-      { value: Constants.REPLICATION_AUTH_METHOD.NO_AUTH, label: 'None' },
-      { value: Constants.REPLICATION_AUTH_METHOD.BASIC, label: userPasswordLabel }
-    ];
-    this.customAuths.map(auth => {
-      authOptions.push({ value: auth.typeValue, label: auth.typeLabel });
-    });
-
-    return authOptions.map(option => <option value={option.value} key={option.value}>{option.label}</option>);
-  }
-
-  onChangeType(newType) {
-    this.props.onChangeAuthType(newType);
-  }
-
-  onChangeValue(newValue) {
-    this.props.onChangeAuth(newValue);
-  }
-
-  getAuthInputFields(authValue, authType) {
-    const {authId} = this.props;
-    if (authType == Constants.REPLICATION_AUTH_METHOD.BASIC) {
-      return <UserPasswordAuthInput onChange={this.onChangeValue} auth={authValue} authId={authId}/>;
-    }
-    const matchedAuths = this.customAuths.filter(el => el.typeValue === authType);
-    if (matchedAuths && matchedAuths.length > 0) {
-      const InputComp = matchedAuths[0].inputComponent;
-      return <InputComp onChange={this.onChangeValue} auth={authValue} />;
-    }
-
-    return null;
-  }
-
-  getHelpText(authType) {
-    const helpText = this.customAuthHelp.filter(el => authType === el.authType).map(el => el.helpText);
-    if (helpText.length == 0) {
-      return null;
-    }
-
-    return (
-      <div className="replication__section">
-        <div className="replication__input-label"></div>
-        <div className="replication__help-tile">{helpText[0]}</div>
-      </div>);
-  }
-
-  render () {
-    const {credentials, authType, authId} = this.props;
-    return (<React.Fragment>
-      <div className="replication__section">
-        <div className="replication__input-label">
-          Authentication:
-        </div>
-        <div className="replication__input-select">
-          <StyledSelect
-            selectContent={this.getAuthOptions()}
-            selectChange={(e) => this.onChangeType(e.target.value)}
-            selectId={'select-' + authId}
-            selectValue={authType} />
-        </div>
-      </div>
-      {this.getAuthInputFields(credentials, authType)}
-      {this.getHelpText(authType)}
-    </React.Fragment>);
-  }
-}
-
-ReplicationAuth.propTypes = {
-  authId: PropTypes.string.isRequired,
-  authType: PropTypes.string.isRequired,
-  credentials: PropTypes.object,
-  onChangeAuth: PropTypes.func.isRequired,
-  onChangeAuthType: PropTypes.func.isRequired
-};
-
-ReplicationAuth.defaultProps = {
-  authType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  onChangeAuthType: () => {},
-  onChangeAuth: () => {}
-};
-
-export class UserPasswordAuthInput extends React.Component {
-
-  constructor (props) {
-    super(props);
-    this.updatePassword = this.updatePassword.bind(this);
-    this.updateUsername = this.updateUsername.bind(this);
-    this.state = {
-      username: props.auth && props.auth.username ? props.auth.username : '',
-      password: props.auth && props.auth.password ? props.auth.password : ''
-    };
-  }
-
-  updatePassword(newValue) {
-    this.setState({password: newValue});
-    this.props.onChange({
-      username: this.state.username,
-      password: newValue
-    });
-  }
-
-  updateUsername(newValue) {
-    this.setState({username: newValue});
-    this.props.onChange({
-      username: newValue,
-      password: this.state.password
-    });
-  }
-
-  render () {
-    const usernamePlaceholder = app.i18n.en_US['replication-username-input-placeholder'];
-    const passwordPlaceholder = app.i18n.en_US['replication-password-input-placeholder'];
-    const { authId } = this.props;
-    return (
-      <React.Fragment>
-        <div className="replication__section">
-          <div className="replication__input-label"></div>
-          <div>
-            <input
-              id={authId + '-username'}
-              type="text"
-              placeholder={usernamePlaceholder}
-              value={this.state.username}
-              onChange={(e) => this.updateUsername(e.target.value)}
-              readOnly={this.props.usernameReadOnly}
-            />
-          </div>
-        </div>
-        <div className="replication__section">
-          <div className="replication__input-label"></div>
-          <div>
-            <input
-              id={authId + '-password'}
-              type="password"
-              placeholder={passwordPlaceholder}
-              value={this.state.password}
-              onChange={(e) => this.updatePassword(e.target.value)}
-            />
-          </div>
-        </div>
-      </React.Fragment>
-    );
-  }
-}
-
-UserPasswordAuthInput.propTypes = {
-  auth: PropTypes.object.isRequired,
-  onChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/common-activity.js b/app/addons/replication/components/common-activity.js
deleted file mode 100644
index 3b503fe..0000000
--- a/app/addons/replication/components/common-activity.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-
-export const ReplicationFilter = ({value, onChange}) => {
-  return (
-    <div className="replication__filter">
-      <i className="replication__filter-icon fonticon-filter" />
-      <input
-        type="text"
-        placeholder="Filter replications"
-        className="replication__filter-input"
-        value={value}
-        onChange={(e) => {onChange(e.target.value);}}
-      />
-    </div>
-  );
-};
-
-ReplicationFilter.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export const ReplicationHeader = ({filter, onFilterChange}) => {
-  return (
-    <div className="replication__activity_header">
-      <div></div>
-      <ReplicationFilter value={filter} onChange={onFilterChange} />
-      <a href="#/replication/_create" className="btn save replication__activity_header-btn btn-primary">
-        <i className="icon fonticon-plus-circled"></i>
-        New Replication
-      </a>
-    </div>
-  );
-};
-
-ReplicationHeader.propTypes = {
-  filter: PropTypes.string.isRequired,
-  onFilterChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/common-table.js b/app/addons/replication/components/common-table.js
deleted file mode 100644
index f12b382..0000000
--- a/app/addons/replication/components/common-table.js
+++ /dev/null
@@ -1,428 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {Table, Tooltip, OverlayTrigger} from "react-bootstrap";
-import moment from 'moment';
-import {ErrorModal} from './modals';
-import {removeCredentialsFromUrl} from '../api';
-import Helpers from '../../../helpers';
-
-const getDbNameFromUrl = (urlObj, root) => {
-  try {
-    const urlWithoutDb = new URL(root);
-    const dbName = urlObj.pathname.substring(urlWithoutDb.pathname.length);
-    return encodeURIComponent(dbName);
-  } catch (e) {
-    return '';
-  }
-};
-
-export const formatUrl = (url) => {
-  let urlObj;
-  let encoded;
-  try {
-    urlObj = new URL(removeCredentialsFromUrl(url));
-  } catch (e) {
-    return '';
-  }
-  const root = Helpers.getRootUrl();
-  encoded = getDbNameFromUrl(urlObj, root);
-  if (url.indexOf(window.location.hostname) > -1) {
-    return (
-      <span>
-        {root}
-        <a href={`#/database/${encoded}/_all_docs`}>{decodeURIComponent(encoded)}</a>
-      </span>
-    );
-  }
-
-  return `${urlObj.origin}${urlObj.pathname}`;
-};
-
-class RowStatus extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-    };
-  }
-
-  showModal () {
-    this.setState({modalVisible: true});
-  }
-
-  closeModal () {
-    this.setState({modalVisible: false});
-  }
-
-  getErrorIcon () {
-    const {status} = this.props;
-    if (status !== 'error' && status !== 'retrying') {
-      return null;
-    }
-
-    return (
-      <span>
-        <a
-          data-bypass="true"
-          className="replication__row-btn replication__row-btn--warning icon-exclamation-sign"
-          onClick={this.showModal.bind(this)}
-          title="View error message">
-        </a>
-        <ErrorModal
-          onClick={this.closeModal.bind(this)}
-          onClose={this.closeModal.bind(this)}
-          errorMsg={this.props.errorMsg}
-          visible={this.state.modalVisible}
-          status={status}
-        />
-      </span>
-    );
-  }
-
-  render () {
-    const {statusTime, status} = this.props;
-    let momentTime = moment(statusTime);
-    let statusValue = <span>{status}</span>;
-
-    if (momentTime.isValid()) {
-      const formattedStatusTime = momentTime.format("MMM Do, h:mm a");
-      const stateTimeTooltip = <Tooltip id="">Last updated: {formattedStatusTime}</Tooltip>;
-      statusValue =
-        <OverlayTrigger placement="top" overlay={stateTimeTooltip}>
-          <span>{status}</span>
-        </OverlayTrigger>;
-    }
-
-    return (
-      <td className={`replication__row-status replication__row-status--${status}`}>
-        {statusValue}
-        {this.getErrorIcon()}
-      </td>
-    );
-  }
-}
-
-RowStatus.propTypes = {
-  statusTime: PropTypes.any,
-  status: PropTypes.string,
-  errorMsg: PropTypes.string.isRequired,
-};
-
-RowStatus.defaultProps = {
-  status: ''
-};
-
-const RowActions = ({onlyDeleteAction, _id, url, deleteDocs}) => {
-  const actions = [];
-  if (!onlyDeleteAction) {
-    actions.push(
-      <li className="replication__row-list" key={1}>
-        <a
-          href={`#replication/id/${encodeURIComponent(_id)}`}
-          className="replication__row-btn icon-wrench replication__row-btn--no-left-pad"
-          title={'Edit replication'}
-          data-bypass="true"
-        >
-        </a>
-      </li>
-    );
-    actions.push(
-      <li className="replication__row-list" key={2}>
-        <a
-          className="replication__row-btn fonticon-document"
-          title={'Edit replication document'}
-          href={url}
-          data-bypass="true"
-        >
-        </a>
-      </li>
-    );
-  }
-
-  actions.push(
-    <li className="replication__row-list" key={3}>
-      <a
-        className={`replication__row-btn icon-trash ${onlyDeleteAction ? 'replication__row-btn--no-left-pad' : ''} `}
-        title={`Delete ${onlyDeleteAction ? 'job' : 'document'} ${_id}`}
-        onClick={() => deleteDocs(_id)}>
-      </a>
-    </li>
-  );
-
-  return (
-    <ul className="replication__row-actions-list">
-      {actions}
-    </ul>
-  );
-};
-
-RowActions.propTypes = {
-  _id: PropTypes.string.isRequired,
-  url: PropTypes.string,
-  error: PropTypes.bool.isRequired,
-  errorMsg: PropTypes.string.isRequired,
-  deleteDocs: PropTypes.func.isRequired
-};
-
-const Row = ({
-  _id,
-  source,
-  target,
-  type,
-  startTime,
-  status,
-  statusTime,
-  url,
-  selected,
-  selectDoc,
-  errorMsg,
-  deleteDocs,
-  onlyDeleteAction,
-  showStateRow
-}) => {
-  let momentTime = moment(startTime);
-  const formattedStartTime = momentTime.isValid() ? momentTime.format("MMM Do, h:mm a") : '';
-  let stateRow = null;
-
-  if (showStateRow) {
-    stateRow = <RowStatus
-      statusTime={statusTime}
-      status={status}
-      errorMsg={errorMsg}
-    />;
-  }
-
-  return (
-    <tr className="replication__table-row">
-      <td className="replication__table-col"><input checked={selected} type="checkbox" onChange={() => selectDoc(_id)} /> </td>
-      <td className="replication__table-col">{formatUrl(source)}</td>
-      <td className="replication__table-col">{formatUrl(target)}</td>
-      <td className="replication__table-col">{formattedStartTime}</td>
-      <td className="replication__table-col">{type}</td>
-      {stateRow}
-      <td className="replication__table-col">
-        <RowActions
-          onlyDeleteAction={onlyDeleteAction}
-          deleteDocs={deleteDocs}
-          _id={_id}
-          url={url}
-          error={status === "error" || status === 'retrying'}
-          errorMsg={errorMsg}
-        />
-      </td>
-    </tr>
-
-  );
-};
-
-Row.propTypes = {
-  _id: PropTypes.string.isRequired,
-  source: PropTypes.string.isRequired,
-  target: PropTypes.string.isRequired,
-  type: PropTypes.string.isRequired,
-  status: PropTypes.string,
-  url: PropTypes.string,
-  statusTime: PropTypes.object.isRequired,
-  startTime: PropTypes.object,
-  selected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  errorMsg: PropTypes.string.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  onlyDeleteAction: PropTypes.bool.isRequired,
-  showStateRow: PropTypes.bool.isRequired
-};
-
-const BulkSelectHeader = ({isSelected, deleteDocs, someDocsSelected, onCheck}) => {
-  const trash = someDocsSelected ?
-    <button
-      onClick={() => deleteDocs()}
-      className="bulk-select-trash fonticon fonticon-trash"
-      title="Delete all selected">
-    </button> : null;
-
-  return (
-    <div className="replication__bulk-select-wrapper">
-      <div className="replication__bulk-select-header">
-        <input className="replication__bulk-select-input" checked={isSelected} type="checkbox" onChange={onCheck} />
-      </div>
-      {trash}
-    </div>
-  );
-};
-
-BulkSelectHeader.propTypes = {
-  isSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  onCheck: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired
-};
-
-const EmptyRow = ({msg}) => {
-  return (
-    <tr>
-      <td colSpan="7" className="replication__empty-row">
-        {msg}
-      </td>
-    </tr>
-  );
-};
-
-EmptyRow.defaultProps = {
-  msg: "There is no replicator-db activity or history to display."
-};
-
-
-export class ReplicationTable extends React.Component {
-  constructor (props) {
-    super(props);
-  }
-
-  sort(column, descending, docs) {
-    let orderChanged = false;
-    const sorted = docs.sort((a, b) => {
-      if (a[column] < b[column]) {
-        orderChanged = true;
-        return -1;
-      }
-
-      if (a[column] > b[column]) {
-        orderChanged = true;
-        return 1;
-      }
-
-      return 0;
-
-    });
-
-    if (!descending && orderChanged) {
-      sorted.reverse();
-    }
-
-    return sorted;
-  }
-
-  renderRows () {
-    if (this.props.docs.length === 0) {
-      return <EmptyRow />;
-    }
-
-    return this.sort(this.props.column, this.props.descending, this.props.docs).map((doc, i) => {
-      return <Row
-        key={i}
-        _id={doc._id}
-        selected={doc.selected}
-        selectDoc={this.props.selectDoc}
-        source={doc.source}
-        target={doc.target}
-        type={doc.continuous === true ? 'Continuous' : 'One time'}
-        status={doc.status}
-        statusTime={doc.statusTime}
-        startTime={doc.startTime}
-        url={doc.url}
-        deleteDocs={this.props.deleteDocs}
-        errorMsg={doc.errorMsg}
-        doc={doc}
-        onlyDeleteAction={this.props.onlyDeleteAction}
-        showStateRow={this.props.showStateRow}
-      />;
-    });
-  }
-
-  iconDirection (column) {
-    if (column === this.props.column && !this.props.descending) {
-      return 'fonticon-up-dir';
-    }
-
-    return 'fonticon-down-dir';
-  }
-
-  onSort (column) {
-    return () => {
-      this.props.changeSort({
-        descending: column === this.props.column ? !this.props.descending : true,
-        column
-      });
-    };
-  }
-
-  isSelected (header) {
-    if (header === this.props.column) {
-      return 'replication__table--selected';
-    }
-
-    return '';
-  }
-
-  stateCol () {
-    if (this.props.showStateRow) {
-      return (
-        <th className="replication__table-header-status" onClick={this.onSort('status')}>
-          State
-          <span className={`replication__table-header-icon ${this.iconDirection('status')} ${this.isSelected('status')}`} />
-        </th>
-      );
-    }
-
-    return null;
-  }
-
-  render () {
-
-    return (
-      <Table striped>
-        <thead>
-          <tr>
-            <th className="replication__table-bulk-select">
-              <BulkSelectHeader
-                isSelected={this.props.allDocsSelected}
-                onCheck={this.props.selectAllDocs}
-                someDocsSelected={this.props.someDocsSelected}
-                deleteDocs={this.props.deleteDocs}
-              />
-            </th>
-            <th className="replication__table-header-source" onClick={this.onSort('source')}>
-              Source
-              <span className={`replication__table-header-icon ${this.iconDirection('source')} ${this.isSelected('source')}`} />
-            </th>
-            <th className="replication__table-header-target" onClick={this.onSort('target')}>
-              Target
-              <span className={`replication__table-header-icon ${this.iconDirection('target')} ${this.isSelected('target')}`} />
-            </th>
-            <th className="replication__table-header-time" onClick={this.onSort('statusTime')}>
-              Start Time
-              <span className={`replication__table-header-icon ${this.iconDirection('statusTime')} ${this.isSelected('statusTime')}`} />
-            </th>
-            <th className="replication__table-header-type" onClick={this.onSort('continuous')}>
-              Type
-              <span className={`replication__table-header-icon ${this.iconDirection('continuous')} ${this.isSelected('continuous')}`} />
-            </th>
-            {this.stateCol()}
-            <th className="replication__table-header-actions">
-              Actions
-            </th>
-          </tr>
-        </thead>
-        <tbody>
-          {this.renderRows()}
-        </tbody>
-      </Table>
-    );
-  }
-}
-
-ReplicationTable.defaultProps = {
-  onlyDeleteAction: false,
-  showStateRow: true
-};
diff --git a/app/addons/replication/components/modals.js b/app/addons/replication/components/modals.js
deleted file mode 100644
index 73cfda5..0000000
--- a/app/addons/replication/components/modals.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {Modal} from 'react-bootstrap';
-import Components from '../../components/react-components';
-
-const {ConfirmButton} = Components;
-
-
-export const DeleteModal = ({
-  visible,
-  onClose,
-  onClick,
-  multipleDocs,
-  isReplicationDB
-}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  let header = "";
-  let btnText = `Delete ${isReplicationDB ? 'Document' : 'Replication Job'}`;
-  let infoSection = `Deleting a replication ${isReplicationDB ? 'document' : 'job'} stops continuous replication
-          and incomplete one-time replication, but does not affect replicated documents.`;
-
-  if (multipleDocs > 1) {
-    header = `You are deleting <strong>${multipleDocs}</strong> replication ${isReplicationDB ? 'documents' : 'jobs'}.`;
-    btnText = `Delete ${isReplicationDB ? 'Documents' : 'Replication Jobs'}`;
-  }
-
-  return (
-    <Modal dialogClassName="replication_delete-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>Verify Deletion</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p dangerouslySetInnerHTML={{__html: header}}></p>
-        <p>{infoSection}</p>
-      </Modal.Body>
-      <Modal.Footer>
-        <a className="cancel-link" onClick={onClose}>Cancel</a>
-        <ConfirmButton
-          customIcon={"icon-trash"}
-          text={btnText}
-          onClick={onClick}
-        />
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-DeleteModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  isReplicationDB: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  multipleDocs: PropTypes.number.isRequired
-};
-
-DeleteModal.defaultProps = {
-  isReplicationDB: true
-};
-
-export const ErrorModal = ({visible, onClose, errorMsg, status}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  let title = "Replication Error";
-  let warning = <p>The replication job will be tried at increasing intervals</p>;
-
-  if (status.toLowerCase() === 'failed') {
-    title = "Replication Error - Failed";
-    warning = null;
-  }
-
-  return (
-    <Modal dialogClassName="replication__error-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>{title}</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p>
-          {errorMsg}
-        </p>
-        {warning}
-      </Modal.Body>
-      <Modal.Footer>
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-ErrorModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  errorMsg: PropTypes.string.isRequired
-};
-
-export const ConflictModal = ({visible, docId, onClose, onClick}) => {
-
-  if (!visible) {
-    return null;
-  }
-
-  return (
-    <Modal dialogClassName="replication__error-doc-modal" show={visible} onHide={() => onClose()}>
-      <Modal.Header closeButton={true}>
-        <Modal.Title>Custom ID Conflict</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>
-        <p>
-          A replication document with ID <code>{docId}</code> already exists.
-        </p>
-        <p>
-          You can overwrite the existing document, or change the new replication job’s document ID.
-        </p>
-        <p>
-          If you overwrite the existing document, any replication job currently using the replication document will stop,
-          and that job will not appear in Replicator DB Activity. Replicated documents will not be affected.
-        </p>
-      </Modal.Body>
-      <Modal.Footer>
-        <button onClick={onClose} className="btn replication__error-cancel">
-          Change Document ID
-        </button>
-        <button onClick={onClick} className="btn replication__error-continue">
-          <i className="icon icon-eraser" /> Overwrite Existing Document
-        </button>
-      </Modal.Footer>
-    </Modal>
-  );
-};
-
-ConflictModal.propTypes = {
-  visible: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClose: PropTypes.func.isRequired,
-  docId: PropTypes.string.isRequired
-};
diff --git a/app/addons/replication/components/newreplication.js b/app/addons/replication/components/newreplication.js
deleted file mode 100644
index 08da3b3..0000000
--- a/app/addons/replication/components/newreplication.js
+++ /dev/null
@@ -1,399 +0,0 @@
-// Licensed 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.
-
-import base64 from 'base-64';
-import React from 'react';
-import Helpers from '../../../helpers';
-import {json} from '../../../core/ajax';
-import FauxtonAPI from '../../../core/api';
-import {ReplicationSource} from './source';
-import {ReplicationTarget} from './target';
-import {ReplicationOptions} from './options';
-import {ReplicationSubmit} from './submit';
-import {ReplicationAuth} from './auth-options';
-import Constants from '../constants';
-import {ConflictModal} from './modals';
-import {isEmpty} from 'lodash';
-
-export default class NewReplicationController extends React.Component {
-  constructor (props) {
-    super(props);
-    this.submit = this.submit.bind(this);
-    this.checkAuth = this.checkAuth.bind(this);
-    this.runReplicationChecks = this.runReplicationChecks.bind(this);
-  }
-
-  checkAuth () {
-    this.props.hideConflictModal();
-    const { replicationSource, replicationTarget,
-      sourceAuthType, targetAuthType, sourceAuth, targetAuth } = this.props;
-
-    const isLocalSource = replicationSource === Constants.REPLICATION_SOURCE.LOCAL;
-    const isLocalTarget = replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE ||
-      replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE;
-
-    // Ask user to select an auth method for local source/target when one is not selected
-    // and not on admin party
-    if (!FauxtonAPI.session.isAdminParty()) {
-      if (isLocalSource && sourceAuthType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-        FauxtonAPI.addNotification({
-          msg: 'Missing credentials for local source database.',
-          type: 'error',
-          clear: true
-        });
-        return;
-      }
-      if (isLocalTarget && targetAuthType === Constants.REPLICATION_AUTH_METHOD.NO_AUTH) {
-        FauxtonAPI.addNotification({
-          msg: 'Missing credentials for local target database.',
-          type: 'error',
-          clear: true
-        });
-        return;
-      }
-    }
-
-    this.checkLocalAccountCredentials(sourceAuthType, sourceAuth, 'source', isLocalSource).then(() => {
-      this.checkLocalAccountCredentials(targetAuthType, targetAuth, 'target', isLocalTarget).then(() => {
-        this.submit();
-      }, () => {});
-    }, () => {});
-  }
-
-  checkLocalAccountCredentials(authType, auth, label, isLocal) {
-    // Skip check if it's a remote tb or not using BASIC auth
-    if (authType !== Constants.REPLICATION_AUTH_METHOD.BASIC || !isLocal) {
-      return FauxtonAPI.Promise.resolve(true);
-    }
-
-    if (!auth.username || !auth.password) {
-      const err = `Missing ${label} credentials.`;
-      FauxtonAPI.addNotification({
-        msg: err,
-        type: 'error',
-        clear: true
-      });
-      return FauxtonAPI.Promise.reject(new Error(err));
-    }
-
-    return this.checkCredentials(auth.username, auth.password).then((resp) => {
-      if (resp.error) {
-        throw (resp);
-      }
-      return true;
-    }).catch(err => {
-      FauxtonAPI.addNotification({
-        msg: `Your username or password for ${label} database is incorrect.`,
-        type: 'error',
-        clear: true
-      });
-      throw err;
-    });
-  }
-
-  checkCredentials(username, password) {
-    return json(Helpers.getServerUrl('/'), 'GET', {
-      credentials: 'omit',
-      headers: {
-        'Authorization':'Basic ' + base64.encode(username + ':' + password)
-      }
-    });
-  }
-
-  checkReplicationDocID () {
-    const {showConflictModal, replicationDocName, checkReplicationDocID} = this.props;
-    checkReplicationDocID(replicationDocName).then(existingDoc => {
-      if (existingDoc) {
-        showConflictModal();
-        return;
-      }
-
-      this.checkAuth();
-    });
-  }
-
-  runReplicationChecks () {
-    const {replicationDocName} = this.props;
-    if (!this.checkSourceTargetDatabases()) {
-      return;
-    }
-    if (replicationDocName) {
-      this.checkReplicationDocID();
-      return;
-    }
-
-    this.checkAuth();
-  }
-
-  checkSourceTargetDatabases () {
-    const {
-      remoteTarget,
-      remoteSource,
-      replicationSource,
-      replicationTarget,
-      localTarget,
-      localSource,
-      databases
-    } = this.props;
-
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE && _.includes(databases, localTarget)) {
-      FauxtonAPI.addNotification({
-        msg: 'The <code>' + localTarget + '</code> database already exists locally. Please enter another database name.',
-        type: 'error',
-        escape: false,
-        clear: true
-      });
-      return false;
-    }
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE ||
-        replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE) {
-      let error = '';
-      if (/\s/.test(localTarget)) {
-        error = 'The target database may not contain any spaces.';
-      } else if (/^_/.test(localTarget)) {
-        error = 'The target database may not start with an underscore.';
-      }
-
-      if (error) {
-        FauxtonAPI.addNotification({
-          msg: error,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-
-    //check if remote source/target URL is valid
-    const isRemoteSource = replicationSource === Constants.REPLICATION_SOURCE.REMOTE;
-    if (isRemoteSource && !isEmpty(remoteSource)) {
-      let errorMessage = '';
-      try {
-        const url = new URL(remoteSource);
-        if (url.pathname.slice(1) === '') {
-          errorMessage = 'Invalid source database URL. Database name is missing.';
-        }
-      } catch (err) {
-        errorMessage = 'Invalid source database URL.';
-      }
-      if (errorMessage) {
-        FauxtonAPI.addNotification({
-          msg: errorMessage,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-    const isRemoteTarget = replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-      replicationTarget === Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE;
-    if (isRemoteTarget && !isEmpty(remoteTarget)) {
-      let errorMessage = '';
-      try {
-        const url = new URL(remoteTarget);
-        if (url.pathname.slice(1) === '') {
-          errorMessage = 'Invalid target database URL. Database name is missing.';
-        }
-      } catch (err) {
-        errorMessage = 'Invalid target database URL.';
-      }
-      if (errorMessage) {
-        FauxtonAPI.addNotification({
-          msg: errorMessage,
-          type: 'error',
-          escape: false,
-          clear: true
-        });
-        return false;
-      }
-    }
-
-    //check that source and target are not the same. They can trigger a false positive if they are ""
-    if ((remoteTarget === remoteSource && !isEmpty(remoteTarget))
-        || (localSource === localTarget && !isEmpty(localSource))) {
-      FauxtonAPI.addNotification({
-        msg: 'Cannot replicate a database to itself',
-        type: 'error',
-        escape: false,
-        clear: true
-      });
-
-      return false;
-    }
-
-    return true;
-  }
-
-  submit () {
-    const {
-      replicationTarget,
-      replicationSource,
-      replicationType,
-      replicationDocName,
-      remoteTarget,
-      remoteSource,
-      localTarget,
-      localSource,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth,
-      targetDatabasePartitioned
-    } = this.props;
-
-    let _rev;
-    if (replicationDocName) {
-      const doc = this.props.docs.find(doc => doc._id === replicationDocName);
-      if (doc) {
-        _rev = doc._rev;
-      }
-    }
-
-    this.props.replicate({
-      replicationTarget,
-      replicationSource,
-      replicationType,
-      replicationDocName,
-      localTarget,
-      localSource,
-      remoteTarget,
-      remoteSource,
-      _rev,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth,
-      targetDatabasePartitioned
-    });
-  }
-
-  confirmButtonEnabled () {
-    const {
-      remoteSource,
-      localSourceKnown,
-      replicationSource,
-      replicationTarget,
-      localTargetKnown,
-      localTarget,
-      submittedNoChange,
-    } = this.props;
-
-    if (submittedNoChange) {
-      return false;
-    }
-
-    if (!replicationSource || !replicationTarget) {
-      return false;
-    }
-
-    if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL && !localSourceKnown) {
-      return false;
-    }
-    if (replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE && !localTargetKnown) {
-      return false;
-    }
-
-    if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE && !localTarget) {
-      return false;
-    }
-
-    if (replicationSource === Constants.REPLICATION_SOURCE.REMOTE && remoteSource === "") {
-      return false;
-    }
-
-    return true;
-  }
-
-  render () {
-    const {
-      replicationSource,
-      replicationTarget,
-      replicationType,
-      replicationDocName,
-      conflictModalVisible,
-      databases,
-      localSource,
-      remoteSource,
-      remoteTarget,
-      localTarget,
-      targetDatabasePartitioned,
-      allowNewPartitionedLocalDbs,
-      updateFormField,
-      clearReplicationForm,
-      sourceAuthType,
-      sourceAuth,
-      targetAuthType,
-      targetAuth
-    } = this.props;
-
-    return (
-      <div style={ {paddingBottom: 20} }>
-        <ReplicationSource
-          replicationSource={replicationSource}
-          localSource={localSource}
-          databases={databases}
-          remoteSource={remoteSource}
-          onSourceSelect={updateFormField('replicationSource')}
-          onRemoteSourceChange={updateFormField('remoteSource')}
-          onLocalSourceChange={updateFormField('localSource')}
-        />
-        <ReplicationAuth
-          credentials={sourceAuth}
-          authType={sourceAuthType}
-          onChangeAuthType={updateFormField('sourceAuthType')}
-          onChangeAuth={updateFormField('sourceAuth')}
-          authId={'replication-source-auth'}
-        />
-        <hr className="replication__seperator" size="1"/>
-        <ReplicationTarget
-          replicationTarget={replicationTarget}
-          onTargetChange={updateFormField('replicationTarget')}
-          databases={databases}
-          localTarget={localTarget}
-          remoteTarget={remoteTarget}
-          allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-          targetDatabasePartitioned={targetDatabasePartitioned}
-          onRemoteTargetChange={updateFormField('remoteTarget')}
-          onLocalTargetChange={updateFormField('localTarget')}
-          onTargetDatabasePartitionedChange={updateFormField('targetDatabasePartitioned')}
-        />
-        <ReplicationAuth
-          credentials={targetAuth}
-          authType={targetAuthType}
-          onChangeAuthType={updateFormField('targetAuthType')}
-          onChangeAuth={updateFormField('targetAuth')}
-          authId={'replication-target-auth'}
-        />
-        <hr className="replication__seperator" size="1"/>
-        <ReplicationOptions
-          replicationType={replicationType}
-          replicationDocName={replicationDocName}
-          onDocChange={updateFormField('replicationDocName')}
-          onTypeChange={updateFormField('replicationType')}
-        />
-        <ReplicationSubmit
-          disabled={!this.confirmButtonEnabled()}
-          onClick={this.runReplicationChecks}
-          onClear={clearReplicationForm}
-        />
-        <ConflictModal
-          visible={conflictModalVisible}
-          onClick={this.checkAuth}
-          onClose={this.props.hideConflictModal}
-          docId={replicationDocName}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/replication/components/options.js b/app/addons/replication/components/options.js
deleted file mode 100644
index 686413a..0000000
--- a/app/addons/replication/components/options.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-
-const { StyledSelect } = Components;
-
-const getReplicationTypeOptions = () => {
-  return [
-    { value: Constants.REPLICATION_TYPE.ONE_TIME, label: 'One time' },
-    { value: Constants.REPLICATION_TYPE.CONTINUOUS, label: 'Continuous' }
-  ].map(option => <option value={option.value} key={option.value}>{option.label}</option>);
-};
-
-const ReplicationType = ({value, onChange}) => {
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Replication type:
-      </div>
-      <div className="replication__input-select">
-        <StyledSelect
-          selectContent={getReplicationTypeOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-target"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationType.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationDoc = ({value, onChange}) =>
-  <div className="replication__section">
-    <div className="replication__input-label">
-    Replication document:
-    </div>
-    <div className="replication__doc-name">
-      <span className="fonticon fonticon-cancel replication__doc-name-icon" title="Clear field"
-        onClick={() => onChange('')} />
-      <input
-        type="text"
-        className="replication__doc-name-input"
-        placeholder="Custom ID (optional)"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  </div>;
-
-ReplicationDoc.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export class ReplicationOptions extends React.Component {
-
-  render () {
-    const {replicationType, replicationDocName, onDocChange, onTypeChange} = this.props;
-
-    return (
-      <div>
-        <h3>Options</h3>
-        <ReplicationType
-          onChange={onTypeChange}
-          value={replicationType}
-        />
-        <ReplicationDoc
-          onChange={onDocChange}
-          value={replicationDocName}
-        />
-      </div>
-    );
-  }
-
-}
-
-ReplicationOptions.propTypes = {
-  replicationDocName: PropTypes.string.isRequired,
-  replicationType: PropTypes.string.isRequired,
-  onDocChange: PropTypes.func.isRequired,
-  onTypeChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/remoteexample.js b/app/addons/replication/components/remoteexample.js
deleted file mode 100644
index ddde70a..0000000
--- a/app/addons/replication/components/remoteexample.js
+++ /dev/null
@@ -1,50 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import {OverlayTrigger, Tooltip} from 'react-bootstrap';
-
-const tooltipExisting = (
-  <Tooltip id="tooltip" className="replication__tooltip">
-    <p>
-      If you know the credentials for the remote account, you can use that remote username and password.
-    </p>
-    <p>
-      If a remote database granted permissions to your local account, you can use the local-account username and password.
-    </p>
-    <p>
-      If the remote database granted permissions to unauthenticated connections, you do not need to enter a username or password.
-    </p>
-  </Tooltip>
-);
-
-const tooltipNew = (
-  <Tooltip id="tooltip" className="replication__tooltip">
-    Enter the username and password of the remote account.
-  </Tooltip>
-);
-
-const RemoteExample = ({newRemote}) => {
-  const newRemoteText = newRemote ? 'If a "new" database already exists, data will replicate into that existing database.' : null;
-  return (
-    <div
-      className="replication__remote-connection-url-text">
-      https://$USERNAME:$PASSWORD@$REMOTE_SERVER/$DATABASE
-      &nbsp;
-      <OverlayTrigger placement="right" overlay={newRemote ? tooltipNew : tooltipExisting}>
-        <i className="replication__remote_icon_help icon icon-question-sign"/>
-      </OverlayTrigger>
-      <p>{newRemoteText}</p>
-    </div>
-  );
-};
-
-export default RemoteExample;
diff --git a/app/addons/replication/components/replicate-activity.js b/app/addons/replication/components/replicate-activity.js
deleted file mode 100644
index 931185a..0000000
--- a/app/addons/replication/components/replicate-activity.js
+++ /dev/null
@@ -1,118 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import {DeleteModal} from './modals';
-import {ReplicationTable} from './common-table';
-import {ReplicationHeader} from './common-activity';
-
-export default class Activity extends React.Component {
-  constructor (props) {
-    super(props);
-    this.state = {
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    };
-  }
-
-  closeModal () {
-    this.setState({
-      modalVisible: false,
-      unconfirmedDeleteDocId: null
-    });
-  }
-
-  showModal (docId) {
-    this.setState({
-      modalVisible: true,
-      unconfirmedDeleteDocId: docId
-    });
-  }
-
-  confirmDeleteDocs () {
-    let docs = [];
-    if (this.state.unconfirmedDeleteDocId) {
-      const doc = this.props.docs.find(doc => doc._id === this.state.unconfirmedDeleteDocId);
-      docs.push(doc);
-    } else {
-      docs = this.props.docs.filter(doc => doc.selected);
-    }
-
-    this.props.deleteDocs(docs);
-    this.closeModal();
-  }
-
-  numDocsSelected () {
-    return this.props.docs.filter(doc => doc.selected).length;
-  }
-
-  render () {
-    const {
-      onFilterChange,
-      activitySort,
-      changeActivitySort,
-      docs,
-      filter,
-      selectAllDocs,
-      someDocsSelected,
-      allDocsSelected,
-      selectDoc
-    } = this.props;
-
-    const {modalVisible} = this.state;
-    return (
-      <div className="replication__activity">
-        <p className="replication__activity-caveat">
-          Active _replicate jobs are displayed. Completed and failed jobs are not.
-        </p>
-        <ReplicationHeader
-          filter={filter}
-          onFilterChange={onFilterChange}
-        />
-        <ReplicationTable
-          onlyDeleteAction={true}
-          showStateRow={false}
-          someDocsSelected={someDocsSelected}
-          allDocsSelected={allDocsSelected}
-          selectAllDocs={selectAllDocs}
-          docs={docs}
-          selectDoc={selectDoc}
-          deleteDocs={this.showModal.bind(this)}
-          descending={activitySort.descending}
-          column={activitySort.column}
-          changeSort={changeActivitySort}
-        />
-        <DeleteModal
-          isReplicationDB={false}
-          multipleDocs={this.numDocsSelected()}
-          visible={modalVisible}
-          onClose={this.closeModal.bind(this)}
-          onClick={this.confirmDeleteDocs.bind(this)}
-        />
-      </div>
-    );
-  }
-}
-
-Activity.propTypes = {
-  docs: PropTypes.array.isRequired,
-  filter: PropTypes.string.isRequired,
-  selectAllDocs: PropTypes.func.isRequired,
-  allDocsSelected: PropTypes.bool.isRequired,
-  someDocsSelected: PropTypes.bool.isRequired,
-  selectDoc: PropTypes.func.isRequired,
-  onFilterChange: PropTypes.func.isRequired,
-  deleteDocs: PropTypes.func.isRequired,
-  activitySort: PropTypes.object.isRequired,
-  changeActivitySort: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/source.js b/app/addons/replication/components/source.js
deleted file mode 100644
index e4b6c33..0000000
--- a/app/addons/replication/components/source.js
+++ /dev/null
@@ -1,170 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-import ReactSelect from 'react-select';
-
-const { StyledSelect } = Components;
-
-const RemoteSourceInput = ({onChange, value}) =>
-  <div className="replication__section">
-    <div className="replication__input-label">Database URL:</div>
-    <div className="">
-      <input
-        type="text"
-        className="replication__remote-connection-url"
-        placeholder="https://"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  </div>;
-
-RemoteSourceInput.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const LocalSourceInput = ({value, onChange, databases}) => {
-  const options = databases.map(db => ({value: db, label: db}));
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Name:
-      </div>
-      <div className="replication__input-react-select">
-        <ReactSelect
-          name="source-name"
-          value={value}
-          placeholder="Database name"
-          options={options}
-          clearable={false}
-          onChange={({value}) => onChange(value)} />
-      </div>
-    </div>
-  );
-};
-
-LocalSourceInput.propTypes = {
-  value: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationSourceRow = ({replicationSource, databases, localSource, remoteSource, onChangeRemote, onChangeLocal}) => {
-  if (replicationSource === Constants.REPLICATION_SOURCE.LOCAL) {
-    return <LocalSourceInput
-      value={localSource}
-      databases={databases}
-      onChange={onChangeLocal}
-    />;
-  }
-
-  return <RemoteSourceInput value={remoteSource} onChange={onChangeRemote} />;
-};
-
-ReplicationSourceRow.propTypes = {
-  replicationSource: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  localSource: PropTypes.string.isRequired,
-  remoteSource: PropTypes.string.isRequired,
-  onChangeRemote: PropTypes.func.isRequired,
-  onChangeLocal: PropTypes.func.isRequired
-};
-
-const replicationSourceSelectOptions = () => {
-  return [
-    { value: '', label: 'Select source type' },
-    { value: Constants.REPLICATION_SOURCE.LOCAL, label: 'Local database' },
-    { value: Constants.REPLICATION_SOURCE.REMOTE, label: 'Remote database' }
-  ].map((option) => {
-    return (
-      <option value={option.value} key={option.value}>{option.label}</option>
-    );
-  });
-};
-
-export const ReplicationSourceSelect = ({onChange, value}) => {
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Type:
-      </div>
-      <div className="replication__input-select">
-        <StyledSelect
-          selectContent={replicationSourceSelectOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-source"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationSourceSelect.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-export class ReplicationSource extends React.Component {
-
-  getReplicationSourceRow () {
-    const {
-      replicationSource,
-      localSource,
-      onLocalSourceChange,
-      onRemoteSourceChange,
-      remoteSource,
-      databases
-    } = this.props;
-
-    if (!replicationSource) {
-      return null;
-    }
-
-    return <ReplicationSourceRow
-      replicationSource={replicationSource}
-      databases={databases}
-      localSource={localSource}
-      remoteSource={remoteSource}
-      onChangeLocal={onLocalSourceChange}
-      onChangeRemote={onRemoteSourceChange}
-    />;
-  }
-
-  render () {
-    const {replicationSource, onSourceSelect} = this.props;
-    return (
-      <div>
-        <h3>Source</h3>
-        <ReplicationSourceSelect
-          onChange={onSourceSelect}
-          value={replicationSource}
-        />
-        {this.getReplicationSourceRow()}
-      </div>
-    );
-  }
-}
-
-ReplicationSource.propTypes = {
-  replicationSource: PropTypes.string.isRequired,
-  localSource: PropTypes.string.isRequired,
-  remoteSource: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onLocalSourceChange: PropTypes.func.isRequired,
-  onRemoteSourceChange: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/submit.js b/app/addons/replication/components/submit.js
deleted file mode 100644
index 7d94ae7..0000000
--- a/app/addons/replication/components/submit.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-
-import React from 'react';
-import Components from '../../components/react-components';
-
-const {ConfirmButton} = Components;
-
-export const ReplicationSubmit = ({onClear, disabled, onClick}) =>
-  <div className="replication__button-row">
-    <ConfirmButton
-      customIcon="fonticon-replicate"
-      id="replicate"
-      text="Start Replication"
-      onClick={onClick}
-      disabled={disabled}
-    />
-    <a
-      className="replication__clear-link"
-      href="#"
-      data-bypass="true"
-      onClick={(e) => {
-        e.preventDefault();
-        onClear();
-      }}>
-    Clear
-    </a>
-  </div>;
-
-
-ReplicationSubmit.propTypes = {
-  disabled: PropTypes.bool.isRequired,
-  onClick: PropTypes.func.isRequired,
-  onClear: PropTypes.func.isRequired
-};
diff --git a/app/addons/replication/components/target.js b/app/addons/replication/components/target.js
deleted file mode 100644
index 3bf3b5d..0000000
--- a/app/addons/replication/components/target.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// Licensed 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.
-
-import classnames from 'classnames';
-import PropTypes from 'prop-types';
-import React from 'react';
-import { OverlayTrigger, Tooltip } from 'react-bootstrap';
-import Constants from '../constants';
-import Components from '../../components/react-components';
-import ReactSelect from 'react-select';
-
-const { StyledSelect } = Components;
-
-const replicationTargetSourceOptions = () => {
-  return [
-    { value: '', label: 'Select target type' },
-    { value: Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE, label: 'Existing local database' },
-    { value: Constants.REPLICATION_TARGET.EXISTING_REMOTE_DATABASE, label: 'Existing remote database' },
-    { value: Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE, label: 'New local database' },
-    { value: Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE, label: 'New remote database' }
-  ].map((option) => {
-    return (
-      <option value={option.value} key={option.value}>{option.label}</option>
-    );
-  });
-};
-
-const ReplicationTargetSelect = ({ value, onChange }) => {
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">
-        Type:
-      </div>
-      <div id="replication-target" className="replication__input-select">
-        <StyledSelect
-          selectContent={replicationTargetSourceOptions()}
-          selectChange={(e) => onChange(e.target.value)}
-          selectId="replication-target"
-          selectValue={value} />
-      </div>
-    </div>
-  );
-};
-
-ReplicationTargetSelect.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const RemoteTargetReplicationRow = ({ onChange, value }) => {
-  return (
-    <div>
-      <input
-        type="text"
-        className="replication__remote-connection-url"
-        placeholder="https://"
-        value={value}
-        onChange={(e) => onChange(e.target.value)}
-      />
-    </div>
-  );
-};
-
-RemoteTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ExistingLocalTargetReplicationRow = ({ onChange, value, databases }) => {
-  const options = databases.map(db => ({ value: db, label: db }));
-  return (
-    <div id="replication-target-local" className="replication__input-react-select">
-      <ReactSelect
-        value={value}
-        options={options}
-        placeholder="Database name"
-        clearable={false}
-        onChange={({ value }) => onChange(value)}
-      />
-    </div>
-  );
-};
-
-ExistingLocalTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  databases: PropTypes.array.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const NewLocalTargetReplicationRow = ({ onChange, value }) =>
-  <input
-    type="text"
-    className="replication__new-input"
-    placeholder="Database name"
-    value={value}
-    onChange={(e) => onChange(e.target.value)}
-  />;
-
-NewLocalTargetReplicationRow.propTypes = {
-  value: PropTypes.string.isRequired,
-  onChange: PropTypes.func.isRequired
-};
-
-const ReplicationTargetRow = ({
-  replicationTarget,
-  onLocalTargetChange,
-  onRemoteTargetChange,
-  localTarget,
-  remoteTarget,
-  databases
-}) => {
-  if (!replicationTarget) {
-    return null;
-  }
-  let input;
-
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE) {
-    targetLabel = 'New database:';
-    input = <NewLocalTargetReplicationRow
-      value={localTarget}
-      onChange={onLocalTargetChange}
-    />;
-  } else if (replicationTarget === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE) {
-    input = <ExistingLocalTargetReplicationRow
-      onChange={onLocalTargetChange}
-      databases={databases}
-      value={localTarget}
-    />;
-  } else {
-    input = <RemoteTargetReplicationRow
-      onChange={onRemoteTargetChange}
-      value={remoteTarget}
-      newRemote={Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE === replicationTarget}
-    />;
-  }
-
-  let targetLabel = 'Name:';
-
-  if (replicationTarget === Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE ||
-    replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE) {
-    targetLabel = 'New database:';
-  }
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">{targetLabel}</div>
-      <div>
-        {input}
-      </div>
-    </div>
-  );
-};
-
-ReplicationTargetRow.propTypes = {
-  databases: PropTypes.array.isRequired,
-  onLocalTargetChange: PropTypes.func.isRequired,
-  onRemoteTargetChange: PropTypes.func.isRequired,
-  remoteTarget: PropTypes.string.isRequired,
-  localTarget: PropTypes.string.isRequired,
-  replicationTarget: PropTypes.string.isRequired
-};
-
-const NewTargetDatabaseOptionsRow = ({
-  replicationTarget,
-  targetDatabasePartitioned,
-  onTargetDatabasePartitionedChange,
-  allowNewPartitionedLocalDbs
-}) => {
-  if (!replicationTarget) {
-    return null;
-  }
-
-  if (replicationTarget !== Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE &&
-    replicationTarget !== Constants.REPLICATION_TARGET.NEW_REMOTE_DATABASE) {
-    return null;
-  }
-
-  const disablePartitionedOption = replicationTarget === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE &&
-    !allowNewPartitionedLocalDbs;
-  let msg = disablePartitionedOption ? "Local server does not support partitioned databases" :
-    "Creates a new partitioned database";
-  const tooltip = <Tooltip id="new-db-partitioned-tooltip">{msg}</Tooltip>;
-  const togglePartitioned = () => {
-    onTargetDatabasePartitionedChange(!targetDatabasePartitioned);
-  };
-
-  return (
-    <div className="replication__section">
-      <div className="replication__input-label">New database options:</div>
-      <div className={classnames('replication__input-checkbox', { 'replication__input-checkbox--disabled': disablePartitionedOption})}>
-
-        <input id="target-db-is-partitioned"
-          type="checkbox"
-          value="true"
-          checked={targetDatabasePartitioned}
-          onChange={togglePartitioned}
-          disabled={disablePartitionedOption}
-        />
-
-
-        <OverlayTrigger placement="right" overlay={tooltip}>
-          <label htmlFor="target-db-is-partitioned" >Partitioned</label>
-        </OverlayTrigger>
-      </div >
-    </div>
-  );
-};
-
-NewTargetDatabaseOptionsRow.propTypes = {
-  onTargetDatabasePartitionedChange: PropTypes.func.isRequired,
-  targetDatabasePartitioned: PropTypes.bool.isRequired,
-  replicationTarget: PropTypes.string.isRequired,
-  allowNewPartitionedLocalDbs: PropTypes.bool.isRequired
-};
-
-export class ReplicationTarget extends React.Component {
-
-  render() {
-    const {
-      replicationTarget,
-      onLocalTargetChange,
-      onTargetChange,
-      databases,
-      localTarget,
-      onRemoteTargetChange,
-      remoteTarget,
-      targetDatabasePartitioned,
-      onTargetDatabasePartitionedChange,
-      allowNewPartitionedLocalDbs
-    } = this.props;
-    return (
-      <div>
-        <h3>Target</h3>
-        <ReplicationTargetSelect
-          value={replicationTarget}
-          onChange={onTargetChange}
-        />
-        <ReplicationTargetRow
-          remoteTarget={remoteTarget}
-          replicationTarget={replicationTarget}
-          databases={databases}
-          localTarget={localTarget}
-          onRemoteTargetChange={onRemoteTargetChange}
-          onLocalTargetChange={onLocalTargetChange}
-        />
-        <NewTargetDatabaseOptionsRow
-          replicationTarget={replicationTarget}
-          onTargetDatabasePartitionedChange={onTargetDatabasePartitionedChange}
-          targetDatabasePartitioned={targetDatabasePartitioned}
-          allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-        />
-      </div>
-    );
-  }
-}
-
-ReplicationTarget.propTypes = {
-  databases: PropTypes.array.isRequired,
-  onTargetChange: PropTypes.func.isRequired,
-  onLocalTargetChange: PropTypes.func.isRequired,
-  onRemoteTargetChange: PropTypes.func.isRequired,
-  remoteTarget: PropTypes.string.isRequired,
-  localTarget: PropTypes.string.isRequired,
-  replicationTarget: PropTypes.string.isRequired
-};
diff --git a/app/addons/replication/constants.js b/app/addons/replication/constants.js
deleted file mode 100644
index 46567be..0000000
--- a/app/addons/replication/constants.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed 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.
-
-export default {
-  REPLICATION_SOURCE: {
-    LOCAL: 'REPLICATION_SOURCE_LOCAL',
-    REMOTE: 'REPLICATION_SOURCE_REMOTE'
-  },
-
-  REPLICATION_TARGET: {
-    EXISTING_LOCAL_DATABASE: 'REPLICATION_TARGET_EXISTING_LOCAL_DATABASE',
-    EXISTING_REMOTE_DATABASE: 'REPLICATION_TARGET_EXISTING_REMOTE_DATABASE',
-    NEW_LOCAL_DATABASE: 'REPLICATION_TARGET_NEW_LOCAL_DATABASE',
-    NEW_REMOTE_DATABASE: 'REPLICATION_TARGET_NEW_REMOTE_DATABASE'
-  },
-
-  REPLICATION_TYPE: {
-    ONE_TIME: 'REPLICATION_TYPE_ONE_TIME',
-    CONTINUOUS: 'REPLICATION_TYPE_CONTINUOUS'
-  },
-
-  REPLICATION_AUTH_METHOD: {
-    NO_AUTH: 'NO_AUTH',
-    BASIC: 'BASIC_AUTH'
-  }
-};
diff --git a/app/addons/replication/container.js b/app/addons/replication/container.js
deleted file mode 100644
index 5be9079..0000000
--- a/app/addons/replication/container.js
+++ /dev/null
@@ -1,137 +0,0 @@
-import { connect } from 'react-redux';
-import ReplicationController from './controller';
-
-import {
-  checkForNewApi,
-  updateFormField,
-  clearReplicationForm,
-  initReplicator,
-  getReplicationStateFrom,
-  getReplicateActivity,
-  getReplicationActivity,
-  getDatabasesList,
-  showConflictModal,
-  hideConflictModal,
-  replicate,
-  filterReplicate,
-  filterDocs,
-  selectDoc,
-  deleteDocs,
-  selectAllDocs,
-  changeActivitySort,
-  deleteReplicates,
-  selectAllReplicates,
-  selectReplicate
-} from './actions';
-
-import {
-  isLoading,
-  isActivityLoading,
-  getDatabases,
-  getReplicationSource,
-  getLocalSource,
-  isLocalSourceKnown,
-  getRemoteSource,
-  getReplicationTarget,
-  getLocalTarget,
-  isLocalTargetKnown,
-  getRemoteTarget,
-  isConflictModalVisible,
-  getReplicationType,
-  getReplicationDocName,
-  getSubmittedNoChange,
-  getFilteredReplicationStatus,
-  getStatusFilter,
-  getReplicateFilter,
-  getAllDocsSelected,
-  getSomeDocsSelected,
-  getUsername,
-  getPassword,
-  getActivitySort,
-  getCheckingApi,
-  supportNewApi,
-  isReplicateInfoLoading,
-  getAllReplicateSelected,
-  getReplicateInfo,
-  someReplicateSelected
-} from './reducers';
-
-const mapStateToProps = ({replication, databases}, ownProps) => {
-  return {
-    allowNewPartitionedLocalDbs: databases.partitionedDatabasesAvailable,
-
-    routeLocalSource: ownProps.routeLocalSource,
-    replicationId: ownProps.replicationId,
-    tabSection: ownProps.section,
-    loading: isLoading(replication),
-    activityLoading: isActivityLoading(replication),
-    databases: getDatabases(replication),
-
-    // source fields
-    replicationSource: getReplicationSource(replication),
-    localSource: getLocalSource(replication),
-    localSourceKnown: isLocalSourceKnown(replication),
-    remoteSource: getRemoteSource(replication),
-    sourceAuthType: replication.sourceAuthType,
-    sourceAuth: replication.sourceAuth,
-
-    // target fields
-    replicationTarget: getReplicationTarget(replication),
-    localTarget: getLocalTarget(replication),
-    localTargetKnown: isLocalTargetKnown(replication),
-    remoteTarget: getRemoteTarget(replication),
-    targetAuthType: replication.targetAuthType,
-    targetAuth: replication.targetAuth,
-    targetDatabasePartitioned: replication.targetDatabasePartitioned,
-
-    // other
-    isConflictModalVisible: isConflictModalVisible(replication),
-    replicationType: getReplicationType(replication),
-    replicationDocName: getReplicationDocName(replication),
-    submittedNoChange: getSubmittedNoChange(replication),
-    statusDocs: getFilteredReplicationStatus(replication),
-    statusFilter: getStatusFilter(replication),
-    replicateFilter: getReplicateFilter(replication),
-    allDocsSelected: getAllDocsSelected(replication),
-    someDocsSelected:  getSomeDocsSelected(replication),
-    username: getUsername(replication),
-    password: getPassword(replication),
-    activitySort: getActivitySort(replication),
-    checkingApi: getCheckingApi(replication),
-    supportNewApi: supportNewApi(replication),
-    replicateLoading: isReplicateInfoLoading(replication),
-    replicateInfo: getReplicateInfo(replication),
-    allReplicateSelected: getAllReplicateSelected(replication),
-    someReplicateSelected: someReplicateSelected(replication)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    checkForNewApi: () => dispatch(checkForNewApi()),
-    updateFormField: (fieldName) => (value) => {
-      dispatch(updateFormField(fieldName, value));
-    },
-    clearReplicationForm: () => dispatch(clearReplicationForm()),
-    initReplicator: (localSource) => dispatch(initReplicator(localSource)),
-    getReplicationActivity: () => dispatch(getReplicationActivity()),
-    getReplicateActivity: () => dispatch(getReplicateActivity()),
-    getReplicationStateFrom: (id) => dispatch(getReplicationStateFrom(id)),
-    getDatabasesList: () => dispatch(getDatabasesList()),
-    replicate: (params) => dispatch(replicate(params)),
-    showConflictModal: () => dispatch(showConflictModal()),
-    hideConflictModal: () => dispatch(hideConflictModal()),
-    filterReplicate: (filter) => dispatch(filterReplicate(filter)),
-    filterDocs: (filter) => dispatch(filterDocs(filter)),
-    selectDoc: (doc) => dispatch(selectDoc(doc)),
-    deleteDocs: (docs) => dispatch(deleteDocs(docs)),
-    selectAllDocs: () => dispatch(selectAllDocs()),
-    changeActivitySort: (sort) => dispatch(changeActivitySort(sort)),
-    selectAllReplicates: () => dispatch(selectAllReplicates()),
-    deleteReplicates: (replicates) => dispatch(deleteReplicates(replicates)),
-    selectReplicate: (replicate) => dispatch(selectReplicate(replicate))
-  };
-};
-
-
-export default connect(mapStateToProps, mapDispatchToProps)(ReplicationController);
diff --git a/app/addons/replication/controller.js b/app/addons/replication/controller.js
deleted file mode 100644
index 0c7cc00..0000000
--- a/app/addons/replication/controller.js
+++ /dev/null
@@ -1,246 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from '../../core/api';
-import React from 'react';
-import Helpers from '../../helpers';
-import Components from '../components/react-components';
-import NewReplication from './components/newreplication';
-import Activity from './components/activity';
-import {checkReplicationDocID} from './api';
-import {OnePane, OnePaneHeader, OnePaneContent} from '../components/layouts';
-import {TabElementWrapper, TabElement} from '../components/components/tabelement';
-import ReplicateActivity from './components/replicate-activity';
-
-const {LoadLines, Polling, RefreshBtn} = Components;
-
-export default class ReplicationController extends React.Component {
-
-  loadReplicationInfo (props, oldProps) {
-    this.props.initReplicator(props.routeLocalSource, props.localSource);
-    this.getAllActivity();
-    this.loadReplicationStateFrom(props, oldProps);
-  }
-
-  loadReplicationStateFrom (props, oldProps) {
-    if (props.replicationId && props.replicationId !== oldProps.replicationId) {
-      this.props.clearReplicationForm();
-      this.props.getReplicationStateFrom(props.replicationId);
-    }
-  }
-
-  getAllActivity () {
-    this.props.getReplicationActivity();
-    this.props.getReplicateActivity();
-  }
-
-  componentDidMount () {
-    this.props.checkForNewApi();
-    this.props.getDatabasesList();
-    this.loadReplicationInfo(this.props, {});
-  }
-
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    this.loadReplicationStateFrom(nextProps, this.props);
-    if (this.props.tabSection !== 'new replication' && nextProps.tabSection === 'new replication') {
-      this.props.clearReplicationForm();
-    }
-  }
-
-  componentWillUnmount () {
-    this.props.clearReplicationForm();
-  }
-
-  showSection () {
-    const {
-      replicationSource, replicationTarget, replicationType, replicationDocName,
-      databases, localSource, remoteSource, remoteTarget,
-      localTarget, statusDocs, statusFilter, loading, allDocsSelected,
-      someDocsSelected, showConflictModal, localSourceKnown, localTargetKnown, updateFormField,
-      authenticated, activityLoading, submittedNoChange, activitySort, tabSection,
-      replicateInfo, replicateLoading, replicateFilter, allReplicateSelected, someReplicateSelected,
-      hideConflictModal, isConflictModalVisible, filterDocs,
-      filterReplicate, replicate, clearReplicationForm, selectAllDocs, changeActivitySort, selectDoc,
-      deleteDocs, deleteReplicates, selectAllReplicates, selectReplicate,
-      sourceAuthType, sourceAuth, targetAuthType, targetAuth, targetDatabasePartitioned, allowNewPartitionedLocalDbs
-    } = this.props;
-
-    if (tabSection === 'new replication') {
-      if (loading) {
-        return <LoadLines/>;
-      }
-
-      return <NewReplication
-        docs={statusDocs}
-        localTargetKnown={localTargetKnown}
-        localSourceKnown={localSourceKnown}
-        clearReplicationForm={clearReplicationForm}
-        replicate={replicate}
-        replicationSource={replicationSource}
-        replicationTarget={replicationTarget}
-        replicationType={replicationType}
-        replicationDocName={replicationDocName}
-        databases={databases}
-        localSource={localSource}
-        remoteSource={remoteSource}
-        remoteTarget={remoteTarget}
-        localTarget={localTarget}
-        sourceAuthType={sourceAuthType}
-        sourceAuth={sourceAuth}
-        targetAuthType={targetAuthType}
-        targetAuth={targetAuth}
-        targetDatabasePartitioned={targetDatabasePartitioned}
-        allowNewPartitionedLocalDbs={allowNewPartitionedLocalDbs}
-        updateFormField={updateFormField}
-        conflictModalVisible={isConflictModalVisible}
-        hideConflictModal={hideConflictModal}
-        showConflictModal={showConflictModal}
-        checkReplicationDocID={checkReplicationDocID}
-        authenticated={authenticated}
-        submittedNoChange={submittedNoChange}
-      />;
-    }
-
-    if (tabSection === '_replicate') {
-      if (replicateLoading) {
-        return <LoadLines />;
-      }
-
-      return <ReplicateActivity
-        docs={replicateInfo}
-        filter={replicateFilter}
-        onFilterChange={filterReplicate}
-        selectDoc={selectReplicate}
-        selectAllDocs={selectAllReplicates}
-        allDocsSelected={allReplicateSelected}
-        someDocsSelected={someReplicateSelected}
-        activitySort={activitySort}
-        changeActivitySort={changeActivitySort}
-        deleteDocs={deleteReplicates}
-      />;
-    }
-
-    if (activityLoading) {
-      return <LoadLines/>;
-    }
-
-    return <Activity
-      docs={statusDocs}
-      filter={statusFilter}
-      onFilterChange={filterDocs}
-      selectAllDocs={selectAllDocs}
-      selectDoc={selectDoc}
-      allDocsSelected={allDocsSelected}
-      someDocsSelected={someDocsSelected}
-      deleteDocs={deleteDocs}
-      activitySort={activitySort}
-      changeActivitySort={changeActivitySort}
-    />;
-  }
-
-  getHeaderComponents () {
-    if (this.props.tabSection === 'new replication') {
-      return null;
-    }
-    let rightHeaderclass = "right-header-flex";
-    if (Helpers.isIE1X()) {
-      rightHeaderclass += " " + rightHeaderclass + "--ie1X";
-    }
-
-    return (
-      <div className={rightHeaderclass}>
-        <Polling
-          min={60}
-          max={600}
-          startValue={300}
-          stepSize={60}
-          onPoll={this.getAllActivity.bind(this)}
-        />
-        <RefreshBtn
-          refresh={this.getAllActivity.bind(this)}
-        />
-      </div>
-    );
-  }
-
-  getTabElements () {
-    const {tabSection} = this.props;
-    const elements = [
-      <TabElement
-        key={1}
-        selected={tabSection === 'activity'}
-        text={"Replicator DB Activity"}
-        onChange={this.onTabChange.bind(this, 'activity', '#/replication')}
-      />
-    ];
-
-    if (this.props.supportNewApi) {
-      elements.push(
-        <TabElement
-          key={2}
-          selected={tabSection === '_replicate'}
-          text={"_replicate Activity"}
-          onChange={this.onTabChange.bind(this, '_replicate', '#/replication/_replicate')}
-        />
-      );
-    }
-
-    return elements;
-  }
-
-  onTabChange (section, url) {
-    // this.props.changeTabSection(section, url);
-    FauxtonAPI.navigate(url);
-  }
-
-  getCrumbs () {
-    if (this.props.tabSection === 'new replication') {
-      return [{'name': 'Job Configuration'}];
-    }
-    return [{'name': 'Replication'}];
-  }
-
-  getTabs () {
-    if (this.props.tabSection === 'new replication') {
-      return null;
-    }
-
-    return (
-      <TabElementWrapper>
-        {this.getTabElements()}
-      </TabElementWrapper>
-    );
-  }
-
-  render () {
-    const { checkingAPI } = this.props;
-
-    if (checkingAPI) {
-      return <LoadLines />;
-    }
-
-    return (
-      <OnePane>
-        <OnePaneHeader crumbs={this.getCrumbs()}>
-          {this.getHeaderComponents()}
-        </OnePaneHeader>
-        <OnePaneContent>
-          <div className="template-content flex-body flex-layout flex-col">
-            {this.getTabs()}
-            <div className="replication__page flex-layout flex-col">
-              {this.showSection()}
-            </div>
-          </div>
-        </OnePaneContent>
-      </OnePane>
-    );
-  }
-}
diff --git a/app/addons/replication/helpers.js b/app/addons/replication/helpers.js
deleted file mode 100644
index 4951bbc..0000000
--- a/app/addons/replication/helpers.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-import _ from 'lodash';
-
-const getDatabaseLabel = db => {
-  const dbString = (_.isString(db)) ? db.trim().replace(/\/$/, '') : db.url;
-  const pathName = (new URL(dbString)).pathname.slice(1);
-  return pathName.split("/").pop();
-};
-
-export default {
-  getDatabaseLabel,
-};
diff --git a/app/addons/replication/reducers.js b/app/addons/replication/reducers.js
deleted file mode 100644
index 40a276a..0000000
--- a/app/addons/replication/reducers.js
+++ /dev/null
@@ -1,409 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-import app from "../../app";
-
-const setActivitySort = (sort) => {
-  app.utils.localStorageSet('replication-activity-sort', sort);
-};
-
-const loadActivitySort = () => {
-  const defaultSort = {
-    descending: false,
-    column: 'statusTime'
-
-  };
-  let sort = app.utils.localStorageGet('replication-activity-sort');
-
-  if (!sort) {
-    sort = defaultSort;
-  }
-
-  setActivitySort(sort);
-  return sort;
-};
-
-const validFieldMap = {
-  remoteSource: 'remoteSource',
-  remoteTarget: 'remoteTarget',
-  localTarget: 'localTarget',
-  replicationType: 'replicationType',
-  replicationDocName: 'replicationDocName',
-  replicationSource: 'replicationSource',
-  replicationTarget: 'replicationTarget',
-  localSource: 'localSource',
-  sourceAuthType: 'sourceAuthType',
-  sourceAuth: 'sourceAuth',
-  targetAuthType: 'targetAuthType',
-  targetAuth: 'targetAuth',
-  targetDatabasePartitioned: 'targetDatabasePartitioned'
-};
-
-const initialState = {
-  loading: false,
-  databases: [],
-
-  // source fields
-  replicationSource: '',
-  localSource: '',
-  remoteSource: '',
-  sourceAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  sourceAuth: {},
-
-  // target fields
-  replicationTarget: '',
-  localTarget: '',
-  remoteTarget: '',
-  targetAuthType: Constants.REPLICATION_AUTH_METHOD.NO_AUTH,
-  targetAuth: {},
-  targetDatabasePartitioned: false,
-
-  // other
-  isConflictModalVisible: false,
-  replicationType: Constants.REPLICATION_TYPE.ONE_TIME,
-  replicationDocName: '',
-  submittedNoChange: false,
-  statusDocs: [],
-  statusFilteredStatusDocs: [],
-  statusFilter: '',
-  replicateFilter: '',
-  allDocsSelected: false,
-  allReplicateSelected: false,
-  username: '',
-  password: '',
-  activityLoading: false,
-  tabSection: 'new replication',
-  supportNewApi: false,
-  fetchingReplicateInfo: false,
-  replicateInfo: [],
-
-  checkingAPI: true,
-  activitySort: loadActivitySort()
-};
-
-const clearForm = (state) => {
-  const newState = {
-    ...state
-  };
-  Object.values(validFieldMap).forEach(field => {
-    if (field === 'sourceAuth' || field === 'targetAuth') {
-      newState[field] = {};
-    } else if (field === 'targetDatabasePartitioned') {
-      newState[field] = false;
-    } else {
-      newState[field] = '';
-    }
-  });
-  newState.sourceAuthType = Constants.REPLICATION_AUTH_METHOD.NO_AUTH;
-  newState.targetAuthType = Constants.REPLICATION_AUTH_METHOD.NO_AUTH;
-  return newState;
-};
-
-const updateFormField = (state, fieldName, value) => {
-  const updateState = {
-    ...state,
-    submittedNoChange: false,
-  };
-  updateState[validFieldMap[fieldName]] = value;
-
-  // Set default username when state is set to local target/source AND auth is user/pwd
-  if (fieldName === validFieldMap.sourceAuthType || fieldName === validFieldMap.replicationSource) {
-    const isUserPwdAuth = updateState[validFieldMap.sourceAuthType] === Constants.REPLICATION_AUTH_METHOD.BASIC;
-    const isLocalDB = updateState[validFieldMap.replicationSource] === Constants.REPLICATION_SOURCE.LOCAL;
-    const usernameNotSet = !updateState[validFieldMap.sourceAuth] || !updateState[validFieldMap.sourceAuth].username;
-    if (isUserPwdAuth && isLocalDB && usernameNotSet) {
-      updateState[validFieldMap.sourceAuth] = {
-        username: FauxtonAPI.session.user().name,
-        password: ''
-      };
-    }
-  } else if (fieldName === validFieldMap.targetAuthType || fieldName === validFieldMap.replicationTarget) {
-    const isUserPwdAuth = updateState[validFieldMap.targetAuthType] === Constants.REPLICATION_AUTH_METHOD.BASIC;
-    const isLocalDB = updateState[validFieldMap.replicationTarget] === Constants.REPLICATION_TARGET.EXISTING_LOCAL_DATABASE ||
-      updateState[validFieldMap.replicationTarget] === Constants.REPLICATION_TARGET.NEW_LOCAL_DATABASE;
-    const usernameNotSet = !updateState[validFieldMap.targetAuth] || !updateState[validFieldMap.targetAuth].username;
-    if (isUserPwdAuth && isLocalDB && usernameNotSet) {
-      updateState[validFieldMap.targetAuth] = {
-        username: FauxtonAPI.session.user().name,
-        password: ''
-      };
-    }
-  }
-
-  return updateState;
-};
-
-const toggleDoc = (state, id) => {
-  const doc = state.statusDocs.find(doc => doc._id === id);
-  if (!doc) {
-    return state;
-  }
-
-  doc.selected = !doc.selected;
-
-  return {
-    ...state,
-    allDocsSelected: false
-  };
-};
-
-const selectAllDocs = (state) => {
-  const newState = {
-    ...state,
-    allDocsSelected: !state.allDocsSelected
-  };
-
-  getFilteredReplicationStatus(newState)
-    .forEach(doc => doc.selected = newState.allDocsSelected);
-
-  return newState;
-};
-
-const selectReplicate = (state, id) => {
-  const newState = {
-    ...state
-  };
-
-  const doc = newState._replicateInfo.find(doc => doc._id === id);
-
-  if (!doc) {
-    return newState;
-  }
-
-  doc.selected = !doc.selected;
-  newState._allReplicateSelected = false;
-};
-
-const selectAllReplicate = (state) => {
-  const newState = {
-    ...state,
-    allReplicateSelected: !state.allReplicateSelected
-  };
-
-  getReplicateInfo(newState).forEach(doc => doc.selected = newState.allReplicateSelected);
-  return newState;
-};
-
-const setStateFromDoc = (state, doc) => {
-  let newState = {
-    ...state,
-    loading: false
-  };
-
-  return Object.keys(doc).reduce((state, key) => {
-    return updateFormField(state, key, doc[key]);
-  }, newState);
-};
-
-
-const replication = (state = initialState, {type, options}) => {
-  switch (type) {
-
-    case ActionTypes.INIT_REPLICATION:
-      const newState = {
-        ...state,
-        loading: true
-      };
-
-      if (options.localSource) {
-        newState.localSource = options.localSource;
-        newState.replicationSource = Constants.REPLICATION_SOURCE.LOCAL;
-        newState.remoteSource = '';
-        newState.replicationTarget = '';
-        newState.localTarget = '';
-        newState.remoteTarget = '';
-      }
-      return newState;
-
-    case ActionTypes.REPLICATION_DATABASES_LOADED:
-      return {
-        ...state,
-        loading: false,
-        databases: options.databases
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_FORM_STATE:
-      return {
-        ...state,
-        loading: true
-      };
-
-    case ActionTypes.REPLICATION_UPDATE_FORM_FIELD:
-      return updateFormField(state, options.fieldName, options.value);
-
-    case ActionTypes.REPLICATION_CLEAR_FORM:
-      return clearForm(state);
-
-    case ActionTypes.REPLICATION_STARTING:
-      return {
-        ...state,
-        submittedNoChange: true
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_STATUS:
-      return {
-        ...state,
-        activityLoading: true
-      };
-
-    case ActionTypes.REPLICATION_STATUS:
-      return {
-        ...state,
-        activityLoading: false,
-        statusDocs: options
-      };
-
-    case ActionTypes.REPLICATION_FILTER_DOCS:
-      return {
-        ...state,
-        statusFilter: options
-      };
-
-    case ActionTypes.REPLICATION_FILTER_REPLICATE:
-      return {
-        ...state,
-        replicateFilter: options
-      };
-
-    case ActionTypes.REPLICATION_TOGGLE_DOC:
-      return toggleDoc(state, options);
-
-    case ActionTypes.REPLICATION_TOGGLE_ALL_DOCS:
-      return selectAllDocs(state);
-
-    case ActionTypes.REPLICATION_TOGGLE_REPLICATE:
-      return selectReplicate(state, options);
-
-    case ActionTypes.REPLICATION_TOGGLE_ALL_REPLICATE:
-      return selectAllReplicate(state);
-
-    case ActionTypes.REPLICATION_SET_STATE_FROM_DOC:
-      return setStateFromDoc(state, options);
-
-    case ActionTypes.REPLICATION_SHOW_CONFLICT_MODAL:
-      return {
-        ...state,
-        isConflictModalVisible: true
-      };
-
-    case ActionTypes.REPLICATION_HIDE_CONFLICT_MODAL:
-      return {
-        ...state,
-        isConflictModalVisible: false
-      };
-
-    case ActionTypes.REPLICATION_CHANGE_ACTIVITY_SORT:
-      setActivitySort(options);
-      return {
-        ...state,
-        activitySort: loadActivitySort()
-      };
-
-    case ActionTypes.REPLICATION_CLEAR_SELECTED_DOCS:
-      return {
-        ...state,
-        allDocsSelected: false
-      };
-
-    case ActionTypes.REPLICATION_CHANGE_TAB_SECTION:
-      return {
-        ...state,
-        tabSection: options
-      };
-
-    case ActionTypes.REPLICATION_SUPPORT_NEW_API:
-      return {
-        ...state,
-        checkingApi: false,
-        supportNewApi: options
-      };
-
-    case ActionTypes.REPLICATION_FETCHING_REPLICATE_STATUS:
-      return {
-        ...state,
-        fetchingReplicateInfo: true,
-      };
-
-    case ActionTypes.REPLICATION_REPLICATE_STATUS:
-      return {
-        ...state,
-        fetchingReplicateInfo: false,
-        replicateInfo: options
-      };
-
-    case ActionTypes.REPLICATION_CLEAR_SELECTED_REPLICATES:
-      return {
-        ...state,
-        allReplicateSelected: false
-      };
-
-    default:
-      return state;
-  }
-};
-
-
-export const isLoading = (state) => state.isLoading;
-export const isActivityLoading = (state) => state.activityLoading;
-export const getDatabases = (state) => state.databases;
-
-export const getReplicationSource = (state) => state.replicationSource;
-export const getLocalSource = (state) => state.localSource;
-export const isLocalSourceKnown = (state) => _.includes(state.databases, state.localSource);
-export const getRemoteSource = (state) => state.remoteSource;
-
-
-export const getReplicationTarget = (state) => state.replicationTarget;
-export const getLocalTarget = (state) => state.localTarget;
-export const isLocalTargetKnown = (state) => _.includes(state.databases, state.localTarget);
-export const getRemoteTarget = (state) => state.remoteTarget;
-
-export const isConflictModalVisible = (state) => state.isConflictModalVisible;
-export const getReplicationType = (state) => state.replicationType;
-export const getReplicationDocName = (state) => state.replicationDocName;
-export const getSubmittedNoChange = (state) => state.submittedNoChange;
-
-export const getFilteredReplicationStatus = (state) => {
-  return state.statusDocs.filter(doc => {
-    return Object.values(doc).filter(item => {
-      if (!item) {return null;}
-      return item.toString().toLowerCase().match(state.statusFilter);
-    }).length > 0;
-  });
-};
-
-export const getStatusFilter = (state) => state.statusFilter;
-export const getReplicateFilter = (state) => state.replicateFilter;
-export const getAllDocsSelected = (state) => state.allDocsSelected;
-export const getSomeDocsSelected = (state) => getFilteredReplicationStatus(state).some(doc => doc.selected);
-export const getUsername = (state) => state.username;
-export const getPassword = (state) => state.password;
-export const getActivitySort = (state) => state.activitySort;
-export const getTabSection = (state) => state.tabSection;
-export const getCheckingApi = (state) => state.checkingAPI;
-export const supportNewApi = (state) => state.supportNewApi;
-export const isReplicateInfoLoading = (state) => state.fetchingReplicateInfo;
-export const getAllReplicateSelected = (state) => state.allReplicateSelected;
-export const someReplicateSelected = (state) => getReplicateInfo(state).some(doc => doc.selected);
-
-export const getReplicateInfo = (state) => {
-  return state.replicateInfo.filter(doc => {
-    return Object.values(doc).filter(item => {
-      if (!item) {return false;}
-      return item.toString().toLowerCase().match(state._replicateFilter);
-    }).length > 0;
-  });
-};
-
-export default replication;
diff --git a/app/addons/replication/route.js b/app/addons/replication/route.js
deleted file mode 100644
index efcd01b..0000000
--- a/app/addons/replication/route.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from '../../core/api';
-import ReplicationController from './container';
-
-const ReplicationRouteObject = FauxtonAPI.RouteObject.extend({
-  routes: {
-    'replication/_create': 'createView',
-    'replication/_create/:dbname': 'createView',
-    'replication/id/:id': 'createViewFromId',
-    'replication': 'activityView',
-    'replication/_replicate': 'replicateView'
-  },
-  selectedHeader: 'Replication',
-
-  roles: ['fx_loggedIn'],
-
-  setActivityCrumbs () {
-    this.crumbs = [
-      {name: 'Replication'}
-    ];
-  },
-
-  setCreateReplicationCrumbs () {
-    this.crumbs = [
-      {name: 'Replication', link: 'replication'},
-      {name: 'New Replication'}
-    ];
-  },
-
-  createView: function (databaseName) {
-    const localSource = databaseName || '';
-
-    return <ReplicationController
-      routeLocalSource={localSource}
-      section={'new replication'}
-    />;
-  },
-
-  createViewFromId: function (replicationId) {
-    return <ReplicationController
-      replicationId={replicationId}
-      section={'new replication'}
-    />;
-  },
-
-  activityView: function () {
-    return <ReplicationController
-      section={"activity"}
-    />;
-  },
-
-  replicateView: function () {
-    return <ReplicationController
-      section={"_replicate"}
-    />;
-  }
-});
-
-export default {
-  RouteObjects: [ReplicationRouteObject]
-};
diff --git a/app/addons/replication/tests/nightwatch/replication.js b/app/addons/replication/tests/nightwatch/replication.js
deleted file mode 100644
index d05673e..0000000
--- a/app/addons/replication/tests/nightwatch/replication.js
+++ /dev/null
@@ -1,286 +0,0 @@
-// Licensed 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.
-
-
-
-const helpers = require('../../../../../test/nightwatch_tests/helpers/helpers.js');
-const newDatabaseName1 = 'fauxton-selenium-tests-replication1';
-const newDatabaseName2 = 'fauxton-selenium-tests-replication2';
-const replicatedDBName = 'replicated-db';
-const docName1 = 'doc-name1';
-const docName2 = 'doc-name2';
-
-const destroyDBsAndCreateReplicator = (client, done) => {
-  var nano = helpers.getNanoInstance(client.options.db_url);
-  nano.db.destroy(newDatabaseName1, () => {
-    nano.db.destroy(newDatabaseName2, () => {
-      nano.db.destroy(replicatedDBName, () => {
-        nano.db.create('_replicator', function () {
-          done();
-        });
-      });
-    });
-  });
-};
-
-module.exports = {
-  before: destroyDBsAndCreateReplicator,
-
-  'Replicates existing local db to new local db' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_LOCAL_DATABASE"]')
-      .setValue('.replication__new-input', replicatedDBName)
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Replicates existing local db to existing local db' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    client
-
-      // create two databases, each with a single (different) doc
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .createDatabase(newDatabaseName2)
-      .checkForDatabaseCreated(newDatabaseName2, waitTime)
-      .createDocument(docName2, newDatabaseName2)
-
-      // now login and fill in the replication form
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select the LOCAL db as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // select existing local as the target
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('#replication-target option[value="REPLICATION_TARGET_EXISTING_LOCAL_DATABASE"]')
-      .setValue('#replication-target-local .Select-input input', [newDatabaseName2, client.Keys.ENTER])
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .getAttribute('#replicate', 'disabled', function (result) {
-        // confirm it's not disabled
-        this.assert.equal(result.value, null);
-      })
-      .clickWhenVisible('#replicate')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Replicates using existing doc id' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const password = client.options.password;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    client
-      // create two databases, each with a single (different) doc
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .createDatabase(newDatabaseName2)
-      .checkForDatabaseCreated(newDatabaseName2, waitTime)
-      .createDocument(docName2, newDatabaseName2)
-      .deleteDocument(replicatorDoc._id, '_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-
-      // now login and fill in the replication form
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select the LOCAL db as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', [password, client.Keys.ENTER])
-
-      // select existing local as the target
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('#replication-target option[value="REPLICATION_TARGET_EXISTING_LOCAL_DATABASE"]')
-      .setValue('#replication-target-local .Select-input input', [newDatabaseName2, client.Keys.ENTER])
-      .setValue('.replication__doc-name-input', [replicatorDoc._id, client.Keys.ENTER])
-
-      // select target USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-target-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-target-auth-username', waitTime, true)
-
-      // enter target username/password
-      .setValue('#replication-target-auth-password', [password, client.Keys.ENTER])
-
-      .getAttribute('#replicate', 'disabled', function (result) {
-        // confirm it's not disabled
-        this.assert.equal(result.value, null);
-      })
-      .clickWhenVisible('#replicate')
-
-      // confirm overwrite of existing doc
-      .waitForElementVisible('.replication__error-doc-modal .replication__error-continue', waitTime, true)
-      .clickWhenVisible('.replication__error-doc-modal .replication__error-continue')
-
-      .waitForElementNotPresent('.Toastify__toast-container .Toastify__toast-body', waitTime, true)
-      .end();
-  },
-
-  'Show error for missing credentials' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_LOCAL_DATABASE"]')
-      .setValue('.replication__new-input', replicatedDBName)
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementPresent('.Toastify__toast-container .Toastify__toast--error', waitTime, true)
-      .end();
-  },
-
-  'Show error for invalid credentials' : function (client) {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName1)
-      .checkForDatabaseCreated(newDatabaseName1, waitTime)
-      .createDocument(docName1, newDatabaseName1)
-      .loginToGUI()
-      .url(baseUrl + '/#/replication/_create')
-      .waitForElementVisible('button#replicate', waitTime, true)
-      .waitForElementVisible('#replication-source', waitTime, true)
-
-      // select LOCAL as the source
-      .clickWhenVisible('#replication-source')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('.replication__input-react-select', waitTime, true)
-
-      // enter our source DB
-      .setValue('.replication__input-react-select .Select-input input', [newDatabaseName1, client.Keys.ENTER])
-
-      // select source USER/PASSWORD authentication
-      .clickWhenVisible('#select-replication-source-auth')
-      .keys(['\uE015', '\uE006'])
-      .waitForElementVisible('#replication-source-auth-username', waitTime, true)
-
-      // enter source username/password
-      .setValue('#replication-source-auth-password', ['wrong_pwd', client.Keys.ENTER])
-
-      // enter a new target name
-      .waitForElementVisible('#replication-target', waitTime, true)
-      .clickWhenVisible('option[value="REPLICATION_TARGET_NEW_REMOTE_DATABASE"]')
-      .setValue('.replication__remote-connection-url', 'http://fake.com/dummydb')
-
-      .clickWhenVisible('#replicate')
-
-      .waitForElementPresent('.Toastify__toast-container .Toastify__toast--error', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/replication/tests/nightwatch/replicationactivity.js b/app/addons/replication/tests/nightwatch/replicationactivity.js
deleted file mode 100644
index e32cfe8..0000000
--- a/app/addons/replication/tests/nightwatch/replicationactivity.js
+++ /dev/null
@@ -1,133 +0,0 @@
-// Licensed 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.
-
-
-module.exports = {
-
-  'Can view doc': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id-view-doc',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__filter', waitTime, true)
-      .clickWhenVisible('a[href="#/database/_replicator/existing-doc-id-view-doc"]')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('#editor-container', waitTime, true)
-      .end();
-  },
-
-  'Can edit doc': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc = {
-      _id: 'existing-doc-id-edit-doc',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc._id, '_replicator', replicatorDoc)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__filter', waitTime, true)
-      .clickWhenVisible('a[title="Edit replication"]')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementPresent('.replication__section', waitTime, true)
-      .pause(10000)
-      .assert.valueContains(".replication__doc-name-input", replicatorDoc._id)
-      .end();
-  },
-
-  'Can filter docs': client => {
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-
-    const replicatorDoc1 = {
-      _id: 'existing-doc-id-filter1',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    const replicatorDoc2 = {
-      _id: 'existing-doc-filter2',
-      source: "http://source-db2.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc1._id, '_replicator', replicatorDoc1)
-      .createDocument(replicatorDoc2._id, '_replicator', replicatorDoc2)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementVisible('.replication__filter-input', waitTime, true)
-      .setValue('.replication__filter-input', 'filter1')
-      .waitForElementNotPresent('a[href="#/database/_replicator/existing-doc-filter2"]', waitTime, true)
-      .clearValue('.replication__filter-input')
-      .setValue('.replication__filter-input', 'filter')
-      .waitForElementPresent('a[href="#/database/_replicator/existing-doc-filter2"]', waitTime, true)
-      .end();
-  },
-  "Action click doesn't change doc's order": client =>{
-    const waitTime = client.globals.maxWaitTime;
-    const baseUrl = client.options.launch_url;
-    const firstRowSelector = '.replication__table-row:nth-of-type(1)';
-    let firstDoc;
-
-    const replicatorDoc1 = {
-      _id: 'existing-doc-id-filter1',
-      source: "http://source-db.com",
-      target: "http://target-db.com"
-    };
-
-    const replicatorDoc2 = {
-      _id: 'existing-doc-filter2',
-      source: "http://source-db2.com",
-      target: "http://target-db.com"
-    };
-    client
-      .deleteDatabase('_replicator')
-      .createDatabase('_replicator')
-      .createDocument(replicatorDoc1._id, '_replicator', replicatorDoc1)
-      .createDocument(replicatorDoc2._id, '_replicator', replicatorDoc2)
-      .loginToGUI()
-      .url(baseUrl + '/#replication')
-      .waitForElementNotPresent('.load-lines', waitTime, true)
-      .waitForElementVisible(firstRowSelector, waitTime, true)
-      .getText(firstRowSelector + ' td:nth-of-type(2)', function(result) {
-        firstDoc = result.value;
-      })
-      .clickWhenVisible(firstRowSelector + ' .replication__row-btn.icon-trash', waitTime, true)
-      .clickWhenVisible('.replication_delete-doc-modal.modal-dialog .modal-footer .cancel-link', waitTime, true)
-      .waitForElementVisible(firstRowSelector, waitTime, true)
-      .getText(firstRowSelector + ' td:nth-of-type(2)', function(result) {
-        this.verify.ok(result.value === firstDoc,
-          'Checking if the order was reserved if no documents were sorted');
-      })
-      .end();
-  }
-};
diff --git a/app/addons/search/__tests__/components.test.js b/app/addons/search/__tests__/components.test.js
deleted file mode 100644
index 4d053d5..0000000
--- a/app/addons/search/__tests__/components.test.js
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed 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.
-import {mount} from 'enzyme';
-import React from 'react';
-import sinon from 'sinon';
-import FauxtonAPI from '../../../core/api';
-import AnalyzerDropdown from '../components/AnalyzerDropdown';
-import SearchForm from '../components/SearchForm';
-import SearchIndexEditor from '../components/SearchIndexEditor';
-import '../base';
-
-describe('SearchIndexEditor', () => {
-  const defaultProps = {
-    isLoading: false,
-    isCreatingIndex: false,
-    database: { id: 'my_db' },
-    lastSavedDesignDocName: 'last_ddoc',
-    lastSavedSearchIndexName: 'last_idx',
-    searchIndexFunction: '',
-    saveDoc: {},
-    designDocs: [],
-    searchIndexName: '',
-    ddocPartitioned: false,
-    newDesignDocPartitioned: false,
-    analyzerType: '',
-    singleAnalyzer: '',
-    defaultAnalyzer: '',
-    defaultMultipleAnalyzer: '',
-    analyzerFields: [],
-    setAnalyzerType: () => {},
-    setDefaultMultipleAnalyzer: () => {},
-    setSingleAnalyzer: () => {},
-    addAnalyzerRow: () => {},
-    setSearchIndexName: () => {},
-    saveSearchIndex: () => {},
-    selectDesignDoc: () => {},
-    updateNewDesignDocName: () => {}
-  };
-
-  it('generates the correct cancel link when db, ddoc and views have special chars', () => {
-    const editorEl = mount(<SearchIndexEditor
-      {...defaultProps}
-      database={{ id: 'db%$1' }}
-      lastSavedDesignDocName={'_design/doc/1$2'}
-      lastSavedSearchIndexName={'search?abc/123'}
-    />);
-    const expectedUrl = `/${encodeURIComponent('db%$1')}/_design/${encodeURIComponent('doc/1$2')}/_search/${encodeURIComponent('search?abc/123')}`;
-    expect(editorEl.find('a.index-cancel-link').prop('href')).toMatch(expectedUrl);
-  });
-
-  it('does not save when missing the index name', () => {
-    const spy = sinon.stub();
-    const editorEl = mount(<SearchIndexEditor
-      {...defaultProps}
-      database={{ id: 'test_db' }}
-      designDocs={[{id: '_design/d1'}, {id: '_design/d2'}]}
-      ddocName='_design/d1'
-      searchIndexName={''}
-      saveSearchIndex={spy}
-      saveDoc={{id: '_design/d'}}
-    />);
-
-    editorEl.find('button#save-index').simulate('click', {preventDefault: () => {}});
-    sinon.assert.notCalled(spy);
-  });
-});
-
-describe('AnalyzerDropdown', () => {
-
-  it('check default values and settings', () => {
-    const el = mount(<AnalyzerDropdown />);
-
-    // confirm default label
-    expect(el.find('label').length).toBe(2);
-    expect(el.find('label').first().text()).toBe('Type');
-
-    // confirm default value
-    expect(el.find('select').hasClass('standard')).toBeTruthy();
-  });
-
-  it('omits label element if empty label passed', () => {
-    const el = mount(<AnalyzerDropdown label="" />);
-
-    // (1, because there are normally 2 labels, see prev test)
-    expect(el.find('label').length).toBe(1);
-  });
-
-  it('custom ID works', () => {
-    const customID = 'myCustomID';
-    const el = mount(<AnalyzerDropdown id={customID} />);
-    expect(el.find('select').prop('id')).toBe(customID);
-  });
-
-  it('sets default value', () => {
-    const defaultSelected = 'russian';
-    const el = mount(
-      <AnalyzerDropdown defaultSelected={defaultSelected} />
-    );
-
-    expect(el.find('select').hasClass(defaultSelected)).toBeTruthy();
-  });
-
-  it('custom classes get applied', () => {
-    const el = mount(<AnalyzerDropdown classes="nuthatch vulture" />);
-    expect(el.find('.nuthatch').exists()).toBeTruthy();
-    expect(el.find('.vulture').exists()).toBeTruthy();
-  });
-
-  it('custom change handler gets called', () => {
-    const spy = sinon.spy();
-    const el = mount(<AnalyzerDropdown onChange={spy} />);
-    const newVal = 'whitespace';
-    el.find('select').simulate('change', { target: { value: newVal }});
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-});
-
-describe('SearchForm', () => {
-  const defaultProps = {
-    searchResults: [{id: 'elephant'}],
-    searchPerformed: true,
-    hasActiveQuery: false,
-    searchQuery: 'a_search',
-    database: { id: 'foo' },
-    querySearch: () => {},
-    setSearchQuery: () => {}
-  };
-
-  beforeEach(() => {
-    sinon.stub(FauxtonAPI, 'urls').returns('/fake/url');
-  });
-
-  afterEach(() => {
-    FauxtonAPI.urls.restore();
-  });
-
-  it('renders docs from the search results', () => {
-    const el = mount(<SearchForm
-      {...defaultProps}
-    />);
-    expect(el.find('pre').first().text('elephant')).toBeTruthy();
-  });
-
-  it('renders with links', () => {
-    const el = mount(<SearchForm
-      {...defaultProps}
-    />);
-    expect(el.find('a')).toBeTruthy();
-  });
-});
diff --git a/app/addons/search/__tests__/search.actions.test.js b/app/addons/search/__tests__/search.actions.test.js
deleted file mode 100644
index 7765521..0000000
--- a/app/addons/search/__tests__/search.actions.test.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed 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.
-
-import sinon from 'sinon';
-import utils from '../../../../test/mocha/testUtils';
-import FauxtonAPI from '../../../core/api';
-import Actions from '../actions';
-import * as API from '../api';
-import '../base';
-import '../../documents/base';
-
-const {restore} = utils;
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('search actions', () => {
-
-  afterEach(() => {
-    restore(FauxtonAPI.navigate);
-    restore(FauxtonAPI.addNotification);
-    restore(API.fetchSearchResults);
-  });
-
-  it("should show a notification and redirect if database doesn't exist", () => {
-    const navigateSpy = sinon.spy(FauxtonAPI, 'navigate');
-    const notificationSpy = sinon.spy(FauxtonAPI, 'addNotification');
-    sinon.stub(API, 'fetchSearchResults').rejects(new Error('db not found'));
-    FauxtonAPI.reduxDispatch = () => {};
-
-    const params = {
-      databaseName: 'safe-id-db',
-      designDoc: 'design-doc',
-      indexName: 'idx1',
-      query: 'a_query'
-    };
-    return Actions.dispatchInitSearchIndex(params)
-      .then(() => {
-        expect(notificationSpy.calledOnce).toBeTruthy();
-        expect(/db not found/.test(notificationSpy.args[0][0].msg)).toBeTruthy();
-        expect(navigateSpy.calledOnce).toBeTruthy();
-        expect(navigateSpy.args[0][0]).toBe('database/safe-id-db/_all_docs');
-      });
-  });
-
-});
diff --git a/app/addons/search/__tests__/search.reducers.test.js b/app/addons/search/__tests__/search.reducers.test.js
deleted file mode 100644
index 01d8102..0000000
--- a/app/addons/search/__tests__/search.reducers.test.js
+++ /dev/null
@@ -1,176 +0,0 @@
-// Licensed 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.
-
-import reducer from '../reducers';
-import ActionTypes from '../actiontypes';
-import Constants from '../constants';
-
-describe('Search Reducer', () => {
-
-  it('adds an analyzer row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, { type: 'DO_NOTHING' });
-    expect(newState.analyzerFields).toHaveLength(0);
-    newState = reducer(newState, action);
-    expect(newState.analyzerFields).toHaveLength(1);
-    expect(newState.analyzerFields[0].analyzer).toBe('sample');
-    expect(newState.analyzerFields[0].valid).toBe(true);
-  });
-
-  it('updates field name of an existing row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME,
-      options: { rowIndex: 1, fieldName: 'f100' }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields[0].fieldName).toBe('f1');
-    expect(newState.analyzerFields[1].fieldName).toBe('f100');
-    expect(newState.analyzerFields[2].fieldName).toBe('f3');
-  });
-
-  it('updates analyzer of an existing row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW,
-      options: { rowIndex: 1, analyzer: 'keyword' }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields[0].analyzer).toBe('sample');
-    expect(newState.analyzerFields[1].analyzer).toBe('keyword');
-    expect(newState.analyzerFields[2].analyzer).toBe('sample');
-  });
-
-  it('removes an analyzer row', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-      options: {
-        analyzer: 'sample',
-        fieldName: 'f1'
-      }
-    };
-    let newState = reducer(undefined, action);
-    action.options.fieldName = 'f2';
-    newState = reducer(newState, action);
-    action.options.fieldName = 'f3';
-    newState = reducer(newState, action);
-
-    const removeAction = {
-      type: ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW,
-      options: { rowIndex: 1 }
-    };
-    newState = reducer(newState, removeAction);
-    expect(newState.analyzerFields).toHaveLength(2);
-    expect(newState.analyzerFields[0].fieldName).toBe('f1');
-    expect(newState.analyzerFields[1].fieldName).toBe('f3');
-  });
-
-  it('updates search results and resets the hasActiveQuery flag', () => {
-    let newState = reducer(undefined, {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE
-    });
-    expect(newState.hasActiveQuery).toBe(true);
-
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-      options: {
-        searchResults: ['result1', 'result2']
-      }
-    };
-    newState = reducer(newState, action);
-    expect(newState.searchResults).toHaveLength(2);
-    expect(newState.hasActiveQuery).toBe(false);
-  });
-
-  it('resets the search results when the search term is empty', () => {
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-      options: {
-        searchResults: ['result1', 'result2']
-      }
-    };
-    let newState = reducer(undefined, action);
-    expect(newState.searchResults).toHaveLength(2);
-
-    const initAction = {
-      type: ActionTypes.SEARCH_INDEX_INIT,
-      options: {
-        searchQuery: ''
-      }
-    };
-    newState = reducer(newState, initAction);
-    expect(newState.searchResults).toBeUndefined();
-  });
-
-  it('loads the single analyzer correctly', () => {
-    const initialState = reducer(undefined, { type: 'DO_NOTHING' });
-    expect(initialState.singleAnalyzer).toBe('standard');
-
-    const ddocID = '_design/ddoc_test';
-    const mockDesigDocModel = {
-      id: ddocID,
-      dDocModel: () => { return mockDesigDocModel; },
-      getAnalyzer: () => 'keyword',
-      getIndex: () => '',
-      analyzerType: () => Constants.ANALYZER_SINGLE
-    };
-    const designDocs = [mockDesigDocModel];
-    const action = {
-      type: ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX,
-      options: {
-        database: 'db1',
-        designDocs,
-        ddocID,
-        indexName: 'idx1'
-      }
-    };
-    // Validate the single analyzer is correct
-    const stateWithKeywordAnalyzer = reducer(initialState, action);
-    expect(stateWithKeywordAnalyzer.singleAnalyzer).toBe('keyword');
-
-    // Validate the default analyzer is set when the DDoc doesn't specify one
-    mockDesigDocModel.getAnalyzer = () => undefined;
-    const stateWithNoAnalyzer = reducer(initialState, action);
-    expect(stateWithNoAnalyzer.singleAnalyzer).toBe(Constants.DEFAULT_ANALYZER);
-  });
-
-});
diff --git a/app/addons/search/actions.js b/app/addons/search/actions.js
deleted file mode 100644
index a1181d3..0000000
--- a/app/addons/search/actions.js
+++ /dev/null
@@ -1,429 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../core/api';
-import ActionTypes from './actiontypes';
-import Search from './resources';
-import SidebarActions from '../documents/sidebar/actions';
-import IndexEditorActions from '../documents/index-editor/actions';
-import * as API from './api';
-
-const dispatchInitNewSearchIndex = (params) => {
-  // ensure we start with a clear slate
-  FauxtonAPI.reduxDispatch({ type: ActionTypes.SEARCH_INDEX_CLEAR });
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  params.designDocs.fetch().then(() => {
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SEARCH_INDEX_DESIGN_DOCS_LOADED,
-      options: {
-        designDocs: params.designDocs,
-        defaultDDoc: params.defaultDDoc,
-        database: params.database
-      }
-    });
-  });
-};
-
-const dispatchInitSearchIndex = (params)  => {
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_INIT,
-    options: {
-      databaseName: params.databaseName,
-      partitionKey: params.partitionKey,
-      ddocName: params.designDoc,
-      indexName: params.indexName,
-      searchQuery: params.query ? params.query : ''
-    }
-  });
-
-  if (params.query) {
-    return executSearchQuery(params.databaseName, params.partitionKey, params.designDoc,
-      params.indexName, params.query, FauxtonAPI.reduxDispatch);
-  }
-};
-
-const dispatchEditSearchIndex = (params) => {
-  const {database, ddocID, designDocs, indexName} = params;
-  FauxtonAPI.reduxDispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_LOADING,
-    options: {
-      loading: true
-    }
-  });
-
-  designDocs.fetch().then(ddocs => {
-    const ddoc = ddocs.rows.find(ddoc => ddoc._id === ddocID).doc;
-    if (!ddoc.indexes || !ddoc.indexes[indexName]) {
-      throw Error(`Index "${indexName}" not found`);
-    }
-    FauxtonAPI.reduxDispatch({
-      type: ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX,
-      options: {
-        indexName,
-        database,
-        ddocID,
-        designDocs,
-      }
-    });
-  }).catch(err => {
-    const details = err.message ? err.message : '';
-    FauxtonAPI.addNotification({
-      msg: `There was a problem editing the search index "${indexName}". ` + details,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const selectTab = (tab) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SELECT_TAB,
-    options: {
-      tab: tab
-    }
-  });
-};
-
-const setSearchIndexName = (str) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_NAME,
-    options: {
-      value: str
-    }
-  });
-};
-
-const setAnalyzerType = (type) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_TYPE,
-    options: {
-      value: type
-    }
-  });
-};
-
-const addAnalyzerRow = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const removeAnalyzerRow = (rowIndex) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW,
-    options: {
-      rowIndex: rowIndex
-    }
-  });
-};
-
-const setAnalyzerRowFieldName = (params) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME,
-    options: {
-      rowIndex: params.rowIndex,
-      fieldName: params.fieldName
-    }
-  });
-};
-
-const setAnalyzer = (params) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW,
-    options: {
-      rowIndex: params.rowIndex,
-      analyzer: params.analyzer
-    }
-  });
-};
-
-const setDefaultMultipleAnalyzer = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const setSingleAnalyzer = (analyzer) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_SINGLE_ANALYZER,
-    options: {
-      analyzer: analyzer
-    }
-  });
-};
-
-const saveSearchIndex = (doc, info, navigateToUrl) => {
-  doc.setIndex(info.indexName, info.indexFunction, info.analyzerInfo);
-
-  if (info.lastSavedDesignDocName === doc.id && info.lastSavedSearchIndexName !== info.indexName) {
-    var indexes = doc.get('indexes') || {};
-    delete indexes[info.lastSavedSearchIndexName];
-    doc.set({ indexes: indexes });
-  }
-
-  doc.save().then(() => {
-    info.designDocs.add(doc, { merge: true });
-
-    FauxtonAPI.addNotification({
-      msg: 'The search index has been saved.',
-      type: 'success',
-      clear: true
-    });
-
-    // if the user just saved the view to a different design doc, remove the view from the old design doc and
-    // maybe even delete if it's empty
-    if (!info.isCreatingIndex && info.lastSavedDesignDocName !== doc.id) {
-      const oldDesignDoc = IndexEditorActions.helpers.findDesignDoc(info.designDocs, info.lastSavedDesignDocName);
-      IndexEditorActions.safeDeleteIndex(oldDesignDoc, info.designDocs, 'indexes', info.lastSavedSearchIndexName, {
-        onSuccess: () => {
-          SidebarActions.dispatchUpdateDesignDocs(info.designDocs);
-        }
-      });
-    }
-
-    SidebarActions.dispatchUpdateDesignDocs(info.designDocs);
-    FauxtonAPI.navigate(navigateToUrl, { trigger: true });
-  }, (xhr) => {
-    const responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Save failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-
-const deleteSearchIndex = (options) => {
-  const onSuccess = () => {
-
-    // if the user was on the index that was just deleted, redirect them back to all docs
-    if (options.isOnIndex) {
-      const url = FauxtonAPI.urls('allDocs', 'app', options.database.safeID());
-      FauxtonAPI.navigate(url);
-    }
-    SidebarActions.dispatchUpdateDesignDocs(options.designDocs);
-
-    FauxtonAPI.addNotification({
-      msg: 'The <code>' + _.escape(options.indexName) + '</code> search index has been deleted.',
-      type: 'info',
-      escape: false,
-      clear: true
-    });
-    SidebarActions.dispatchHideDeleteIndexModal();
-  };
-
-  IndexEditorActions.safeDeleteIndex(options.designDoc, options.designDocs, 'indexes', options.indexName, { onSuccess });
-};
-
-const cloneSearchIndex = (params) => {
-  const targetDesignDoc = getDesignDoc(params.designDocs, params.targetDesignDocName, params.newDesignDocName, params.database);
-  let indexes = targetDesignDoc.get('indexes');
-  if (indexes && _.has(indexes, params.newIndexName)) {
-    FauxtonAPI.addNotification({
-      msg: 'That index name is already used in this design doc. Please enter a new name.',
-      type: 'error',
-      clear: true
-    });
-    return;
-  }
-  if (!indexes) {
-    indexes = {};
-  }
-  const sourceDesignDoc = IndexEditorActions.helpers.findDesignDoc(params.designDocs, '_design/' + params.sourceDesignDocName);
-  const sourceDesignDocJSON = sourceDesignDoc.toJSON();
-
-  // this sets whatever content is in the source index into the target design doc under the new index name
-  indexes[params.newIndexName] = sourceDesignDocJSON.indexes[params.sourceIndexName];
-  targetDesignDoc.set({ indexes: indexes });
-
-  targetDesignDoc.save().then(function () {
-    params.onComplete();
-    FauxtonAPI.addNotification({
-      msg: 'The search index has been cloned.',
-      type: 'success',
-      clear: true
-    });
-
-    SidebarActions.dispatchUpdateDesignDocs(params.designDocs);
-  },
-  function (xhr) {
-    params.onComplete();
-    var responseText = JSON.parse(xhr.responseText).reason;
-    FauxtonAPI.addNotification({
-      msg: 'Clone failed: ' + responseText,
-      type: 'error',
-      clear: true
-    });
-  });
-};
-
-const gotoEditSearchIndexPage = (databaseName, partitionKey, designDocName, indexName) => {
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  FauxtonAPI.navigate('#' + FauxtonAPI.urls('search', 'edit', encodeURIComponent(databaseName),
-    encodedPartKey, encodeURIComponent(designDocName), encodeURIComponent(indexName)));
-};
-
-const selectDesignDoc = (designDoc) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SELECT_DESIGN_DOC,
-    options: {
-      value: designDoc
-    }
-  });
-};
-
-// const querySearch = (searchQuery, partitionKey) => {
-const querySearch = (databaseName, partitionKey, ddocName, indexName, searchQuery) => {
-  const encodedDatabaseName = encodeURIComponent(databaseName);
-  const encodedPartitionKey = encodeURIComponent(partitionKey);
-  const encodedDdocName = encodeURIComponent(ddocName);
-  const encodedIndexName = encodeURIComponent(indexName);
-  const encodedSearchQuery = encodeURIComponent(searchQuery);
-
-  const baseUrl = partitionKey ?
-    FauxtonAPI.urls('partitioned_search', 'app', encodedDatabaseName, encodedPartitionKey, encodedDdocName, encodedIndexName) :
-    FauxtonAPI.urls('search', 'app', encodedDatabaseName, encodedDdocName, encodedIndexName);
-  FauxtonAPI.navigate(`${baseUrl}${encodedIndexName}?${encodedSearchQuery}`, {trigger: true});
-};
-
-const executSearchQuery = (database, partitionKey, ddoc, index, searchQuery, dispatch) => {
-  dispatch({ type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE });
-
-  return API.fetchSearchResults(database, partitionKey, ddoc, index, searchQuery)
-    .then(rows => {
-      dispatch({
-        type: ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED,
-        options: {
-          searchResults: rows
-        }
-      });
-    }).catch(err => {
-      dispatch({ type: ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_ERROR });
-
-      if (err && err.message.includes('`partition` not supported')) {
-        dispatch(partitionParamNotSupported());
-      } else if (err && err.message.includes('`partition` parameter is mandatory')) {
-        dispatch(partitionParamIsMandatory());
-      } else {
-        FauxtonAPI.addNotification({
-          msg: 'Search failed: ' + err.message,
-          type: 'error',
-          clear: true
-        });
-      }
-
-      if (err.message.includes('not found')) {
-        FauxtonAPI.navigate(FauxtonAPI.urls('allDocsSanitized', 'app', database), {trigger: true});
-      }
-    });
-};
-
-const setSearchQuery = (query) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_SET_SEARCH_QUERY,
-    options: {
-      query: query
-    }
-  });
-};
-
-const updateNewDesignDocName = (designDocName) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED,
-    options: {
-      value: designDocName
-    }
-  });
-};
-
-const updateNewDesignDocPartitioned = (isPartitioned) => (dispatch) => {
-  dispatch({
-    type: ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED,
-    options: {
-      value: isPartitioned
-    }
-  });
-};
-
-const partitionParamNotSupported = () => ({
-  type: ActionTypes.SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED
-});
-
-const partitionParamIsMandatory = () => ({
-  type: ActionTypes.SEARCH_INDEX_PARTITION_PARAM_MANDATORY
-});
-
-
-// helpers
-
-function getDesignDoc (designDocs, targetDesignDocName, newDesignDocName, database) {
-  if (targetDesignDocName === 'new-doc') {
-    var doc = {
-      "_id": "_design/" + newDesignDocName,
-      "indexes": {},
-      "language": "javascript"
-    };
-    return new Search.Doc(doc, { database: database });
-  }
-
-  var foundDoc = designDocs.find(function (ddoc) {
-    return ddoc.id === targetDesignDocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-}
-
-
-export default {
-  dispatchInitNewSearchIndex,
-  dispatchInitSearchIndex,
-  dispatchEditSearchIndex,
-  selectTab,
-  setSearchIndexName,
-  setAnalyzerType,
-  addAnalyzerRow,
-  removeAnalyzerRow,
-  setAnalyzerRowFieldName,
-  setAnalyzer,
-  setDefaultMultipleAnalyzer,
-  selectDesignDoc,
-  saveSearchIndex,
-  cloneSearchIndex,
-  deleteSearchIndex,
-  gotoEditSearchIndexPage,
-  querySearch,
-  setSearchQuery,
-  setSingleAnalyzer,
-  updateNewDesignDocName,
-  updateNewDesignDocPartitioned,
-  partitionParamNotSupported,
-  partitionParamIsMandatory
-};
diff --git a/app/addons/search/actiontypes.js b/app/addons/search/actiontypes.js
deleted file mode 100644
index c99abad..0000000
--- a/app/addons/search/actiontypes.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed 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.
-
-export default {
-  SEARCH_INDEX_DESIGN_DOCS_LOADED: 'SEARCH_INDEX_DESIGN_DOCS_LOADED',
-  SEARCH_INDEX_INIT: 'SEARCH_INDEX_INIT',
-  SEARCH_INDEX_SELECT_TAB: 'SEARCH_INDEX_SELECT_TAB',
-  SEARCH_INDEX_SET_NAME: 'SEARCH_INDEX_SET_NAME',
-  SEARCH_INDEX_SET_ANALYZER_TYPE: 'SEARCH_INDEX_SET_ANALYZER_TYPE',
-  SEARCH_INDEX_ADD_ANALYZER_ROW: 'SEARCH_INDEX_ADD_ANALYZER_ROW',
-  SEARCH_INDEX_REMOVE_ANALYZER_ROW: 'SEARCH_INDEX_REMOVE_ANALYZER_ROW',
-  SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME: 'SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME',
-  SEARCH_INDEX_SET_ANALYZER_ROW: 'SEARCH_INDEX_SET_ANALYZER_ROW',
-  SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER: 'SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER',
-  SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX: 'SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX',
-  SEARCH_INDEX_PREVIEW_MODEL_UPDATED: 'SEARCH_INDEX_PREVIEW_MODEL_UPDATED',
-  SEARCH_INDEX_PREVIEW_REQUEST_MADE: 'SEARCH_INDEX_PREVIEW_REQUEST_MADE',
-  SEARCH_INDEX_PREVIEW_REQUEST_ERROR: 'PREVIEW_MODEL_REQUEST_ERROR',
-  SEARCH_INDEX_SELECT_DESIGN_DOC: 'SEARCH_INDEX_SELECT_DESIGN_DOC',
-  SEARCH_INDEX_SET_SINGLE_ANALYZER: 'SEARCH_INDEX_SET_SINGLE_ANALYZER',
-  SEARCH_INDEX_SET_SEARCH_QUERY: 'SEARCH_INDEX_SET_SEARCH_QUERY',
-  SEARCH_INDEX_SET_LOADING: 'SEARCH_INDEX_SET_LOADING',
-  SEARCH_INDEX_CLEAR: 'SEARCH_INDEX_CLEAR',
-  SEARCH_INDEX_UPDATE_INDEX_FUNCTION: 'SEARCH_INDEX_UPDATE_INDEX_FUNCTION',
-  SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED: 'SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED',
-  SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED: 'SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED',
-  SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED: 'SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED',
-  SEARCH_INDEX_PARTITION_PARAM_MANDATORY: 'SEARCH_INDEX_PARTITION_PARAM_MANDATORY'
-};
diff --git a/app/addons/search/api.js b/app/addons/search/api.js
deleted file mode 100644
index 5711c98..0000000
--- a/app/addons/search/api.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../core/api';
-import { get } from '../../core/ajax';
-
-function searchUrl(database, partitionKey, ddoc, index, searchQuery) {
-  //https://mycouchdb/db/_design/views101/_search/animals?q=kookaburra
-  const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-  return FauxtonAPI.urls('search', 'server', encodeURIComponent(database), encodedPartKey,
-    encodeURIComponent(ddoc), encodeURIComponent(index),
-    '?limit=10&q=' + encodeURIComponent(searchQuery));
-}
-
-export const fetchSearchResults = (database, partitionKey, ddoc, index, searchQuery) => {
-  const url = searchUrl(database, partitionKey, ddoc, index, searchQuery);
-  return get(url).then((res) => {
-    if (res.error) {
-      throw new Error(res.reason);
-    }
-
-    return res.rows;
-  });
-};
diff --git a/app/addons/search/assets/less/search.less b/app/addons/search/assets/less/search.less
deleted file mode 100644
index 9725d55..0000000
--- a/app/addons/search/assets/less/search.less
+++ /dev/null
@@ -1,160 +0,0 @@
-// Licensed 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.
-@import "../../../../../assets/less/bootstrap/mixins.less";
-@import "../../../../../assets/less/variables.less";
-
-.search-index-page-loading {
-  margin-top: 20px;
-}
-
-.edit-search-index-page-loading {
-  margin-top: 25px;
-}
-
-.index-tabs.dashboard-upper-menu {
-  position: inherit;
-  &.index-tabs {
-    border-bottom: 0;
-    .fonticon:before {
-      margin-right: 6px;
-    }
-  }
-}
-
-#queryText{
-  max-width: 300px;
-}
-
-.ace-editor-section .ace_editor {
-  font-size: 13px;
-  width: 100%;
-  line-height: 22px;
-}
-
-.search-query-save {
-  max-width: 100%;
-  .design-doc-group #new-ddoc-section {
-    margin-top: 24px;
-    label {
-      padding-top: 12px;
-    }
-  }
-}
-
-#analyzer-fields {
-  margin-top: 10px;
-
-  li {
-    margin-bottom: 5px;
-
-    &:first-child {
-      button {
-        margin-top: 27px;
-      }
-    }
-    div:first-child {
-      margin-left: 0;
-    }
-  }
-
-  .span4 {
-    margin-right: 3px;
-    width: 30%;
-
-    .styled-select, select {
-      width: 100%;
-    }
-  }
-}
-
-.delete-analyzer {
-  margin-top: 3px;
-  margin-left: 15px;
-}
-
-.search-index-content>div {
-  margin: 20px 10px 0 20px;
-  .icon-question-sign {
-    margin-left: 4px;
-    &:hover {
-      color: @hoverHighlight;
-    }
-  }
-}
-
-.search-index-function {
-  label {
-    margin-right: 0;
-  }
-  .ace_editor {
-    line-height: 22px;
-  }
-}
-
-#search-query-submit {
-  padding: 12px;
-}
-
-#search-index-preview-form {
-  margin: 5px 0 20px;
-  .input-append {
-    vertical-align: bottom;
-  }
-  .help-link {
-    display: inline-block;
-    margin-left: 12px;
-    padding-bottom: 23px;
-  }
-}
-
-#search-index-help {
-  h4 {
-    margin-top: 18px;
-  }
-
-  ul {
-    margin: 0 0 10px;
-    padding: 0;
-    list-style-type: none;
-  }
-  .search-index-examples {
-    li {
-      line-height: 28px;
-      span {
-        .search-index-code-section;
-      }
-    }
-  }
-}
-
-.search-index-tab-content {
-  a:hover {
-    text-decoration: none;
-  }
-}
-
-.search-index-code-section {
-  font-size: 12px;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  background-color: #ddd;
-  padding: 5px;
-  border-radius: 3px;
-}
-
-#search-index-query-button {
-  height: 46px;
-  .border-right-radius(@radius);
-}
-
-body #dashboard-content #search-index-form {
-  position: relative;
-}
diff --git a/app/addons/search/base.js b/app/addons/search/base.js
deleted file mode 100644
index 0562256..0000000
--- a/app/addons/search/base.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed 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.
-import Helpers from '../../helpers';
-import FauxtonAPI from '../../core/api';
-import Actions from './actions';
-import SearchRoutes from './routes';
-import reducers from './reducers';
-import { get } from "../../core/ajax";
-import Constants from './constants';
-import './assets/less/search.less';
-
-function checkSearchFeature () {
-  // Checks if the CouchDB server supports Search
-  return get(Helpers.getServerUrl("/")).then((couchdb) => {
-    return couchdb.features && couchdb.features.includes('search');
-  }).catch(() => {
-    return false;
-  });
-}
-
-function partitionUrlComponent(partitionKey) {
-  return partitionKey ? '/_partition/' + partitionKey : '';
-}
-
-SearchRoutes.initialize = function () {
-  checkSearchFeature().then(function(enabled) {
-    if (!enabled) return;
-
-    FauxtonAPI.registerExtension('sidebar:list', {
-      selector: 'indexes',
-      name: 'Search Indexes',
-      urlNamespace: 'search',
-      indexLabel: 'search index', // used for labels
-      onDelete: Actions.deleteSearchIndex,
-      onClone: Actions.cloneSearchIndex,
-      onEdit: Actions.gotoEditSearchIndexPage
-    });
-    FauxtonAPI.registerExtension('sidebar:links', {
-      title: "New Search Index",
-      url: "new_search",
-      icon: 'fonticon-plus-circled',
-      showForPartitionedDDocs: true
-    });
-    FauxtonAPI.registerExtension('sidebar:newLinks', {
-      url: 'new_search',
-      name: 'Search Index'
-    });
-
-    // this tells Fauxton of the new Search Index type. It's used to determine when a design doc is really empty
-    FauxtonAPI.registerExtension('IndexTypes:propNames', 'indexes');
-
-    FauxtonAPI.registerExtension('mango:indexTemplates', Constants.SEARCH_MANGO_INDEX_TEMPLATES);
-  });
-};
-
-FauxtonAPI.registerUrls('partitioned_search', {
-  app: function (id, partitionKey, designDoc) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/';
-  }
-});
-
-FauxtonAPI.registerUrls('search', {
-  server: function (id, partitionKey, designDoc, searchName, query) {
-    return Helpers.getServerUrl('/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + searchName + query);
-  },
-
-  app: function (id, designDoc) {
-    return 'database/' + id + '/_design/' + designDoc + '/_search/';
-  },
-
-  edit: function (database, partitionKey, designDoc, indexName) {
-    return 'database/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + indexName + '/edit';
-  },
-
-  fragment: function (id, partitionKey, designDoc, search) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + search;
-  },
-
-  showIndex: function (id, partitionKey, designDoc, search) {
-    return 'database/' + id + partitionUrlComponent(partitionKey) + '/' + designDoc + '/_search/' + search;
-  },
-
-  apiurl: function (id, partitionKey, designDoc, searchName, query) {
-    return window.location.origin + '/' + encodeURIComponent(id) + '/_design/' + encodeURIComponent(designDoc) +
-      '/_search/' + encodeURIComponent(searchName) + '?q=' + encodeURIComponent(query);
-  }
-});
-
-FauxtonAPI.addReducers({
-  search: reducers
-});
-
-export default SearchRoutes;
diff --git a/app/addons/search/components/Analyzer.js b/app/addons/search/components/Analyzer.js
deleted file mode 100644
index 06807f2..0000000
--- a/app/addons/search/components/Analyzer.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Constants from '../constants';
-import AnalyzerMultiple from './AnalyzerMultiple';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-// handles the entire Analyzer section: Simple and Multiple analyzers
-export default class Analyzer extends React.Component {
-  static propTypes = {
-    analyzerType: PropTypes.string.isRequired,
-    analyzerFields: PropTypes.array.isRequired,
-    defaultMultipleAnalyzer: PropTypes.string.isRequired,
-    singleAnalyzer: PropTypes.string.isRequired,
-    setAnalyzerType: PropTypes.func.isRequired,
-    setSingleAnalyzer: PropTypes.func.isRequired,
-    setDefaultMultipleAnalyzer: PropTypes.func.isRequired,
-    addAnalyzerRow: PropTypes.func.isRequired
-  };
-
-  selectAnalyzerType = (e) => {
-    this.props.setAnalyzerType(e.target.value);
-  };
-
-  validate = () => {
-    if (this.props.analyzerType === Constants.ANALYZER_SINGLE) {
-      return true;
-    }
-    return this.analyzerMultiple.validate();
-  };
-
-  getAnalyzerFieldsAsObject = () => {
-    return this.props.analyzerFields.reduce((acc, row) => {
-      const fieldName = row.fieldName.replace(/["']/g, '');
-      acc[fieldName] = row.analyzer;
-      return acc;
-    }, {});
-  };
-
-  getInfo = () => {
-    return this.props.analyzerType === Constants.ANALYZER_SINGLE
-      ? this.props.singleAnalyzer
-      : {
-        name: 'perfield',
-        default: this.props.defaultMultipleAnalyzer,
-        fields: this.getAnalyzerFieldsAsObject()
-      };
-  };
-
-  selectSingleAnalyzer = (e) => {
-    this.props.setSingleAnalyzer(e.target.value);
-  };
-
-  selectDefaultMultipleAnalyzer = (e) => {
-    this.props.setDefaultMultipleAnalyzer(e.target.value);
-  };
-
-  getAnalyzerType = () => {
-    return this.props.analyzerType === Constants.ANALYZER_SINGLE
-      ? (<AnalyzerDropdown
-        label="Type"
-        defaultSelected={this.props.singleAnalyzer}
-        onChange={this.selectSingleAnalyzer}
-      />)
-      : (<AnalyzerMultiple
-        ref={node => this.analyzerMultiple = node}
-        defaultAnalyzer={this.props.defaultMultipleAnalyzer}
-        selectDefaultMultipleAnalyzer={this.selectDefaultMultipleAnalyzer}
-        fields={this.props.analyzerFields}
-        addAnalyzerRow={this.props.addAnalyzerRow}
-        removeAnalyzerRow={this.props.removeAnalyzerRow}
-        setAnalyzerRowFieldName={this.props.setAnalyzerRowFieldName}
-        setAnalyzer={this.props.setAnalyzer}
-      />);
-  };
-
-  render() {
-    let multipleClasses = 'btn';
-    if (this.props.analyzerType === Constants.ANALYZER_MULTIPLE) {
-      multipleClasses += ' active';
-    }
-    let singleClasses = 'btn';
-    if (this.props.analyzerType === Constants.ANALYZER_SINGLE) {
-      singleClasses += ' active';
-    }
-
-    return (
-      <div className="well">
-        <div className="control-group">
-          <label htmlFor="search-analyzer">Analyzer</label>
-          <div className="btn-group toggle-btns" id="analyzer">
-            <label style={{width: '82px'}}  htmlFor="single-analyzer" className={singleClasses}>Single</label>
-            <input
-              type="radio"
-              id="single-analyzer"
-              name="search-analyzer"
-              value="single"
-              checked={this.props.analyzerType === Constants.ANALYZER_SINGLE}
-              onChange={this.selectAnalyzerType} />
-            <input
-              type="radio"
-              id="multiple-analyzer"
-              name="search-analyzer"
-              value="multiple"
-              checked={this.props.analyzerType === Constants.ANALYZER_MULTIPLE}
-              onChange={this.selectAnalyzerType} />
-            <label style={{width: '82px'}} htmlFor="multiple-analyzer" className={multipleClasses}>Multiple</label>
-          </div>
-        </div>
-        {this.getAnalyzerType()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerDropdown.js b/app/addons/search/components/AnalyzerDropdown.js
deleted file mode 100644
index fa28612..0000000
--- a/app/addons/search/components/AnalyzerDropdown.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import GeneralComponents from '../../components/react-components';
-
-const StyledSelect = GeneralComponents.StyledSelect;
-
-export default class AnalyzerDropdown extends React.Component {
-  static defaultProps = {
-    defaultSelected: 'standard',
-    label: 'Type',
-    id: 'analyzer-default',
-    classes: '',
-    onChange: function () { }
-  };
-  static propTypes = {
-    defaultSelected: PropTypes.string.isRequired,
-    label: PropTypes.string.isRequired,
-    id: PropTypes.string.isRequired,
-    classes: PropTypes.string.isRequired,
-    onChange: PropTypes.func.isRequired
-  };
-
-  getAnalyzers = () => {
-    const analyzers = [
-      'Standard', 'Keyword', 'Simple', 'Whitespace', 'Classic', 'Email'
-    ];
-    return analyzers.map((i) => {
-      return (<option value={i.toLowerCase()} key={i}>{i}</option>);
-    });
-  };
-
-  getLanguages = () => {
-    const languages = [
-      'Arabic', 'Armenian', 'Basque', 'Bulgarian', 'Brazilian', 'Catalan', 'Cjk', 'Chinese', 'Czech',
-      'Danish', 'Dutch', 'English', 'Finnish', 'French', 'Galician', 'German', 'Greek', 'Hindi', 'Hungarian',
-      'Indonesian', 'Irish', 'Italian', 'Japanese', 'Latvian', 'Norwegian', 'Persian', 'Polish', 'Portuguese',
-      'Romanian', 'Russian', 'Spanish', 'Swedish', 'Thai', 'Turkish'
-    ];
-    return languages.map((lang) => {
-      return (<option value={lang.toLowerCase()} key={lang}>{lang}</option>);
-    });
-  };
-
-  getLabel = () => {
-    return this.props.label === '' ? null : <label htmlFor={this.props.id}>{this.props.label}</label>;
-  };
-
-  render() {
-    const languages =
-      <optgroup label="Language-specific" key="languages">
-        {this.getLanguages()}
-      </optgroup>;
-
-    return (
-      <div className={this.props.classes}>
-        {this.getLabel()}
-        <StyledSelect
-          selectChange={this.props.onChange}
-          selectValue={this.props.defaultSelected}
-          selectId={this.props.id}
-          selectContent={[this.getAnalyzers(), languages]}
-        />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerMultiple.js b/app/addons/search/components/AnalyzerMultiple.js
deleted file mode 100644
index 4f1ca81..0000000
--- a/app/addons/search/components/AnalyzerMultiple.js
+++ /dev/null
@@ -1,94 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import PropTypes from 'prop-types';
-import React from 'react';
-import AnalyzerRow from './AnalyzerRow';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-export default class AnalyzerMultiple extends React.Component {
-  static propTypes = {
-    addAnalyzerRow: PropTypes.func.isRequired,
-    defaultAnalyzer: PropTypes.string.isRequired,
-    selectDefaultMultipleAnalyzer: PropTypes.func.isRequired,
-    fields: PropTypes.array.isRequired
-  };
-
-  constructor(props) {
-    super(props);
-    this.state = {
-      showErrors: false
-    };
-  }
-
-  addRow = (e) => {
-    e.preventDefault();
-    this.props.addAnalyzerRow(this.props.defaultAnalyzer);
-  };
-
-  getRows = () => {
-    return this.props.fields.map((row, i) => {
-      return (
-        <AnalyzerRow
-          row={row}
-          key={row.key}
-          rowIndex={i}
-          showErrors={this.state.showErrors}
-          setAnalyzer={this.props.setAnalyzer}
-          setAnalyzerRowFieldName={this.props.setAnalyzerRowFieldName}
-          removeAnalyzerRow={this.props.removeAnalyzerRow}
-        />
-      );
-    });
-  };
-
-  validate = () => {
-    this.setState({ showErrors: true });
-
-    let hasDuplicate = false;
-    const fieldNames = [];
-    const allValid = this.props.fields.every((row) => {
-      if (fieldNames.includes(row.fieldName)) {
-        hasDuplicate = true;
-      }
-      fieldNames.push(row.fieldName);
-      return row.valid;
-    });
-
-    if (!allValid || hasDuplicate) {
-      FauxtonAPI.addNotification({
-        msg: 'Fieldnames cannot be empty and must be unique.',
-        type: 'error',
-        clear: true
-      });
-    }
-    return allValid;
-  };
-
-  render() {
-    return (
-      <div>
-        <AnalyzerDropdown
-          label="Default"
-          id="defaultAnalyzer"
-          defaultSelected={this.props.defaultAnalyzer}
-          onChange={this.props.selectDefaultMultipleAnalyzer}
-          isValidating={this.validate} />
-        <ul id="analyzer-fields" className="unstyled">{this.getRows()}</ul>
-        <button className="addfield btn btn-small btn-primary" onClick={this.addRow}>
-          Add Field
-        </button>
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/AnalyzerRow.js b/app/addons/search/components/AnalyzerRow.js
deleted file mode 100644
index 7926b86..0000000
--- a/app/addons/search/components/AnalyzerRow.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import AnalyzerDropdown from './AnalyzerDropdown';
-
-export default class AnalyzerRow extends React.Component {
-  static propTypes = {
-    rowIndex: PropTypes.number.isRequired,
-    row: PropTypes.object.isRequired,
-    showErrors: PropTypes.bool.isRequired,
-    removeAnalyzerRow: PropTypes.func.isRequired,
-    setAnalyzerRowFieldName: PropTypes.func.isRequired,
-    setAnalyzer: PropTypes.func.isRequired
-  };
-
-  deleteRow = (e) => {
-    e.preventDefault();
-    this.props.removeAnalyzerRow(this.props.rowIndex);
-  };
-
-  getFieldNameHeading = (analyzerId) => {
-    return (this.props.rowIndex === 0) && <label htmlFor={analyzerId}>Fieldname</label>;
-  };
-
-  changeFieldName = (e) => {
-    this.props.setAnalyzerRowFieldName({
-      rowIndex: this.props.rowIndex,
-      fieldName: e.target.value
-    });
-  };
-
-  selectAnalyzer = (e) => {
-    this.props.setAnalyzer({
-      rowIndex: this.props.rowIndex,
-      analyzer: e.target.value
-    });
-  };
-
-  render() {
-    const analyzerId = "analyzer-row-" + this.props.rowIndex;
-    const analyzerHeading = (this.props.rowIndex === 0) ? 'Analyzer' : '';
-
-    let fieldNameClasses = 'span12';
-    if (this.props.showErrors && !this.props.row.valid) {
-      fieldNameClasses += ' unhappy';
-    }
-
-    return (
-      <li>
-        <div className="row-fluid">
-          <div className="span4">
-            {this.getFieldNameHeading(analyzerId)}
-            <input type="text" value={this.props.row.fieldName} className={fieldNameClasses} onChange={this.changeFieldName} />
-          </div>
-
-          <AnalyzerDropdown
-            id={analyzerId}
-            label={analyzerHeading}
-            defaultSelected={this.props.row.analyzer}
-            classes="span4"
-            onChange={this.selectAnalyzer} />
-
-          <div className="span4">
-            <button className="btn btn-danger delete-analyzer" onClick={this.deleteRow}>delete</button>
-          </div>
-        </div>
-      </li>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchForm.js b/app/addons/search/components/SearchForm.js
deleted file mode 100644
index 4c6371a..0000000
--- a/app/addons/search/components/SearchForm.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import FauxtonAPI from '../../../core/api';
-import GeneralComponents from '../../components/react-components';
-
-export default class SearchForm extends React.Component {
-  static propTypes = {
-    hasActiveQuery: PropTypes.bool.isRequired,
-    searchQuery: PropTypes.string.isRequired,
-    searchPerformed: PropTypes.bool.isRequired,
-    querySearch: PropTypes.func.isRequired,
-    setSearchQuery: PropTypes.func.isRequired,
-    searchResults: PropTypes.array
-  };
-
-  componentDidMount() {
-    this.searchInput.focus();
-  }
-
-  componentDidUpdate() {
-    prettyPrint();
-  }
-
-  querySearch = (e) => {
-    e.preventDefault();
-    if (this.props.searchQuery.trim() === '') {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter a search term.',
-        type: 'error',
-        clear: true
-      });
-      this.searchInput.focus();
-      return;
-    }
-    const {databaseName, partitionKey, ddocName, indexName, searchQuery} = this.props;
-    this.props.querySearch(databaseName, partitionKey, ddocName, indexName, searchQuery);
-  };
-
-  getRows = () => {
-    const database = encodeURIComponent(this.props.databaseName);
-    return this.props.searchResults.map((item) => {
-      const doc = {
-        header: item.id,
-        content: JSON.stringify(item, null, '  '),
-        url: FauxtonAPI.urls('document', 'app', database, encodeURIComponent(item.id))
-      };
-      return <GeneralComponents.Document
-        key={item.id}
-        keylabel={'id:'}
-        doc={doc}
-        header={item.id}
-        isDeletable={false}
-        docContent={doc.content}
-        onClick={this.onClick}
-        docChecked={() => { }}
-        docIdentifier={item.id} />;
-    });
-  };
-
-  onClick = (id, doc) => {
-    if (doc.url) {
-      FauxtonAPI.navigate(doc.url);
-    }
-  };
-
-  onType = (e) => {
-    this.props.setSearchQuery(e.target.value);
-  };
-
-  getResults = () => {
-    if (this.props.hasActiveQuery) {
-      return (<GeneralComponents.LoadLines />);
-    }
-
-    if (this.props.noResultsWarning) {
-      return (<div data-select="search-result-set">{this.props.noResultsWarning}</div>);
-    }
-
-    if (!this.props.searchResults) {
-      return false;
-    }
-
-    if (this.props.searchResults.length === 0) {
-      return (<div data-select="search-result-set">No results found.</div>);
-    }
-
-    return (
-      <div id="doc-list" data-select="search-result-set">
-        {this.getRows()}
-      </div>
-    );
-  };
-
-  render() {
-    const buttonLabel = this.props.hasActiveQuery ? 'Querying...' : 'Query';
-    return (
-      <div>
-        <form id="search-index-preview-form">
-          <span className="input-append">
-            <input
-              className="span4"
-              ref={el => this.searchInput = el}
-              type="text"
-              placeholder="Enter your search query"
-              onChange={this.onType}
-              value={this.props.searchQuery} />
-            <button className="btn btn-primary" id="search-index-query-button" type="submit" disabled={this.props.hasActiveQuery}
-              onClick={this.querySearch}>{buttonLabel}</button>
-          </span>
-          <a className="help-link" data-bypass="true" href={FauxtonAPI.constants.DOC_URLS.SEARCH_INDEX_QUERIES} target="_blank" rel="noopener noreferrer">
-            <i className="icon-question-sign" />
-          </a>
-        </form>
-
-        {this.getResults()}
-      </div>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchFormContainer.js b/app/addons/search/components/SearchFormContainer.js
deleted file mode 100644
index d5bbba8..0000000
--- a/app/addons/search/components/SearchFormContainer.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { connect } from 'react-redux';
-import SearchForm from './SearchForm';
-import Actions from '../actions';
-
-const mapStateToProps = ({ search }) => {
-  return {
-    databaseName: search.databaseName,
-    partitionKey: search.partitionKey,
-    ddocName: search.ddocName,
-    indexName: search.indexName,
-    hasActiveQuery: search.hasActiveQuery,
-    searchQuery: search.searchQuery,
-    searchPerformed: search.searchPerformed,
-    searchResults: search.searchResults,
-    noResultsWarning: search.noResultsWarning
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    querySearch: (databaseName, partitionKey, ddocName, indexName, searchQuery) => {
-      Actions.querySearch(databaseName, partitionKey, ddocName, indexName, searchQuery);
-    },
-
-    setSearchQuery: (query) => {
-      dispatch(Actions.setSearchQuery(query));
-    }
-  };
-};
-
-const SearchFormContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SearchForm);
-
-export default SearchFormContainer;
diff --git a/app/addons/search/components/SearchIndexEditor.js b/app/addons/search/components/SearchIndexEditor.js
deleted file mode 100644
index dbff53a..0000000
--- a/app/addons/search/components/SearchIndexEditor.js
+++ /dev/null
@@ -1,165 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import app from '../../../app';
-import PropTypes from 'prop-types';
-import React from 'react';
-import GeneralComponents from '../../components/react-components';
-import IndexEditorComponents from '../../documents/index-editor/components';
-import Analyzer from './Analyzer';
-
-const DesignDocSelector = IndexEditorComponents.DesignDocSelector;
-
-export default class SearchIndexEditor extends React.Component {
-  static defaultProps = {
-    isCreatingIndex: true,
-    blur: function () { },
-    isLoading: true
-  };
-
-  static propTypes = {
-    isLoading: PropTypes.bool,
-    isCreatingIndex: PropTypes.bool,
-    database: PropTypes.object.isRequired,
-    saveDoc: PropTypes.object.isRequired,
-    newDesignDocName: PropTypes.string,
-    blur: PropTypes.func,
-    setSearchIndexName: PropTypes.func.isRequired,
-    searchIndexFunction: PropTypes.string.isRequired,
-    saveSearchIndex: PropTypes.func.isRequired,
-    selectDesignDoc: PropTypes.func.isRequired,
-    updateNewDesignDocName: PropTypes.func.isRequired
-  };
-
-  updateSearchIndexName = (e) => {
-    this.props.setSearchIndexName(e.target.value);
-  };
-
-  saveIndex = (e) => {
-    e.preventDefault();
-
-    // pass off validation work to the individual form sections
-    if (!this.designDocSelector.validate() || !this.analyzer.validate()) {
-      return;
-    }
-
-    if (!this.props.searchIndexName.trim()) {
-      FauxtonAPI.addNotification({
-        msg: 'Please enter the index name.',
-        type: 'error',
-        clear: true
-      });
-      return;
-    }
-
-    const dDocNameClean = this.props.saveDoc.id.replace(/_design\//, '');
-    const encodedPartKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    const url = FauxtonAPI.urls('search', 'fragment', encodeURIComponent(this.props.database.id), encodedPartKey,
-      encodeURIComponent(dDocNameClean), encodeURIComponent(this.props.searchIndexName));
-
-    this.props.saveSearchIndex(this.props.saveDoc, {
-      isCreatingIndex: this.props.isCreatingIndex,
-      indexName: this.props.searchIndexName,
-      designDocs: this.props.designDocs,
-      database: this.props.database,
-      indexFunction: this.getIndexFunction(),
-      analyzerInfo: this.analyzer.getInfo(),
-      lastSavedSearchIndexName: this.props.lastSavedSearchIndexName,
-      lastSavedDesignDocName: this.props.lastSavedDesignDocName
-    }, url);
-  };
-
-  getIndexFunction = () => {
-    return this.searchIndexEditor.getValue();
-  };
-
-  getDesignDocList = () => {
-    return this.props.designDocs.map(function (doc) {
-      return doc.id;
-    });
-  };
-
-  getCancelLink() {
-    const encodedDatabase = encodeURIComponent(this.props.database.id);
-    const encodedPartitionKey = this.props.partitionKey ? encodeURIComponent(this.props.partitionKey) : '';
-    if (!this.props.lastSavedDesignDocName || this.props.isCreatingIndex) {
-      return '#' + FauxtonAPI.urls('allDocs', 'app', encodedDatabase, encodedPartitionKey);
-    }
-
-    const cleanDDocName = this.props.lastSavedDesignDocName.replace(/^_design\//, '');
-    const encodedDDoc = '_design/' + encodeURIComponent(cleanDDocName);
-    const encodedIndex = encodeURIComponent(this.props.lastSavedSearchIndexName);
-    return '#' + FauxtonAPI.urls('search', 'showIndex', encodedDatabase,
-      encodedPartitionKey, encodedDDoc, encodedIndex);
-  }
-
-  render() {
-    if (this.props.isLoading) {
-      return (
-        <div className="search-index-page-loading">
-          <GeneralComponents.LoadLines />
-        </div>
-      );
-    }
-    // If failed to load
-    if (!this.props.database) {
-      return null;
-    }
-
-    const pageHeader = this.props.isCreatingIndex ? 'New Search Index' : 'Edit Search Index';
-    const btnLabel = this.props.isCreatingIndex ? 'Create Document and Build Index' : 'Save Document and Build Index';
-    return (
-      <form className="form-horizontal search-query-save" id="search-index">
-        <h3 className="simple-header">{pageHeader}</h3>
-
-        <DesignDocSelector
-          ref={node => this.designDocSelector = node}
-          designDocLabel="Save to design document"
-          designDocList={this.getDesignDocList()}
-          isDbPartitioned={this.props.isDbPartitioned}
-          newDesignDocName={this.props.newDesignDocName}
-          newDesignDocPartitioned={this.props.newDesignDocPartitioned}
-          selectedDesignDocName={this.props.ddocName}
-          selectedDesignDocPartitioned={this.props.ddocPartitioned}
-          onSelectDesignDoc={this.props.selectDesignDoc}
-          onChangeNewDesignDocName={this.props.updateNewDesignDocName}
-          onChangeNewDesignDocPartitioned={this.props.updateNewDesignDocPartitioned}
-          docLink={app.helpers.getDocUrl('DOC_URL_DESIGN_DOCS')} />
-
-        <div className="control-group">
-          <label htmlFor="search-name">Index name</label>
-          <input type="text" id="search-name" value={this.props.searchIndexName} onChange={this.updateSearchIndexName} />
-        </div>
-
-        <GeneralComponents.CodeEditorPanel
-          id={'search-function'}
-          className="ace-editor-section"
-          ref={node => this.searchIndexEditor = node}
-          title={"Search index function"}
-          allowZenMode={false}
-          docLink={app.helpers.getDocUrl('SEARCH_INDEXES')}
-          defaultCode={this.props.searchIndexFunction}
-          blur={this.props.blur} />
-
-        <Analyzer ref={node => this.analyzer = node} {...this.props}/>
-
-        <div className="control-group">
-          <button id="save-index" className="btn btn-primary save" onClick={this.saveIndex}>
-            <i className="icon fonticon-ok-circled" />{btnLabel}
-          </button>
-          <a href={this.getCancelLink()} className="index-cancel-link">Cancel</a>
-        </div>
-      </form>
-    );
-  }
-}
diff --git a/app/addons/search/components/SearchIndexEditorContainer.js b/app/addons/search/components/SearchIndexEditorContainer.js
deleted file mode 100644
index ebbde2d..0000000
--- a/app/addons/search/components/SearchIndexEditorContainer.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import { connect } from 'react-redux';
-import SearchIndexEditor from './SearchIndexEditor';
-import Actions from '../actions';
-import { getSaveDesignDoc, getSelectedDesignDocPartitioned } from '../reducers';
-
-const mapStateToProps = ({ search, databases }, ownProps) => {
-  const isSelectedDDocPartitioned = getSelectedDesignDocPartitioned(search, databases.isDbPartitioned);
-  return {
-    isCreatingIndex: ownProps.isCreatingIndex,
-    isLoading: search.loading,
-    database: search.database,
-    designDocs: search.designDocs,
-    searchIndexFunction: search.searchIndexFunction,
-    ddocName: search.ddocName,
-    ddocPartitioned: isSelectedDDocPartitioned,
-    lastSavedDesignDocName: search.lastSavedDesignDocName,
-    lastSavedSearchIndexName: search.lastSavedSearchIndexName,
-    searchIndexName: search.searchIndexName,
-    analyzerType: search.analyzerType,
-    analyzerFields: search.analyzerFields,
-    analyzerFieldsObj: search.analyzerFieldsObj,
-    defaultMultipleAnalyzer: search.defaultMultipleAnalyzer,
-    singleAnalyzer: search.singleAnalyzer,
-    saveDoc: getSaveDesignDoc(search, databases.isDbPartitioned),
-    newDesignDocName: search.newDesignDocName,
-    newDesignDocPartitioned: search.newDesignDocPartitioned,
-    isDbPartitioned: databases.isDbPartitioned,
-    partitionKey: ownProps.partitionKey
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    setSearchIndexName: (name) => {
-      dispatch(Actions.setSearchIndexName(name));
-    },
-
-    saveSearchIndex: (doc, info, navigateToUrl) => {
-      Actions.saveSearchIndex(doc, info, navigateToUrl);
-    },
-
-    selectDesignDoc: (designDoc) => {
-      dispatch(Actions.selectDesignDoc(designDoc));
-    },
-
-    updateNewDesignDocName: (designDocName) => {
-      dispatch(Actions.updateNewDesignDocName(designDocName));
-    },
-    updateNewDesignDocPartitioned: (isPartitioned) => {
-      dispatch(Actions.updateNewDesignDocPartitioned(isPartitioned));
-    },
-    setAnalyzerType: (type) => {
-      dispatch(Actions.setAnalyzerType(type));
-    },
-    setSingleAnalyzer: (analyzer) => {
-      dispatch(Actions.setSingleAnalyzer(analyzer));
-    },
-    setDefaultMultipleAnalyzer: (analyzer) => {
-      dispatch(Actions.setDefaultMultipleAnalyzer(analyzer));
-    },
-    addAnalyzerRow: (analyzer) => {
-      dispatch(Actions.addAnalyzerRow(analyzer));
-    },
-    removeAnalyzerRow: (rowIndex) => {
-      dispatch(Actions.removeAnalyzerRow(rowIndex));
-    },
-    setAnalyzerRowFieldName: (params) => {
-      dispatch(Actions.setAnalyzerRowFieldName(params));
-    },
-    setAnalyzer: (params) => {
-      dispatch(Actions.setAnalyzer(params));
-    }
-
-  };
-};
-
-const SearchIndexEditorContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SearchIndexEditor);
-
-export default SearchIndexEditorContainer;
diff --git a/app/addons/search/constants.js b/app/addons/search/constants.js
deleted file mode 100644
index 432e301..0000000
--- a/app/addons/search/constants.js
+++ /dev/null
@@ -1,76 +0,0 @@
-// Licensed 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.
-export default {
-  ANALYZER_SINGLE: 'single',
-  ANALYZER_MULTIPLE: 'multiple',
-  DEFAULT_SEARCH_INDEX_NAME: 'newSearch',
-  DEFAULT_ANALYZER_TYPE: 'single',
-  DEFAULT_ANALYZER: 'standard',
-  DEFAULT_SEARCH_INDEX_FUNCTION: 'function (doc) {\n  index("name", doc.name);\n}',
-  SEARCH_MANGO_INDEX_TEMPLATES: [{
-    label: 'Single field (json)',
-    code: {
-      "index": {
-        "fields": ["foo"]
-      },
-      "name": "foo-json-index",
-      "type": "json"
-    }
-  }, {
-    label: 'Multiple fields (json)',
-    code: {
-      "index": {
-        "fields": ["foo", "bar"]
-      },
-      "name": "foo-bar-json-index",
-      "type": "json"
-    }
-  },
-  {
-    label: 'Single field (text)',
-    code: {
-      "index": {
-        "fields": [
-          {
-            "name": "foo",
-            "type": "string"
-          }
-        ]
-      },
-      "name": "foo-text",
-      "type": "text"
-    }
-  },
-  {
-    label: 'All fields (text)',
-    code: {
-      "index": {
-        "default_field": {
-          "enabled": false
-        },
-        "index_array_lengths": false
-      },
-      "name": "all-text",
-      "type": "text"
-    }
-  },
-  {
-    label: 'All fields with default field (text)',
-    code: {
-      "index": {
-        "index_array_lengths": false
-      },
-      "name": "all-text",
-      "type": "text"
-    }
-  }]
-};
diff --git a/app/addons/search/layout.js b/app/addons/search/layout.js
deleted file mode 100644
index 607627a..0000000
--- a/app/addons/search/layout.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed 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.
-import PropTypes from 'prop-types';
-import React from 'react';
-import {TabsSidebarHeader} from '../documents/layouts';
-import SidebarControllerContainer from '../documents/sidebar/SidebarControllerContainer';
-import SearchFormContainer from './components/SearchFormContainer';
-import SearchIndexEditorContainer from './components/SearchIndexEditorContainer';
-
-
-const getContent = (section, database, indexName,
-  ddocName, designDocs, ddoc, partitionKey) => {
-  if (section === 'create') {
-    return <SearchIndexEditorContainer
-      designDocs={designDocs}
-      ddoc={ddoc}
-      database={database}
-      isCreatingIndex={true}
-      partitionKey={partitionKey}
-    />;
-
-  } else if (section === 'edit') {
-    return <SearchIndexEditorContainer
-      database={database}
-      indexName={indexName}
-      ddocName={ddocName}
-      isCreatingIndex={false}
-      partitionKey={partitionKey}
-    />;
-  }
-
-  return <SearchFormContainer />;
-};
-
-export const SearchLayout = ({
-  section,
-  database,
-  indexName,
-  ddocName,
-  docURL, endpoint,
-  dropDownLinks,
-  designDocs,
-  ddoc,
-  selectedNavItem,
-  partitionKey,
-  onPartitionKeySelected,
-  onGlobalModeSelected,
-  globalMode
-}) => {
-  return (
-    <div id="dashboard" className="with-sidebar">
-      <TabsSidebarHeader
-        hideQueryOptions={true}
-        docURL={docURL}
-        endpoint={endpoint}
-        dbName={database.id}
-        dropDownLinks={dropDownLinks}
-        database={database}
-        showPartitionKeySelector={section === 'search'}
-        partitionKey={partitionKey}
-        onPartitionKeySelected={onPartitionKeySelected}
-        onGlobalModeSelected={onGlobalModeSelected}
-        globalMode={globalMode}
-      />
-      <div className="with-sidebar tabs-with-sidebar content-area">
-        <aside id="sidebar-content" className="scrollable">
-          <SidebarControllerContainer selectedNavItem={selectedNavItem} selectedPartitionKey={partitionKey}/>
-        </aside>
-        <section id="dashboard-content" className="flex-layout flex-col">
-          <div className="flex-body" id='dashboard-lower-content'>
-            <div className="search-index-content">
-              <div className="tab-content search-index-tab-content">
-                {getContent(section, database, indexName, ddocName, designDocs, ddoc, partitionKey)}
-              </div>
-            </div>
-          </div>
-        </section>
-      </div>
-    </div>
-  );
-};
-
-SearchLayout.propTypes = {
-  section: PropTypes.string.isRequired,
-  docURL: PropTypes.string,
-  endpoint: PropTypes.string,
-  ddocName: PropTypes.string,
-  indexName: PropTypes.string,
-  dropDownLinks: PropTypes.array.isRequired,
-  database: PropTypes.object.isRequired,
-};
-
-export default SearchLayout;
diff --git a/app/addons/search/reducers.js b/app/addons/search/reducers.js
deleted file mode 100644
index 8f97055..0000000
--- a/app/addons/search/reducers.js
+++ /dev/null
@@ -1,331 +0,0 @@
-// Licensed 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.
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-import SearchResources from './resources';
-import DocumentsHelpers from '../documents/helpers';
-
-const initialState = {
-  designDocs: new Backbone.Collection(),
-  database: {},
-  loading: true,
-  ddocName: 'new-doc',
-  partitionKey: '',
-  indexName: '',
-  databaseName: '',
-  ...softReset()
-};
-
-var keys = [];
-function getUniqueKey() {
-  function keygen () {
-    return Math.random().toString(36).substring(7);
-  }
-
-  var newKey = keygen();
-  while (keys.includes(newKey)) {
-    newKey = keygen();
-  }
-  keys.push(newKey);
-  return newKey;
-}
-
-// called on first load (e.g. editing a search index) and every time the create search index page loads
-function softReset() {
-  return {
-    noResultsWarning: '',
-    hasActiveQuery: false,
-    searchQuery: '',
-    searchResults: undefined,
-    searchPerformed: false,
-    newDesignDocName: '',
-    newDesignDocPartitioned: true,
-    lastSavedSearchIndexName: '',
-    searchIndexFunction: Constants.DEFAULT_SEARCH_INDEX_FUNCTION,
-    searchIndexName: Constants.DEFAULT_SEARCH_INDEX_NAME,
-    analyzerType: Constants.DEFAULT_ANALYZER_TYPE,
-    analyzerFields: [],
-    singleAnalyzer: Constants.DEFAULT_ANALYZER,
-    defaultMultipleAnalyzer: Constants.DEFAULT_ANALYZER
-  };
-}
-
-function addAnalyzerRow (state, { analyzer, fieldName }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  newAnalyzerFields.push({
-    key: getUniqueKey(),
-    fieldName: (fieldName) ? fieldName : '',
-    analyzer: analyzer,
-    valid: (fieldName && fieldName.trim().length > 0)
-  });
-  return newAnalyzerFields;
-}
-
-function removeAnalyzerRowByIndex (state, rowIndex) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  rowIndex = parseInt(rowIndex, 10);
-  newAnalyzerFields.splice(rowIndex, 1);
-  return newAnalyzerFields;
-}
-
-function setAnalyzerRowFieldName (state, { fieldName, rowIndex }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  const idx = parseInt(rowIndex, 10);
-  newAnalyzerFields[idx].fieldName = fieldName;
-  newAnalyzerFields[idx].valid = fieldName !== '';
-  return newAnalyzerFields;
-}
-
-function setAnalyzerRow (state, { analyzer, rowIndex }) {
-  const newAnalyzerFields = state.analyzerFields.slice();
-  const idx = parseInt(rowIndex, 10);
-  newAnalyzerFields[idx].analyzer = analyzer;
-  return newAnalyzerFields;
-}
-
-function initEditSearch (state, { database, designDocs, ddocID, indexName }) {
-  const ddoc = designDocs.find(ddoc => {
-    return ddoc.id === ddocID;
-  }).dDocModel();
-
-  // the selected analyzer returned in the ddoc can be applied to both the single analyzer and the default multiple
-  // analyzer. We store them separately in the store so those values don't change when toggling from Single to Multiple
-  const analyzer = ddoc.getAnalyzer(indexName);
-  let newSingleAnalyzer;
-  if (_.isString(analyzer)) {
-    newSingleAnalyzer = analyzer;
-  } else {
-    if (_.has(analyzer, 'default')) {
-      newSingleAnalyzer = analyzer.default;
-    } else {
-      newSingleAnalyzer = Constants.DEFAULT_ANALYZER;
-    }
-  }
-  const newAnalyzerFields = [];
-  if (analyzer && analyzer.fields) {
-    Object.keys(analyzer.fields).forEach(fieldName => {
-      newAnalyzerFields.push({
-        key: getUniqueKey(),
-        fieldName: (fieldName) ? fieldName : '',
-        analyzer: analyzer.fields[fieldName],
-        valid: !_.isUndefined(fieldName) && !_.isEmpty(fieldName)
-      });
-    });
-  }
-
-  return {
-    loading: false,
-    searchPerformed: false,
-    database: database,
-    designDocs: designDocs,
-    searchIndexName: indexName,
-    ddocName: ddocID,
-    lastSavedSearchIndexName: indexName,
-    lastSavedDesignDocName: ddocID,
-    searchIndexFunction: ddoc.getIndex(indexName),
-    analyzerType: ddoc.analyzerType(indexName),
-    // this either returns a simple string (single) or a complex object (multiple)
-    singleAnalyzer: newSingleAnalyzer,
-    defaultMultipleAnalyzer: newSingleAnalyzer,
-    analyzerFields: newAnalyzerFields
-  };
-}
-
-export function getSaveDesignDoc (state, isDbPartitioned) {
-  if (state.ddocName === 'new-doc') {
-    const doc = {
-      _id: '_design/' + state.newDesignDocName,
-      views: {},
-      language: 'javascript'
-    };
-    const dDoc = new SearchResources.Doc(doc, { database: state.database });
-    if (isDbPartitioned) {
-      dDoc.setDDocPartitionedOption(state.newDesignDocPartitioned);
-    }
-    return dDoc;
-  }
-
-  const foundDoc = state.designDocs.find((ddoc) => {
-    return ddoc.id === state.ddocName ||
-      ddoc.id === '_design/' + state.ddocName;
-  });
-  return (!foundDoc) ? null : foundDoc.dDocModel();
-}
-
-export function getSelectedDesignDocPartitioned(state, isDbPartitioned) {
-  const designDoc = state.designDocs.find(ddoc => {
-    return ddoc.id === state.ddocName ||
-      ddoc.id === '_design/' + state.ddocName;
-  });
-  if (designDoc) {
-    return DocumentsHelpers.isDDocPartitioned(designDoc.get('doc'), isDbPartitioned);
-  }
-  return false;
-}
-
-export default function search(state = initialState, action) {
-  const options = action.options;
-  switch (action.type) {
-
-    case ActionTypes.SEARCH_INDEX_SET_LOADING:
-      return {
-        ...state,
-        loading: options.loading
-      };
-
-    case ActionTypes.SEARCH_INDEX_DESIGN_DOCS_LOADED:
-      const newState = {
-        ...state,
-        loading: false,
-        designDocs: options.designDocs,
-        database: options.database,
-        ...softReset()
-      };
-      if (options.defaultDDoc) {
-        newState.ddocName = '_design/' + options.defaultDDoc;
-      }
-      return newState;
-
-    case ActionTypes.SEARCH_INDEX_SET_NAME:
-      return {
-        ...state,
-        searchIndexName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_TYPE:
-      return {
-        ...state,
-        analyzerType: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_SINGLE_ANALYZER:
-      return {
-        ...state,
-        singleAnalyzer: options.analyzer
-      };
-
-    case ActionTypes.SEARCH_INDEX_ADD_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: addAnalyzerRow(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_MADE:
-      return {
-        ...state,
-        hasActiveQuery: true
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_REQUEST_ERROR:
-      return {
-        ...state,
-        hasActiveQuery: false,
-        searchResults: []
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_SEARCH_QUERY:
-      return {
-        ...state,
-        searchQuery: options.query
-      };
-
-    case ActionTypes.SEARCH_INDEX_PREVIEW_MODEL_UPDATED:
-      return {
-        ...state,
-        searchResults: options.searchResults,
-        hasActiveQuery: false,
-        searchPerformed: true
-      };
-
-    case ActionTypes.SEARCH_INDEX_REMOVE_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: removeAnalyzerRowByIndex(state, options.rowIndex)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW_FIELD_NAME:
-      return {
-        ...state,
-        analyzerFields: setAnalyzerRowFieldName(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_ANALYZER_ROW:
-      return {
-        ...state,
-        analyzerFields: setAnalyzerRow(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SET_DEFAULT_MULTIPLE_ANALYZER:
-      return {
-        ...state,
-        defaultMultipleAnalyzer: options.analyzer
-      };
-
-    case ActionTypes.SEARCH_INDEX_INIT_EDIT_SEARCH_INDEX:
-      return {
-        ...state,
-        ...initEditSearch(state, options)
-      };
-
-    case ActionTypes.SEARCH_INDEX_SELECT_DESIGN_DOC:
-      return {
-        ...state,
-        ddocName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_CLEAR:
-      return {
-        ...initialState,
-        designDocs: new Backbone.Collection()
-      };
-
-    case ActionTypes.SEARCH_INDEX_INIT:
-      return {
-        ...state,
-        loading: false,
-        databaseName: options.databaseName,
-        partitionKey: options.partitionKey,
-        ddocName: options.ddocName,
-        indexName: options.indexName,
-        searchQuery: options.searchQuery,
-        searchResults: options.searchQuery === '' ? undefined : state.searchResults,
-        noResultsWarning: ''
-      };
-
-    case ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_NAME_UPDATED:
-      return {
-        ...state,
-        newDesignDocName: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_NEW_DESIGN_DOC_PARTITONED_UPDATED:
-      return {
-        ...state,
-        newDesignDocPartitioned: options.value
-      };
-
-    case ActionTypes.SEARCH_INDEX_PARTITION_PARAM_NOT_SUPPORTED:
-      return {
-        ...state,
-        noResultsWarning: 'The selected index does not support partitions. Switch back to global mode.'
-      };
-
-    case ActionTypes.SEARCH_INDEX_PARTITION_PARAM_MANDATORY:
-      return {
-        ...state,
-        noResultsWarning: 'The selected index requires a partition key. Use the selector at the top to enter a partition key.'
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/search/resources.js b/app/addons/search/resources.js
deleted file mode 100644
index 9862317..0000000
--- a/app/addons/search/resources.js
+++ /dev/null
@@ -1,72 +0,0 @@
-// Licensed 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.
-import Constants from './constants';
-import Documents from '../documents/resources';
-
-var Search = {};
-
-Search.Doc = Documents.Doc.extend({
-  setIndex: function (name, index, analyzer) {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    var indexes = this.get('indexes');
-    if (!indexes) {
-      indexes = {};
-    }
-    if (!indexes[name]) {
-      indexes[name] = {};
-    }
-
-    if (analyzer) {
-      indexes[name].analyzer = analyzer;
-    }
-
-    indexes[name].index = index;
-    return this.set({indexes: indexes});
-  },
-
-  getIndex: function (indexName) {
-    return this.get('indexes')[indexName].index;
-  },
-
-  getAnalyzer: function (indexName) {
-    return this.get('indexes')[indexName].analyzer;
-  },
-
-  analyzerType: function (indexName) {
-    if (typeof this.getAnalyzer(indexName) === 'object') {
-      return Constants.ANALYZER_MULTIPLE;
-    }
-    return Constants.ANALYZER_SINGLE;
-  },
-
-  dDocModel: function () {
-    if (!this.isDdoc()) {
-      return false;
-    }
-
-    var doc = this.get('doc');
-    if (doc) {
-      return new Search.Doc(doc, { database: this.database });
-    }
-    return false;
-  }
-});
-
-Search.AllDocs = Documents.AllDocs.extend({
-  model: Search.Doc
-});
-
-
-export default Search;
diff --git a/app/addons/search/routes.js b/app/addons/search/routes.js
deleted file mode 100644
index a578067..0000000
--- a/app/addons/search/routes.js
+++ /dev/null
@@ -1,201 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from '../../core/api';
-import Resources from './resources';
-import SearchActions from './actions';
-import DatabasesActions from '../databases/actions';
-import Databases from '../databases/base';
-import BaseRoute from '../documents/shared-routes';
-import SidebarActions from '../documents/sidebar/actions';
-import Actions from './actions';
-import Layout from './layout';
-import React from 'react';
-import {SidebarItemSelection} from '../documents/sidebar/helpers';
-
-var SearchRouteObject = BaseRoute.extend({
-  routes: {
-    'database/:database/_design/:ddoc/_search/:search(?*searchQuery)': {
-      route: 'searchNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_search/:search(?*searchQuery)': {
-      route: 'search',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_indexes/:search(?*searchQuery)': {
-      route: 'searchNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_indexes/:search(?*searchQuery)': {
-      route: 'search',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_design/:ddoc/_search/:search/edit': {
-      route: 'editNoPartition',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/_partition/:partitionkey/_design/:ddoc/_search/:search/edit': {
-      route: 'edit',
-      roles: ['fx_loggedIn']
-    },
-    'database/:database/new_search': 'createNoPartition',
-    'database/:database/_partition/:partitionkey/new_search': 'create',
-    'database/:database/new_search/:designDoc': 'createNoPartition',
-    'database/:database/_partition/:partitionkey/new_search/:designDoc': 'create'
-  },
-
-  initialize: function (route, options) {
-    this.databaseName = options[0];
-    this.database = new Databases.Model({ id: this.databaseName });
-    this.data = {
-      database: new Databases.Model({ id: this.databaseName })
-    };
-
-    this.data.designDocs = new Resources.AllDocs(null, {
-      database: this.data.database,
-      params: {
-        startkey: '"_design"',
-        endkey: '"_design1"',
-        include_docs: true
-      }
-    });
-
-    SidebarActions.dispatchNewOptions({
-      database: this.data.database,
-      designDocs: this.data.designDocs
-    });
-  },
-
-  searchNoPartition: function (databaseName, ddocName, indexName, query) {
-    return this.search(databaseName, '', ddocName, indexName, query);
-  },
-
-  search: function (databaseName, partitionKey, ddocName, indexName, query) {
-    this.databaseName = databaseName;
-    this.ddocName     = ddocName;
-    this.indexName    = indexName;
-
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Search Indexes',
-      indexName: indexName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    Actions.dispatchInitSearchIndex({
-      databaseName: databaseName,
-      partitionKey: partitionKey,
-      designDoc: ddocName,
-      indexName: indexName,
-      query: query
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(databaseName);
-
-    const encodedPartKey = partitionKey ? encodeURIComponent(partitionKey) : '';
-    const endpointUrl = FauxtonAPI.urls('search', 'apiurl', this.databaseName, encodedPartKey, this.ddocName,
-      this.indexName, (query ? query : '*:*'));
-
-    const encodedQuery = query ? `?${encodeURIComponent(query)}` : '';
-    const navigateToPartitionedView = (partKey) => {
-      const baseUrl = FauxtonAPI.urls('partitioned_search', 'app', encodeURIComponent(databaseName),
-        encodeURIComponent(partKey), encodeURIComponent(ddocName));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(indexName) + encodedQuery);
-    };
-    const navigateToGlobalView = () => {
-      const baseUrl = FauxtonAPI.urls('search', 'app', encodeURIComponent(databaseName), encodeURIComponent(ddocName));
-      FauxtonAPI.navigate('#/' + baseUrl + encodeURIComponent(indexName) + encodedQuery);
-    };
-    return <Layout
-      section={'search'}
-      dropDownLinks={dropDownLinks}
-      endpoint={endpointUrl}
-      docURL={FauxtonAPI.constants.DOC_URLS.SEARCH_INDEXES}
-      database={this.database}
-      indexName={indexName}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-      onPartitionKeySelected={navigateToPartitionedView}
-      onGlobalModeSelected={navigateToGlobalView}
-      globalMode={partitionKey === ''}
-    />;
-  },
-
-  editNoPartition: function (database, ddocName, indexName) {
-    return this.edit(database, '', ddocName, indexName);
-  },
-
-  edit: function (database, partitionKey, ddocName, indexName) {
-    const selectedNavItem = new SidebarItemSelection('designDoc', {
-      designDocName: ddocName,
-      designDocSection: 'Search Indexes',
-      indexName: indexName
-    });
-    SidebarActions.dispatchExpandSelectedItem(selectedNavItem);
-
-    SearchActions.dispatchEditSearchIndex({
-      ddocID: '_design/' + ddocName,
-      database: this.database,
-      indexName: indexName,
-      designDocs: this.data.designDocs
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(database);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <Layout
-      section={'edit'}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      indexName={indexName}
-      ddocName={ddocName}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  createNoPartition: function (database, ddoc) {
-    return this.create(database, '', ddoc);
-  },
-
-  create: function (database, partitionKey, ddoc) {
-    const selectedNavItem = new SidebarItemSelection('');
-
-    SearchActions.dispatchInitNewSearchIndex({
-      database: this.database,
-      designDocs: this.data.designDocs,
-      defaultDDoc: ddoc,
-    });
-    DatabasesActions.fetchSelectedDatabaseInfo(database);
-
-    const dropDownLinks = this.getCrumbs(this.database);
-    return <Layout
-      section={'create'}
-      dropDownLinks={dropDownLinks}
-      database={this.database}
-      designDocs={this.data.designDocs}
-      ddoc={ddoc}
-      selectedNavItem={selectedNavItem}
-      partitionKey={partitionKey}
-    />;
-  },
-
-  getCrumbs: function (database) {
-    return [
-      { type: "back", link: "/_all_dbs"},
-      { name: database.id }
-    ];
-  }
-});
-
-Resources.RouteObjects = [SearchRouteObject];
-
-export default Resources;
diff --git a/app/addons/search/tests/nightwatch/cloneSearchIndex.js b/app/addons/search/tests/nightwatch/cloneSearchIndex.js
deleted file mode 100644
index afb5468..0000000
--- a/app/addons/search/tests/nightwatch/cloneSearchIndex.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-  '@tags': ['search'],
-  'Clones a search index': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .createDatabase(newDatabaseName)
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // create a search index
-      .waitForElementPresent('#new-design-docs-button', waitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-
-      .clickWhenVisible('.index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-files-o', waitTime, true)
-      .waitForElementVisible('#new-index-name', waitTime, true)
-      .setValue('#new-index-name', 'cloned-search-index')
-      .clickWhenVisible('.clone-index-modal .btn-primary', waitTime, true)
-
-      // now wait for the sidebar to be updated with the new view
-      .waitForElementVisible('#test1_cloned-search-index', waitTime, true)
-      .end();
-  }
-};
diff --git a/app/addons/search/tests/nightwatch/createNewSearch.js b/app/addons/search/tests/nightwatch/createNewSearch.js
deleted file mode 100644
index 3bbec97..0000000
--- a/app/addons/search/tests/nightwatch/createNewSearch.js
+++ /dev/null
@@ -1,128 +0,0 @@
-// Licensed 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.
-module.exports = {
-  '@tags': ['search'],
-  'Creates new Search index for Dash': function (client) {
-    /*jshint multistr: true */
-
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    var searchFunctionString = function (append) {
-      return 'function (doc) {'                  +
-        'index("name", doc.name ' + append + ');' +
-        '}';
-    };
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('.faux-header__doc-header-title', client.globals.maxWaitTime, true)
-
-      .clickWhenVisible('.styled-select select')
-      .keys(['_design/keyview', '\uE006'])
-
-      .clearValue('#search-name')
-      .setValue('#search-name', 'fancy_search')
-      .execute('\
-        var editor = ace.edit("search-function");\
-        editor.getSession().setValue("' + searchFunctionString(0) + '");\
-      ')
-
-      .clickWhenVisible('#save-index')
-      .waitForElementPresent('#keyview_fancy_search', client.globals.maxWaitTime, false)
-      .end();
-  },
-
-  'Creating a new index has a clean slate': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // 1. create a search index in _design/keyview design doc
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .clickWhenVisible('.styled-select select')
-      .keys(['_design/keyview', '\uE006'])
-
-      .clearValue('#search-name')
-      .setValue('#search-name', 'clean-slate-test')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-
-      // 2. create a new search index. The "Save to design doc" dropdown should default to New Document
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('.styled-select select', client.globals.maxWaitTime, false)
-      .assert.value('.styled-select select', 'new-doc')
-      .end();
-  },
-
-  'Adding two indexes in a row does not add multiple indexes': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .createDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // 1. create a search index in _design/test1
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', client.globals.maxWaitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-
-      // 2. create a second index in _design/test2
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', client.globals.maxWaitTime, false)
-      .setValue('#new-ddoc', 'test2')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test2-index')
-      .clickWhenVisible('#save-index')
-
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-
-      // 3. confirm that the nav bar shows ONLY one search index each:
-      //  _design/test1 has the single _design/test1-index
-      //  _design/test2 has the single _design/test2-index
-      .waitForElementPresent('#test1_test1-index', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('#test1_test2-index', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('#test2_test1-index', client.globals.maxWaitTime, false)
-      .waitForElementPresent('#test2_test2-index', client.globals.maxWaitTime, false)
-
-      .end();
-  }
-};
diff --git a/app/addons/search/tests/nightwatch/deleteSearchIndex.js b/app/addons/search/tests/nightwatch/deleteSearchIndex.js
deleted file mode 100644
index f25d583..0000000
--- a/app/addons/search/tests/nightwatch/deleteSearchIndex.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed 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.
-
-module.exports = {
-  '@tags': ['search'],
-  'Deletes a search index': function (client) {
-    var newDatabaseName = client.globals.testDatabaseName,
-        waitTime = client.globals.maxWaitTime,
-        baseUrl = client.options.launch_url;
-
-    client
-      .loginToGUI()
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // create a search index
-      .waitForElementPresent('#new-design-docs-button', waitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .waitForElementVisible('#new-ddoc', waitTime, false)
-      .setValue('#new-ddoc', 'test1')
-      .clearValue('#search-name')
-      .setValue('#search-name', 'test1-index')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // confirm search index appears in sidebar
-      .waitForElementVisible('#test1_test1-index', waitTime, true)
-
-      // now delete it and confirm that the entire design doc gets removed (because it's the last index)
-      .clickWhenVisible('.index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-
-      // now wait for the sidebar to have removed the design doc
-      .waitForElementNotPresent('#testdesigndoc', waitTime, true)
-      .end();
-  },
-
-  'Deleting view when design doc has search index does not remove design doc': function (client) {
-    var waitTime = client.globals.maxWaitTime,
-        newDatabaseName = client.globals.testDatabaseName,
-        baseUrl = client.options.launch_url;
-
-    client
-      // this creates a view
-      .populateDatabase(newDatabaseName)
-      .loginToGUI()
-
-      // now create a search index
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/new_search/testdesigndoc')
-      .waitForElementVisible('#save-index', waitTime, false)
-      .clearValue('#search-name')
-      .setValue('#search-name', 'search-index1')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', waitTime, false)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-      .waitForElementPresent('.tableview-checkbox-cell', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', waitTime, false)
-
-      // now delete the search index. Since there's a view in this design doc, the design doc should not be removed
-      .clickWhenVisible('#nav-design-function-testdesigndocindexes .index-list li span', waitTime, true)
-      .clickWhenVisible('.popover-content .fonticon-trash', waitTime, true)
-      .waitForElementVisible('div.confirmation-modal', waitTime, false)
-      .clickWhenVisible('.confirmation-modal button.btn.btn-primary')
-      .waitForElementNotPresent('.confirmation-modal button.btn.btn-primary', waitTime, true)
-
-      // just assert the search indexes section has been removed, but the design doc still exists
-      .waitForElementNotPresent('#nav-design-function-testdesigndocindexes', waitTime, true)
-      .waitForElementPresent('#design-doc-menu-testdesigndoc', waitTime, true)
-
-      .end();
-  }
-
-};
diff --git a/app/addons/search/tests/nightwatch/searchPageApiBar.js b/app/addons/search/tests/nightwatch/searchPageApiBar.js
deleted file mode 100644
index d23ed8c..0000000
--- a/app/addons/search/tests/nightwatch/searchPageApiBar.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed 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.
-module.exports = {
-  '@tags': ['search'],
-  'Check API Bar is present/hidden on appropriate page and is encoded': function (client) {
-    const newDatabaseName = client.globals.testDatabaseName,
-          baseUrl = client.options.launch_url;
-
-    const searchStr = "class:bird";
-    const searchStrEncoded = encodeURIComponent(searchStr);
-    const fullURL = baseUrl + '/' + newDatabaseName + '/_design/keyview/_search/api-bar-test?q=' + searchStrEncoded;
-
-    client
-      .loginToGUI()
-      .populateDatabase(newDatabaseName)
-      .url(baseUrl + '/#/database/' + newDatabaseName + '/_all_docs')
-
-      // start creating a search index in _design/keyview design doc
-      .waitForElementPresent('#new-design-docs-button', client.globals.maxWaitTime, false)
-      .click('#new-design-docs-button a')
-      .click('#new-design-docs-button a[href="#/database/' + newDatabaseName + '/new_search"]')
-      .clickWhenVisible('.styled-select select')
-
-      // confirm there's no API URL field on the create index page
-      .pause(5000)
-      .assert.not.elementPresent('.faux__jsonlink')
-
-      // now create the rest of the index
-      .keys(['_design/keyview', '\uE006'])
-      .clearValue('#search-name')
-      .setValue('#search-name', 'api-bar-test')
-      .clickWhenVisible('#save-index')
-      .waitForElementVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-
-      // confirm the API URL field now shows up (we're on the edit search index page now)
-      .assert.elementPresent('.faux__jsonlink')
-
-      // now enter a search and confirm it's properly encoded in the api URL bar
-      .setValue('#search-index-preview-form input', searchStr)
-      .clickWhenVisible('#search-index-preview-form button')
-
-      .waitForElementNotVisible('.Toastify__toast-container .Toastify__toast--success', client.globals.maxWaitTime, false)
-      .waitForElementNotPresent('.loading-lines', client.globals.maxWaitTime, false)
-      .assert.attributeContains('.faux__jsonlink-link', 'href', fullURL)
-      .end();
-  }
-};
diff --git a/app/addons/setup/__tests__/helpers.test.js b/app/addons/setup/__tests__/helpers.test.js
deleted file mode 100644
index 30b8bdb..0000000
--- a/app/addons/setup/__tests__/helpers.test.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import {isInvalid} from '../helpers';
-
-describe('Setup - Helpers', () => {
-
-  const validData = {
-    username: 'foo',
-    password: 'bar',
-    bind_address: '0.0.0.0',
-    singlenode: false,
-    port: 5984,
-    nodeCount: 3
-  };
-
-  describe('isInvalid', () => {
-
-    it('should return an error if no username is define', () => {
-      let data = Object.assign({}, validData);
-      data.username = '';
-      expect(isInvalid(data)).toBe('Admin name is required');
-    });
-
-    it('should return an error if password not set', () => {
-      let data = Object.assign({}, validData);
-      data.password = '';
-      expect(isInvalid(data)).toBe('Admin password is required');
-    });
-
-    it('should return an error if bind address is 127.0.0.1', () => {
-      let data = Object.assign({}, validData);
-      data.bind_address = '127.0.0.1';
-      expect(isInvalid(data)).toBe('Bind address can not be 127.0.0.1');
-    });
-
-    it('should return error if port is not a number', () => {
-      let data = Object.assign({}, validData);
-      data.port = 'foo';
-      expect(isInvalid(data)).toBe('Bind port must be a number');
-    });
-
-    it('should return error if node count is not a number', () => {
-
-      let data = Object.assign({}, validData);
-      data.nodeCount = 'foo';
-      expect(isInvalid(data)).toBe('Node count must be a number');
-    });
-
-    it('should return error if node counter is lower than 1', () => {
-      let data = Object.assign({}, validData);
-      data.nodeCount = 0;
-      expect(isInvalid(data)).toBe('Node count must be >= 1');
-    });
-
-    it('should return false if valid', () => {
-      expect(isInvalid(validData)).toBe(false);
-    });
-
-  });
-});
diff --git a/app/addons/setup/actions.js b/app/addons/setup/actions.js
deleted file mode 100644
index 6a05b5d..0000000
--- a/app/addons/setup/actions.js
+++ /dev/null
@@ -1,309 +0,0 @@
-// Licensed 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.
-import FauxtonAPI from "../../core/api";
-import {isInvalid} from "./helpers";
-import {
-  SETUP_ADD_NODE_TO_LIST,
-  SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-  SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-  SETUP_NODE_COUNT,
-  SETUP_PORT_ADDITIONAL_NODE,
-  SETUP_PORT_FOR_SINGLE_NODE,
-  SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-  SETUP_RESET_ADDITIONAL_NODE,
-  SETUP_SET_CLUSTERSTATUS,
-  SETUP_SET_PASSWORD,
-  SETUP_SET_USERNAME
-} from "./actiontypes";
-import {get, post} from '../../core/ajax';
-import Api from "../auth/api";
-
-
-/**
- * @typedef {Object} CredentialObject
- * @param {string} username The username
- * @param {string} password The password
- */
-
-
-/**
- * Public functions
- */
-
-const showError = (msg, error) => {
-  const errorMsg = error ? ' Error:' + error : '';
-  FauxtonAPI.addNotification({
-    msg: msg + errorMsg,
-    type: 'error',
-    fade: false,
-    clear: true
-  });
-  return;
-};
-
-
-export const getClusterStateFromCouch = () => async dispatch => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const json = await get(baseUrl);
-  dispatch({
-    type: SETUP_SET_CLUSTERSTATUS,
-    options: {
-      state: json.state
-    }
-  });
-};
-
-export const finishClusterSetup = message => async() => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const body = {action: 'finish_cluster'};
-  try {
-    const response = await post(baseUrl, body, {raw: true});
-    if (response.ok) {
-      FauxtonAPI.addNotification({
-        msg: message,
-        type: 'success',
-        fade: false,
-        clear: true
-      });
-      FauxtonAPI.navigate('#setup/finish');
-    } else {
-      const json = await response.json();
-      showError('The cluster is already finished', json.reason);
-    }
-  } catch (err) {
-    showError('There was an error. Please check your setup and try again.', err);
-  }
-};
-
-export const setupSingleNode = (credentials, setupNode) => async() => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const setupAttrs = {
-    action: 'enable_single_node',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: setupNode.bindAddress,
-    port: setupNode.port,
-    singlenode: true
-  };
-
-  const attrsAreInvalid = isInvalid(setupAttrs);
-
-  if (attrsAreInvalid) {
-    return showError(attrsAreInvalid);
-  }
-
-  try {
-    const response = await post(baseUrl, setupAttrs, {raw: true});
-    if (!response.ok) {
-      const json = await response.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-
-    await Api.login({name: credentials.username, password: credentials.password});
-    FauxtonAPI.addNotification({
-      msg: 'Single node setup successful.',
-      type: 'success',
-      fade: false,
-      clear: true
-    });
-    FauxtonAPI.navigate('#setup/finish');
-  } catch (error) {
-    showError("The cluster has not been setuped successfully.", error);
-  }
-};
-
-/**
- * Add a node to the current cluster configuration
- * 1. Enable cluster for the current node
- * 2. Enable cluster for the remote node
- * 3. Add the remote node
- * @param isOrWasAdminParty
- * @param credentials
- * @param setupNode
- * @param additionalNode
- */
-export const addNode = (isOrWasAdminParty, credentials, setupNode, additionalNode) => async dispatch => {
-  const baseUrl = FauxtonAPI.urls('cluster_setup', 'server');
-  const enableSetupData = {
-    action: 'enable_cluster',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: setupNode.bindAddress,
-    port: setupNode.port,
-    node_count: setupNode.nodeCount,
-    singlenode: false
-  };
-
-  const attrsAreInvalid = isInvalid({
-    username: credentials.username,
-    password: credentials.password,
-    ...setupNode
-  });
-
-  if (attrsAreInvalid) {
-    return showError(attrsAreInvalid);
-  }
-
-  let enableNodeData = {
-    action: 'enable_cluster',
-    username: credentials.username,
-    password: credentials.password,
-    bind_address: additionalNode.bindAddress,
-    port: additionalNode.port,
-    node_count: setupNode.nodeCount,
-    remote_node: additionalNode.remoteAddress,
-    remote_current_user: credentials.username,
-    remote_current_password: credentials.password
-  };
-
-  if (isOrWasAdminParty) {
-    delete enableNodeData.remote_current_user;
-    delete enableNodeData.remote_current_password;
-  }
-
-  const additionalNodeDataIsInvalid = isInvalid(enableNodeData);
-
-  if (additionalNodeDataIsInvalid) {
-    return showError(additionalNodeDataIsInvalid);
-  }
-
-  const continueSetup = async() => {
-    const addNodeData = {
-      action: 'add_node',
-      username: credentials.username,
-      password: credentials.password,
-      host: additionalNode.remoteAddress,
-      port: additionalNode.port,
-      singlenode: false
-    };
-
-    //Enable the remote node
-    const enableRemoteNodeResponse = await post(baseUrl, enableNodeData, {raw: true});
-
-    if (!enableRemoteNodeResponse.ok) {
-      const json = await enableRemoteNodeResponse.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-    const addNodeResponse = await post(baseUrl, addNodeData, {raw: true});
-
-    if (!addNodeResponse.ok) {
-      const json = await addNodeResponse.json();
-      const error = json.reason ? json.reason : json.error;
-      return showError(error);
-    }
-
-    dispatch({
-      type: SETUP_ADD_NODE_TO_LIST,
-      options: {
-        value: {
-          port: additionalNode.port,
-          remoteAddress: additionalNode.remoteAddress
-        }
-      }
-    });
-    FauxtonAPI.addNotification({
-      msg: 'Added node',
-      type: 'success',
-      fade: false,
-      clear: true
-    });
-  };
-  try {
-    await post(baseUrl, enableSetupData, {raw: true});
-    await Api.login({name: credentials.username, password: credentials.password});
-    await continueSetup();
-  } catch (err) {
-    showError('An error occured while adding the node.', err);
-  }
-};
-
-export const resetAddtionalNodeForm = () => {
-  return {
-    type: SETUP_RESET_ADDITIONAL_NODE,
-  };
-};
-
-export const alterPortAdditionalNode = value => {
-  return {
-    type: SETUP_PORT_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const alterRemoteAddressAdditionalNode = value => {
-  return {
-    type: SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const alterBindAddressAdditionalNode = value => {
-  return {
-    type: SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setUsername = value => {
-  return {
-    type: SETUP_SET_USERNAME,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setPassword = value => {
-  return {
-    type: SETUP_SET_PASSWORD,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setPortForSetupNode = value => {
-  return {
-    type: SETUP_PORT_FOR_SINGLE_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setBindAddressForSetupNode = value => {
-  return {
-    type: SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-    options: {
-      value: value
-    }
-  };
-};
-
-export const setNodeCount = value => {
-  return {
-    type: SETUP_NODE_COUNT,
-    options: {
-      value: value
-    }
-  };
-};
-
-
diff --git a/app/addons/setup/actiontypes.js b/app/addons/setup/actiontypes.js
deleted file mode 100644
index cf94fd9..0000000
--- a/app/addons/setup/actiontypes.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-export const SETUP_SET_CLUSTERSTATUS = 'SETUP_SET_CLUSTERSTATUS';
-export const SETUP_SET_USERNAME = 'SETUP_SET_USERNAME';
-export const SETUP_SET_PASSWORD = 'SETUP_SET_PASSWORD';
-export const SETUP_BIND_ADDRESS_FOR_SINGLE_NODE = 'SETUP_BIND_ADDRESS_FOR_SINGLE_NODE';
-export const SETUP_PORT_FOR_SINGLE_NODE = 'SETUP_PORT_FOR_SINGLE_NODE';
-export const SETUP_PORT_ADDITIONAL_NODE = 'SETUP_PORT_ADDITIONAL_NODE';
-export const SETUP_BIND_ADDRESS_ADDITIONAL_NODE = 'SETUP_BIND_ADDRESS_ADDITIONAL_NODE';
-export const SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE = 'SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE';
-export const SETUP_RESET_ADDITIONAL_NODE = 'SETUP_RESET_ADDITIONAL_NODE';
-export const SETUP_ADD_NODE_TO_LIST = 'SETUP_ADD_NODE_TO_LIST';
-export const SETUP_NODE_COUNT = 'SETUP_NODE_COUNT';
diff --git a/app/addons/setup/assets/less/setup.less b/app/addons/setup/assets/less/setup.less
deleted file mode 100644
index 421805c..0000000
--- a/app/addons/setup/assets/less/setup.less
+++ /dev/null
@@ -1,62 +0,0 @@
-// Licensed 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.
-
-.setup-screen {
-  padding: 20px;
-  button {
-    margin-top: 20px;
-  }
-  #setup-btn-no-thanks {
-    margin-left: 30px;
-  }
-}
-
-.setup-nodes {
-  input {
-    margin-right: 15px;
-  }
-
-  h2 {
-    font-size: 16px;
-    line-height: normal;
-    margin: 10px 0;
-  }
-
-  .node-item {
-    width: 400px;
-    a {
-      margin-left: 10px;
-    }
-  }
-
-  .input-remote-node {
-    width: 50%;
-  }
-
-  .centered {
-    text-align: center;
-  }
-
-  .setup-finish,
-  .setup-nodelist,
-  .setup-opt-settings,
-  .setup-creds,
-  .setup-port,
-  .setup-add-button {
-    margin-top: 30px;
-  }
-
-  .setup-finish {
-    padding-bottom: 40px;
-  }
-
-}
diff --git a/app/addons/setup/base.js b/app/addons/setup/base.js
deleted file mode 100644
index a457c3f..0000000
--- a/app/addons/setup/base.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import app from '../../app';
-import Setup from "./route";
-import reducers from './reducers';
-import "./assets/less/setup.less";
-Setup.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Setup',
-    href: "#/setup",
-    icon: 'fonticon-wrench'
-  });
-};
-
-FauxtonAPI.addReducers({
-  setup: reducers
-});
-
-FauxtonAPI.registerUrls('cluster_setup', {
-  server: () => app.host + '/_cluster_setup',
-  app: () => '/_cluster_setup',
-  apiurl: () => window.location.origin + "/_cluster_setup"
-});
-
-export default Setup;
diff --git a/app/addons/setup/components/ConfiguredScreen.js b/app/addons/setup/components/ConfiguredScreen.js
deleted file mode 100644
index 0e7700b..0000000
--- a/app/addons/setup/components/ConfiguredScreen.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import PropTypes from 'prop-types';
-import app from "../../../app";
-
-
-export default class ClusterConfiguredScreen extends React.Component {
-  getNodeType = () => {
-    const {clusterState} = this.props;
-    if (clusterState === 'cluster_finished') {
-      return 'clustered';
-    } else if (clusterState === 'single_node_enabled') {
-      return 'single';
-    }
-    return 'unknown state';
-
-  };
-
-  render() {
-    const nodetype = this.getNodeType();
-
-    return (
-      <div className="setup-screen">
-        {app.i18n.en_US['couchdb-productname']} is configured for production usage as a {nodetype} node!
-        <br/>
-        <br/>
-          Do you want to <a href="#replication">replicate data</a>?
-      </div>
-    );
-  }
-}
-
-ClusterConfiguredScreen.propTypes = {
-  clusterState: PropTypes.string
-};
diff --git a/app/addons/setup/components/CurrentAdminPassword.js b/app/addons/setup/components/CurrentAdminPassword.js
deleted file mode 100644
index 2860013..0000000
--- a/app/addons/setup/components/CurrentAdminPassword.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-
-export default class SetupCurrentAdminPassword extends React.Component {
-  render() {
-    let text = 'Specify your Admin credentials';
-
-    if (this.props.isAdminParty) {
-      text = 'Create Admin credentials.';
-    }
-
-    return (
-      <div className="setup-creds">
-        <div>
-          <p>{text}</p>
-        </div>
-        <input
-          className="setup-username"
-          onChange={this.props.onAlterUsername}
-          placeholder="Username"
-          value={this.props.username}
-          type="text"/>
-        <input
-          className="setup-password"
-          onChange={this.props.onAlterPassword}
-          placeholder="Password"
-          value={this.props.password}
-          type="password"/>
-      </div>
-    );
-  }
-}
-
-SetupCurrentAdminPassword.propTypes = {
-  onAlterUsername: PropTypes.func.isRequired,
-  onAlterPassword: PropTypes.func.isRequired,
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  isAdminParty: PropTypes.bool
-};
diff --git a/app/addons/setup/components/FirstStepController.js b/app/addons/setup/components/FirstStepController.js
deleted file mode 100644
index 279f382..0000000
--- a/app/addons/setup/components/FirstStepController.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import app from "../../../app";
-import PropTypes from 'prop-types';
-import FauxtonAPI from "../../../core/api";
-import ClusterConfiguredScreen from "./ConfiguredScreen";
-import ReactComponents from "../../components/react-components";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class FirstStepController extends React.Component {
-
-  UNSAFE_componentWillMount() {
-    this.props.getClusterState();
-  }
-
-  render() {
-    if (this.props.clusterState === 'cluster_finished' ||
-        this.props.clusterState === 'single_node_enabled') {
-      return (<ClusterConfiguredScreen {...this.props}/>);
-    }
-
-    return (
-      <div className="setup-screen">
-        <h2>Welcome to {app.i18n.en_US['couchdb-productname']}!</h2>
-        <p>
-            This wizard should be run directly on the node, rather than through a load-balancer.
-        </p>
-        <p>
-            You can configure a single node, or a multi-node CouchDB installation.
-        </p>
-        <div>
-          <ConfirmButton
-            onClick={this.redirectToMultiNodeSetup}
-            showIcon={false}
-            text="Configure a Cluster"/>
-          <ConfirmButton
-            onClick={this.redirectToSingleNodeSetup}
-            showIcon={false}
-            id="setup-btn-no-thanks"
-            text="Configure a Single Node"/>
-        </div>
-      </div>
-    );
-  }
-
-  redirectToSingleNodeSetup = (e) => {
-    e.preventDefault();
-    FauxtonAPI.navigate('#setup/singlenode');
-  };
-
-  redirectToMultiNodeSetup = (e) => {
-    e.preventDefault();
-    FauxtonAPI.navigate('#setup/multinode');
-  };
-
-}
-
-FirstStepController.propTypes = {
-  clusterState: PropTypes.string
-};
diff --git a/app/addons/setup/components/MultipleNodeController.js b/app/addons/setup/components/MultipleNodeController.js
deleted file mode 100644
index 17482f9..0000000
--- a/app/addons/setup/components/MultipleNodeController.js
+++ /dev/null
@@ -1,157 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import ReactComponents from "../../components/react-components";
-import CurrentAdminPassword from "./CurrentAdminPassword";
-import OptionalSettings from "./OptionalSettings";
-import NodeCountSetting from "./NodeCountSetting";
-
-import {getIsAdminParty} from '../reducers';
-
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class MultipleNodesController extends React.Component {
-
-  componentDidMount() {
-    this.isAdminParty = getIsAdminParty();
-  }
-
-  getNodeList = () => {
-    return this.props.nodeList.map((el, i) => {
-      return (
-        <div key={i} className="node-item">
-          {el.remoteAddress}:{el.port}
-        </div>
-      );
-    });
-  };
-
-  _addNode = () => {
-    const {username, password, setupNode, additionalNode} = this.props;
-    this.props.addNode(this.isAdminParty, {username, password}, setupNode, additionalNode);
-  };
-
-  _alterPortAdditionalNode = (e) => {
-    this.props.alterPortAdditionalNode(e.target.value);
-  };
-
-  _alterBindAddressAdditionalNode = (e) => {
-    this.props.alterBindAddressAdditionalNode(e.target.value);
-  };
-
-  _alterRemoteAddressAdditionalNode = (e) => {
-    this.props.alterRemoteAddressAdditionalNode(e.target.value);
-  };
-
-  _alterUsername = (e) => {
-    this.props.alterUsername(e.target.value);
-  };
-
-  _alterPassword = (e) => {
-    this.props.alterPassword(e.target.value);
-  };
-
-  _alterBindAddressSetupNode = (e) => {
-    this.props.alterBindAddressForSetupNode(e.target.value);
-  };
-
-  _alterPortSetupNode = (e) => {
-    this.props.alterPortForSetupNode(e.target.value);
-  };
-
-  _alterNodeCount = (e) => {
-    this.props.alterNodeCount(e.target.value);
-  };
-
-  _finishClusterSetup = () => {
-    this.props.finishClusterSetup('CouchDB Cluster set up!');
-  };
-
-  render() {
-    const {setupNode, additionalNode} = this.props;
-    return (
-      <div className="setup-nodes">
-          Setup your initial base-node, afterwards add the other nodes that you want to add
-        <div className="setup-setupnode-section">
-          <CurrentAdminPassword
-            {...this.props}
-            onAlterUsername={this._alterUsername}
-            onAlterPassword={this._alterPassword}/>
-
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this._alterPortSetupNode}
-            onAlterBindAddress={this._alterBindAddressSetupNode}
-            ip={setupNode.bindAddress}
-            port={setupNode.port}/>
-          <NodeCountSetting
-            {...this.props}
-            onAlterNodeCount={this._alterNodeCount}
-            nodeCount={setupNode.nodeCount}/>
-        </div>
-        <hr/>
-        <div className="setup-add-nodes-section">
-          <h2>Add Nodes to the Cluster</h2>
-          <p>Remote host</p>
-          <input
-            value={additionalNode.remoteAddress}
-            onChange={this._alterRemoteAddressAdditionalNode}
-            className="input-remote-node"
-            type="text"
-            placeholder="IP Address"/>
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this._alterPortAdditionalNode}
-            onAlterBindAddress={this._alterBindAddressAdditionalNode}
-            ip={additionalNode.bindAddress} port={additionalNode.port}/>
-
-          <div className="setup-add-button">
-            <ConfirmButton
-              onClick={this._addNode}
-              showIcon={false}
-              id="setup-btn-no-thanks"
-              text="Add Node"/>
-          </div>
-        </div>
-        <div className="setup-nodelist">
-          {this.getNodeList()}
-        </div>
-
-        <div className="centered setup-finish">
-          <ConfirmButton
-            onClick={this._finishClusterSetup}
-            showIcon={false}
-            text="Configure Cluster"/>
-        </div>
-      </div>
-    );
-  }
-}
-
-MultipleNodesController.propTypes = {
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  nodeList: PropTypes.array.isRequired,
-  isAdminParty: PropTypes.bool.isRequired,
-  setupNode: PropTypes.shape({
-    bindAddress: PropTypes.string.isRequired,
-    port: PropTypes.number.isRequired,
-    nodeCount: PropTypes.number.isRequired
-  }).isRequired,
-  additionalNode: PropTypes.shape({
-    bindAddress: PropTypes.string.isRequired,
-    port: PropTypes.number.isRequired,
-    remoteAddress: PropTypes.string.isRequired
-  }).isRequired
-};
diff --git a/app/addons/setup/components/NodeCountSetting.js b/app/addons/setup/components/NodeCountSetting.js
deleted file mode 100644
index 7be1e5a..0000000
--- a/app/addons/setup/components/NodeCountSetting.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-
-export default class NodeCountSetting extends React.Component {
-
-  handleNodeCountChange = (event) => {
-    this.props.onAlterNodeCount(event);
-  };
-
-  render() {
-    return (
-      <div className="setup-node-count">
-        <p>Number of nodes to be added to the cluster (including this one)</p>
-        <input
-          className="setup-input-nodecount"
-          value={this.props.nodeCount}
-          onChange={this.handleNodeCountChange}
-          placeholder="Value of cluster n"
-          type="text"/>
-      </div>
-    );
-  }
-}
-
-NodeCountSetting.propTypes = {
-  onAlterNodeCount: PropTypes.func.isRequired,
-  nodeCount: PropTypes.number.isRequired
-};
diff --git a/app/addons/setup/components/OptionalSettings.js b/app/addons/setup/components/OptionalSettings.js
deleted file mode 100644
index 1efebb9..0000000
--- a/app/addons/setup/components/OptionalSettings.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed 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.
-
-
-import React from 'react';
-import PropTypes from 'prop-types';
-
-export default class OptionalSettings extends React.Component {
-  handleIpChange = (event) => {
-    this.props.onAlterBindAddress(event);
-  };
-
-  handlePortChange = (event) => {
-    this.props.onAlterPort(event);
-  };
-
-  render() {
-    return (
-      <div className="setup-opt-settings">
-        <p>Bind address the node will listen on</p>
-        <input
-          className="setup-input-ip"
-          value={this.props.ip}
-          onChange={this.handleIpChange}
-          placeholder="IP Address"
-          type="text"/>
-
-        <div className="setup-port">
-          <p>Port that the node will use</p>
-          <input
-            className="setup-input-port"
-            value={this.props.port}
-            onChange={this.handlePortChange}
-            type="text"/>
-        </div>
-      </div>
-    );
-  }
-}
-
-OptionalSettings.propTypes = {
-  ip: PropTypes.string.isRequired,
-  port: PropTypes.number.isRequired,
-  onAlterBindAddress: PropTypes.func.isRequired,
-  onAlterPort: PropTypes.func.isRequired
-};
diff --git a/app/addons/setup/components/SingleNodeController.js b/app/addons/setup/components/SingleNodeController.js
deleted file mode 100644
index 29cbcfa..0000000
--- a/app/addons/setup/components/SingleNodeController.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// Licensed 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.
-import React from 'react';
-import PropTypes from 'prop-types';
-import ReactComponents from "../../components/react-components";
-import CurrentAdminPassword from "./CurrentAdminPassword";
-import OptionalSettings from "./OptionalSettings";
-
-const ConfirmButton = ReactComponents.ConfirmButton;
-
-export default class SingleNodeController extends React.Component {
-
-  constructor() {
-    super();
-    this.finishSingleNode = this.finishSingleNode.bind(this);
-    this.onChangeUsername = this.onChangeUsername.bind(this);
-    this.onChangePassword = this.onChangePassword.bind(this);
-    this.onChangeBindAddress = this.onChangeBindAddress.bind(this);
-    this.onChangePort = this.onChangePort.bind(this);
-  }
-
-  onChangeUsername = e => this.props.alterUsername(e.target.value);
-
-  onChangePassword = e => this.props.alterPassword(e.target.value);
-
-  onChangeBindAddress = e => this.props.alterBindAddress(e.target.value);
-
-  onChangePort = e => this.props.alterPort(e.target.value);
-
-  render() {
-    return (
-      <div className="setup-nodes">
-        <div className="setup-setupnode-section">
-          <CurrentAdminPassword
-            {...this.props}
-            onAlterUsername={this.onChangeUsername}
-            onAlterPassword={this.onChangePassword}/>
-          <OptionalSettings
-            {...this.props}
-            onAlterPort={this.onChangePort}
-            onAlterBindAddress={this.onChangeBindAddress}
-            ip={this.props.bindAddress}
-            port={this.props.port}/>
-          <ConfirmButton
-            {...this.props}
-            onClick={this.finishSingleNode}
-            text="Configure Node"/>
-        </div>
-      </div>
-    );
-  }
-
-  finishSingleNode = (e) => {
-    e.preventDefault();
-    const {username, password, port, bindAddress} = this.props;
-    const credentials = {username, password};
-    const setupNode = {
-      port,
-      bindAddress,
-    };
-    this.props.setupSingleNode(credentials, setupNode);
-  };
-}
-
-SingleNodeController.propTypes = {
-  username: PropTypes.string.isRequired,
-  password: PropTypes.string.isRequired,
-  port: PropTypes.number.isRequired,
-  bindAddress: PropTypes.string.isRequired,
-  isAdminParty: PropTypes.bool.isRequired
-};
diff --git a/app/addons/setup/container/ConfiguredSceenContainer.js b/app/addons/setup/container/ConfiguredSceenContainer.js
deleted file mode 100644
index 7f61f53..0000000
--- a/app/addons/setup/container/ConfiguredSceenContainer.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed 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.
-import {connect} from 'react-redux';
-import ConfiguredScreen from '../components/ConfiguredScreen';
-import {getClusterState} from '../reducers';
-
-const mapStateToProps = ({setup}) => {
-  return {
-    clusterState: getClusterState(setup),
-  };
-};
-
-export default connect(
-  mapStateToProps
-)(ConfiguredScreen);
diff --git a/app/addons/setup/container/FirstStepContainer.js b/app/addons/setup/container/FirstStepContainer.js
deleted file mode 100644
index 2d8a4ee..0000000
--- a/app/addons/setup/container/FirstStepContainer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed 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.
-import {connect} from 'react-redux';
-import FirstStepController from '../components/FirstStepController';
-import {getClusterState} from '../reducers';
-import {getClusterStateFromCouch} from '../actions';
-
-const mapStateToProps = ({setup}) => {
-  return {
-    clusterState: getClusterState(setup),
-  };
-};
-
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    getClusterState() {
-      dispatch(getClusterStateFromCouch());
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(FirstStepController);
diff --git a/app/addons/setup/container/MultipleNodeContainer.js b/app/addons/setup/container/MultipleNodeContainer.js
deleted file mode 100644
index afa05e7..0000000
--- a/app/addons/setup/container/MultipleNodeContainer.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed 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.
-import {connect} from 'react-redux';
-import MultipleNodeController from '../components/MultipleNodeController';
-import {getNodeList, getIsAdminParty, getAdditionalNode, getUsername, getPassword, getSetupNode} from '../reducers';
-import {
-  addNode,
-  alterBindAddressAdditionalNode, alterPortAdditionalNode, alterRemoteAddressAdditionalNode, finishClusterSetup,
-  setBindAddressForSetupNode, setNodeCount, setPassword,
-  setPortForSetupNode, setUsername
-} from "../actions";
-
-const mapStateToProps = ({setup}) => {
-  return {
-    nodeList: getNodeList(setup),
-    isAdminParty: getIsAdminParty(setup),
-    setupNode: getSetupNode(setup),
-    username: getUsername(setup),
-    password: getPassword(setup),
-    additionalNode: getAdditionalNode(setup)
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    addNode(isAdminParty, credentials, setupNode, additionalNode) {
-      dispatch(addNode(isAdminParty, credentials, setupNode, additionalNode));
-    },
-    alterPortAdditionalNode(port) {
-      dispatch(alterPortAdditionalNode(port));
-    },
-    alterBindAddressAdditionalNode(bindAddress) {
-      dispatch(alterBindAddressAdditionalNode(bindAddress));
-    },
-    alterRemoteAddressAdditionalNode(remoteAddress) {
-      dispatch(alterRemoteAddressAdditionalNode(remoteAddress));
-    },
-    alterUsername(username) {
-      dispatch(setUsername(username));
-    },
-    alterPassword(password) {
-      dispatch(setPassword(password));
-    },
-    alterBindAddressForSetupNode(bindAddress) {
-      dispatch(setBindAddressForSetupNode(bindAddress));
-    },
-    alterPortForSetupNode(port) {
-      dispatch(setPortForSetupNode(port));
-    },
-    finishClusterSetup(msg) {
-      dispatch(finishClusterSetup(msg));
-    },
-    alterNodeCount(nodeCount) {
-      dispatch(setNodeCount(nodeCount));
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(MultipleNodeController);
diff --git a/app/addons/setup/container/SingleNodeContainer.js b/app/addons/setup/container/SingleNodeContainer.js
deleted file mode 100644
index b70de41..0000000
--- a/app/addons/setup/container/SingleNodeContainer.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Licensed 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.
-import {connect} from 'react-redux';
-import SingleNodeController from '../components/SingleNodeController';
-import {
-  getIsAdminParty,
-  getBindAddressForSetupNode,
-  getPortForSetupNode,
-  getNodeList,
-  getPassword,
-  getSetupNode,
-  getUsername
-} from '../reducers';
-import {setBindAddressForSetupNode, setPassword, setPortForSetupNode, setupSingleNode, setUsername} from "../actions";
-
-const mapStateToProps = ({setup}) => {
-  return {
-    nodeList: getNodeList(setup),
-    isAdminParty: getIsAdminParty(setup),
-    setupNode: getSetupNode(setup),
-    username: getUsername(setup),
-    password: getPassword(setup),
-    port: getPortForSetupNode(setup),
-    bindAddress: getBindAddressForSetupNode(setup)
-  };
-};
-
-const mapDispatchToProps = dispatch => {
-  return {
-    alterUsername(username) {
-      dispatch(setUsername(username));
-    },
-    alterPassword(password) {
-      dispatch(setPassword(password));
-    },
-    alterBindAddress(bindAddress) {
-      dispatch(setBindAddressForSetupNode(bindAddress));
-    },
-    alterPort(port) {
-      dispatch(setPortForSetupNode(port));
-    },
-    setupSingleNode(credentials, setupNode) {
-      dispatch(setupSingleNode(credentials, setupNode));
-    }
-  };
-};
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(SingleNodeController);
diff --git a/app/addons/setup/helpers.js b/app/addons/setup/helpers.js
deleted file mode 100644
index 27fde8f..0000000
--- a/app/addons/setup/helpers.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed 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.
-import _ from 'lodash';
-
-export function isInvalid(attrs) {
-  if (_.isEmpty(attrs.username)) {
-    return 'Admin name is required';
-  }
-
-  if (_.isEmpty(attrs.password)) {
-    return 'Admin password is required';
-  }
-
-  if (attrs.bind_address && attrs.bind_address === '127.0.0.1' &&
-        !attrs.singlenode) {
-    return 'Bind address can not be 127.0.0.1';
-  }
-
-  if (attrs.port && _.isNaN(+attrs.port)) {
-    return 'Bind port must be a number';
-  }
-
-  if (attrs.nodeCount && _.isNaN(+attrs.nodeCount)) {
-    return 'Node count must be a number';
-  }
-
-  if (attrs.nodeCount === 0 || attrs.nodeCount && attrs.nodeCount < 1) {
-    return 'Node count must be >= 1';
-  }
-  return false;
-}
diff --git a/app/addons/setup/reducers.js b/app/addons/setup/reducers.js
deleted file mode 100644
index 67dd031..0000000
--- a/app/addons/setup/reducers.js
+++ /dev/null
@@ -1,137 +0,0 @@
-// Licensed 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.
-
-import {
-  SETUP_SET_CLUSTERSTATUS,
-  SETUP_SET_USERNAME,
-  SETUP_SET_PASSWORD,
-  SETUP_BIND_ADDRESS_FOR_SINGLE_NODE,
-  SETUP_PORT_FOR_SINGLE_NODE,
-  SETUP_PORT_ADDITIONAL_NODE,
-  SETUP_BIND_ADDRESS_ADDITIONAL_NODE,
-  SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE,
-  SETUP_ADD_NODE_TO_LIST,
-  SETUP_RESET_ADDITIONAL_NODE,
-  SETUP_NODE_COUNT
-} from './actiontypes';
-import FauxtonAPI from "../../core/api";
-import _ from "lodash";
-
-
-const initialState = {
-  clusterState: '',
-  username: '',
-  password: '',
-  setupNode: {
-    bindAddress: '0.0.0.0',
-    port: 5984,
-    nodeCount: 3
-  },
-  nodeList: [],
-  additionalNode: {
-    bindAddress: '0.0.0.0',
-    port: 5984,
-    remoteAddress: '127.0.0.1'
-  }
-};
-
-export default function setup(state = initialState, action) {
-  const {options, type} = action;
-  switch (type) {
-    case SETUP_SET_CLUSTERSTATUS:
-      return updateState(state, 'clusterState', options.state);
-    case SETUP_SET_USERNAME:
-      return updateState(state, 'username', options.value);
-    case SETUP_SET_PASSWORD:
-      return updateState(state, 'password', options.value);
-    case SETUP_BIND_ADDRESS_FOR_SINGLE_NODE:
-      return updateState(state, 'setupNode.bindAddress', options.value);
-    case SETUP_PORT_FOR_SINGLE_NODE:
-      return updateStateIfNotNaN(state, 'setupNode.port', parseInt(options.value));
-    case SETUP_PORT_ADDITIONAL_NODE:
-      return updateStateIfNotNaN(state, 'additionalNode.port', parseInt(options.value));
-    case SETUP_BIND_ADDRESS_ADDITIONAL_NODE:
-      return updateState(state, 'additionalNode.bindAddress', options.value);
-    case SETUP_REMOTE_ADDRESS_ADDITIONAL_NODE:
-      return updateState(state, 'additionalNode.remoteAddress', options.value);
-    case SETUP_ADD_NODE_TO_LIST:
-      let addNodeListState = getStateCopy(state);
-      addNodeListState.nodeList.push(options.value);
-      resetAdditionalNode(addNodeListState);
-      return addNodeListState;
-    case SETUP_RESET_ADDITIONAL_NODE:
-      return resetAdditionalNode(getStateCopy(state));
-    case SETUP_NODE_COUNT:
-      return updateStateIfNotNaN(state, 'setupNode.nodeCount', parseInt(options.value));
-    default:
-      return state;
-  }
-}
-
-/**
- * Manual nested copy of the state object.
- * @param state The current state to copy.
- * @returns {{setupNode: {}, additionalNode: {}}}
- */
-export const getStateCopy = (state) => {
-  return {
-    ...state,
-    setupNode: {
-      ...state.setupNode
-    },
-    additionalNode: {
-      ...state.additionalNode
-    }
-  };
-};
-
-export const updateStateIfNotNaN = (state, path, value) => {
-  let stateCopy = getStateCopy(state);
-  if (_.isNaN(value)) {
-    return stateCopy;
-  }
-  return _.set(stateCopy, path, value);
-};
-
-/**
- * Update a particular value for a state
- * @param state The state to update
- * @param path The property path to update
- * @param value The value to update
- */
-const updateState = (state, path, value) => {
-  let statecopy = getStateCopy(state);
-  return _.set(statecopy, path, value);
-};
-
-/**
- * Reset the current additionalNode state for the initial one.
- * @param state The state to update
- * @returns {*}
- */
-const resetAdditionalNode = state => {
-  state.additionalNode = Object.assign({}, initialState.additionalNode);
-  return state;
-};
-
-export const getState = state => state;
-export const getClusterState = state => state.clusterState;
-export const getNodeList = state => state.nodeList;
-export const getIsAdminParty = () => FauxtonAPI.session.isAdminParty();
-export const getUsername = state => state.username;
-export const getPassword = state => state.password;
-export const getSetupNode = state => state.setupNode;
-export const getPortForSetupNode = state => state.setupNode.port;
-export const getBindAddressForSetupNode = state => state.setupNode.bindAddress;
-export const getNodeCountForSetupNode = state => state.setupNode.nodeCount;
-export const getAdditionalNode = state => state.additionalNode;
-export const getHostForSetupNode = () => '127.0.0.1';
diff --git a/app/addons/setup/route.js b/app/addons/setup/route.js
deleted file mode 100644
index 38752a1..0000000
--- a/app/addons/setup/route.js
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import app from "../../app";
-import FauxtonAPI from "../../core/api";
-import ClusterActions from "../cluster/actions";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-import ConfiguredScreenContainer from './container/ConfiguredSceenContainer';
-import FirstStepContainer from './container/FirstStepContainer';
-import SingleNodeContainer from './container/SingleNodeContainer';
-import MultipleNodeContainer from './container/MultipleNodeContainer';
-
-const SetupRouteObject = FauxtonAPI.RouteObject.extend({
-  roles: ['_admin'],
-  selectedHeader: 'Setup',
-
-  routes: {
-    'setup': 'setupInitView',
-    'setup/finish': 'finishView',
-    'setup/singlenode': 'setupSingleNode',
-    'setup/multinode': 'setupMultiNode'
-  },
-
-  setupInitView: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<FirstStepContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  setupSingleNode: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<SingleNodeContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  setupMultiNode: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    ClusterActions.fetchNodes();
-    return <OnePaneSimpleLayout
-      component={<MultipleNodeContainer />}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  },
-
-  finishView: () => {
-    const url = FauxtonAPI.urls('cluster_setup', 'apiurl');
-    return <OnePaneSimpleLayout
-      component={<ConfiguredScreenContainer/>}
-      endpoint={url}
-      docURL={FauxtonAPI.constants.DOC_URLS.SETUP}
-      crumbs={[
-        {'name': 'Setup ' + app.i18n.en_US['couchdb-productname']}
-      ]}
-    />;
-  }
-});
-
-const Setup = {
-  RouteObjects: [SetupRouteObject]
-};
-
-export default Setup;
diff --git a/app/addons/verifyinstall/__tests__/components.test.js b/app/addons/verifyinstall/__tests__/components.test.js
deleted file mode 100644
index 8499a40..0000000
--- a/app/addons/verifyinstall/__tests__/components.test.js
+++ /dev/null
@@ -1,107 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from '../../../core/api';
-import React from 'react';
-import Constants from '../constants';
-import VerifyInstallButton from '../components/VerifyInstallButton';
-import VerifyInstallResults from '../components/VerifyInstallResults';
-import {mount} from 'enzyme';
-import sinon from 'sinon';
-FauxtonAPI.router = new FauxtonAPI.Router([]);
-
-describe('VerifyInstallResults', function () {
-  let el;
-
-  const tests = [
-    { key: 'CREATE_DATABASE', id: 'js-test-create-db' },
-    { key: 'CREATE_DOCUMENT', id: 'js-test-create-doc' },
-    { key: 'UPDATE_DOCUMENT', id: 'js-test-update-doc' },
-    { key: 'DELETE_DOCUMENT', id: 'js-test-delete-doc' },
-    { key: 'CREATE_VIEW', id: 'js-test-create-view' },
-    { key: 'REPLICATION', id: 'js-test-replication' }
-  ];
-
-  const testResults = {};
-  tests.forEach((test) => {
-    testResults[Constants.TESTS[test.key]] = { complete: false };
-  });
-
-  it('confirm all result fields blank before tests ran', function () {
-
-    el = mount(<VerifyInstallResults testResults={testResults} />);
-
-    tests.forEach((test) => {
-      expect(el.find('#' + test.id).text()).toBe('');
-    });
-  });
-
-  it('confirm each result field shows success after successful test', function () {
-    tests.forEach((test) => {
-      const copy = _.clone(testResults);
-
-      // mark this single test as complete
-      copy[Constants.TESTS[test.key]] = {
-        complete: true,
-        success: true
-      };
-
-      el = mount(<VerifyInstallResults testResults={copy} />);
-
-      // now look at the DOM for that element. It should contain a tick char
-      expect(el.find('#' + test.id + ' span').text()).toBe('✓');
-    });
-  });
-
-  it('confirm each result field shows error marker after failed test', function () {
-    tests.forEach((test) => {
-      const copy = _.clone(testResults);
-
-      // mark this single test as complete
-      copy[Constants.TESTS[test.key]] = {
-        complete: true,
-        success: false
-      };
-
-      el = mount(<VerifyInstallResults testResults={copy} />);
-
-      // now look at the DOM for that element. It should contain an error char
-      expect(el.find('#' + test.id + ' span').text()).toBe('✗');
-    });
-  });
-});
-
-
-describe('VerifyInstallButton', function () {
-  let el;
-
-  it('calls verify function on click', function () {
-    const stub = { func: () => { } };
-    const spy = sinon.spy(stub, 'func');
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={false} />);
-    el.simulate('click');
-    expect(spy.calledOnce).toBeTruthy();
-  });
-
-  it('shows appropriate default label', function () {
-    const stub = { func: () => { } };
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={false} />);
-    expect(el.text()).toBe('Verify Installation');
-  });
-
-  it('shows appropriate label during verification', function () {
-    const stub = { func: () => { } };
-    el = mount(<VerifyInstallButton verify={stub.func} isVerifying={true} />);
-    expect(el.text()).toBe('Verifying');
-  });
-
-});
diff --git a/app/addons/verifyinstall/__tests__/reducers.test.js b/app/addons/verifyinstall/__tests__/reducers.test.js
deleted file mode 100644
index 78dc703..0000000
--- a/app/addons/verifyinstall/__tests__/reducers.test.js
+++ /dev/null
@@ -1,61 +0,0 @@
-// Licensed 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.
-
-import reducer from "../reducers";
-import ActionTypes from "../actiontypes";
-
-describe('VerifyInstall Reducer', () => {
-
-  it('initial state has all tests status set to false', () => {
-    const newState = reducer(undefined, {type: 'something_else'});
-
-    expect(newState.isVerifying).toBe(false);
-
-    // confirm all the tests are initially marked as incomplete
-    Object.keys(newState.tests).forEach((test) => {
-      expect(newState.tests[test].complete).toBe(false);
-    });
-  });
-
-  it('verification status changes to in progress', () => {
-    const newState = reducer(undefined, {
-      type: ActionTypes.VERIFY_INSTALL_START
-    });
-
-    expect(newState.isVerifying).toBe(true);
-  });
-
-  it('verification status changes to completed', () => {
-    const newState = reducer(undefined, {
-      type: ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE
-    });
-    expect(newState.isVerifying).toBe(false);
-  });
-
-  it('resets status of all tests', () => {
-    const state = {
-      tests: {
-        TEST1: { complete: true, success: true },
-        TEST2: { complete: true, success: false  },
-        TEST3: { complete: false, success: false  }
-      }
-    };
-    const newState = reducer(state, {
-      type: ActionTypes.VERIFY_INSTALL_RESET
-    });
-    Object.keys(newState.tests).forEach((test) => {
-      expect(newState.tests[test].complete).toBe(false);
-      expect(newState.tests[test].success).not.toBeDefined();
-    });
-  });
-
-});
diff --git a/app/addons/verifyinstall/actions.js b/app/addons/verifyinstall/actions.js
deleted file mode 100644
index e8a5967..0000000
--- a/app/addons/verifyinstall/actions.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import Constants from "./constants";
-import VerifyInstall from "./resources";
-import ActionTypes from "./actiontypes";
-
-
-// helper function to publish success/fail result of a single test having been ran
-const testPassed = function (test, dispatch) {
-  return function () {
-    dispatch({
-      type: ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE,
-      test: test,
-      success: true
-    });
-  };
-};
-
-let allTestsPassed = true;
-const testFailed = function (test, dispatch) {
-  return function (xhr) {
-    allTestsPassed = false;
-    if (!xhr) { return; }
-
-    dispatch({
-      type: ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE,
-      test: test,
-      success: false
-    });
-    let reason = 'n/a';
-    if (xhr.responseText) {
-      reason = JSON.parse(xhr.responseText).reason;
-    } else if (xhr.message) {
-      reason = xhr.message;
-    }
-    FauxtonAPI.addNotification({
-      msg: 'Error: ' + reason,
-      type: 'error'
-    });
-  };
-};
-
-
-export const resetTests = () => (dispatch) => {
-  dispatch({ type: ActionTypes.VERIFY_INSTALL_RESET });
-};
-
-export const startVerification = () => (dispatch) => {
-  // announce that we're starting the verification tests
-  dispatch({ type: ActionTypes.VERIFY_INSTALL_START });
-
-  const testProcess = VerifyInstall.testProcess;
-  testProcess.setup()
-    .then(() => {
-      return testProcess.saveDB().then(testPassed(Constants.TESTS.CREATE_DATABASE, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DATABASE, dispatch))
-    .then(() => {
-      return testProcess.saveDoc().then(testPassed(Constants.TESTS.CREATE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DATABASE, dispatch))
-    .then(() => {
-      return testProcess.updateDoc().then(testPassed(Constants.TESTS.UPDATE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.CREATE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.destroyDoc().then(testPassed(Constants.TESTS.DELETE_DOCUMENT, dispatch));
-    }, testFailed(Constants.TESTS.UPDATE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.setupView().then(() => {
-        return testProcess.testView().then(testPassed(Constants.TESTS.CREATE_VIEW, dispatch));
-      });
-    }, testFailed(Constants.TESTS.DELETE_DOCUMENT, dispatch))
-    .then(() => {
-      return testProcess.setupReplicate().then(() => {
-        return testProcess.testReplicate().then(testPassed(Constants.TESTS.REPLICATION, dispatch));
-      });
-    }, testFailed(Constants.TESTS.CREATE_VIEW, dispatch))
-    .then(() => {}, testFailed(Constants.TESTS.REPLICATION, dispatch))
-    .then(() => {
-      // now announce the tests have been ran
-      dispatch({ type: ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE });
-
-      if (allTestsPassed) {
-        FauxtonAPI.addNotification({
-          msg: 'Success! Your CouchDB installation is working. Time to Relax.',
-          type: 'success'
-        });
-      }
-
-      testProcess.removeDBs();
-    });
-};
diff --git a/app/addons/verifyinstall/actiontypes.js b/app/addons/verifyinstall/actiontypes.js
deleted file mode 100644
index 89db7e1..0000000
--- a/app/addons/verifyinstall/actiontypes.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Licensed 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.
-
-export default {
-  VERIFY_INSTALL_START: 'VERIFY_INSTALL_START',
-  VERIFY_INSTALL_RESET: 'VERIFY_INSTALL_RESET',
-  VERIFY_INSTALL_SINGLE_TEST_COMPLETE: 'VERIFY_INSTALL_SINGLE_TEST_COMPLETE',
-  VERIFY_INSTALL_ALL_TESTS_COMPLETE: 'VERIFY_INSTALL_ALL_TESTS_COMPLETE'
-};
diff --git a/app/addons/verifyinstall/assets/less/verifyinstall.less b/app/addons/verifyinstall/assets/less/verifyinstall.less
deleted file mode 100644
index e084cb3..0000000
--- a/app/addons/verifyinstall/assets/less/verifyinstall.less
+++ /dev/null
@@ -1,16 +0,0 @@
-// Licensed 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.
-
-#start {
-  margin-bottom: 20px;
-}
-
diff --git a/app/addons/verifyinstall/base.js b/app/addons/verifyinstall/base.js
deleted file mode 100644
index 4f3eaa9..0000000
--- a/app/addons/verifyinstall/base.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import VerifyInstall from "./routes";
-import reducers from './reducers';
-import "./assets/less/verifyinstall.less";
-
-VerifyInstall.initialize = function () {
-  FauxtonAPI.addHeaderLink({
-    title: 'Verify',
-    href: '#/verifyinstall',
-    icon: 'fonticon-ok-circled',
-    bottomNav: true
-  });
-};
-
-FauxtonAPI.addReducers({
-  verifyinstall: reducers
-});
-
-export default VerifyInstall;
diff --git a/app/addons/verifyinstall/components/VerifyInstallButton.js b/app/addons/verifyinstall/components/VerifyInstallButton.js
deleted file mode 100644
index 4e7df08..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallButton.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-
-export default class VerifyInstallButton extends React.Component {
-  static propTypes = {
-    verify: PropTypes.func.isRequired,
-    isVerifying: PropTypes.bool.isRequired
-  };
-
-  render() {
-    return (
-      <button id="start" className="btn btn-primary" onClick={this.props.verify} disabled={this.props.isVerifying}>
-        {this.props.isVerifying ? 'Verifying' : 'Verify Installation'}
-      </button>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/components/VerifyInstallContainer.js b/app/addons/verifyinstall/components/VerifyInstallContainer.js
deleted file mode 100644
index efc4fbb..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallContainer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { connect } from 'react-redux';
-import VerifyInstallScreen from './VerifyInstallScreen';
-import { resetTests, startVerification } from '../actions';
-
-const mapStateToProps = ({ verifyinstall }) => {
-  return {
-    isVerifying: verifyinstall.isVerifying,
-    testResults: verifyinstall.tests
-  };
-};
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    resetTests: () => {
-      dispatch(resetTests());
-    },
-
-    startVerification: () => {
-      dispatch(resetTests());
-      dispatch(startVerification());
-    }
-  };
-};
-
-const VerifyInstallContainer = connect(
-  mapStateToProps,
-  mapDispatchToProps
-)(VerifyInstallScreen);
-
-export default VerifyInstallContainer;
diff --git a/app/addons/verifyinstall/components/VerifyInstallResults.js b/app/addons/verifyinstall/components/VerifyInstallResults.js
deleted file mode 100644
index 08ced5f..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallResults.js
+++ /dev/null
@@ -1,70 +0,0 @@
-// Licensed 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.
-
-import PropTypes from 'prop-types';
-import React from 'react';
-import Constants from '../constants';
-
-export default class VerifyInstallResults extends React.Component {
-  static propTypes = {
-    testResults: PropTypes.object.isRequired
-  };
-
-  showTestResult = (test) => {
-    if (!this.props.testResults[test].complete) {
-      return '';
-    }
-    if (this.props.testResults[test].success) {
-      return <span>&#10003;</span>;
-    }
-    return <span>&#x2717;</span>;
-  };
-
-  render() {
-    return (
-      <table className="table table-striped table-bordered">
-        <thead>
-          <tr>
-            <th>Test</th>
-            <th>Status</th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td>Create Database</td>
-            <td id="js-test-create-db">{this.showTestResult(Constants.TESTS.CREATE_DATABASE)}</td>
-          </tr>
-          <tr>
-            <td>Create Document</td>
-            <td id="js-test-create-doc">{this.showTestResult(Constants.TESTS.CREATE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Update Document</td>
-            <td id="js-test-update-doc">{this.showTestResult(Constants.TESTS.UPDATE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Delete Document</td>
-            <td id="js-test-delete-doc">{this.showTestResult(Constants.TESTS.DELETE_DOCUMENT)}</td>
-          </tr>
-          <tr>
-            <td>Create View</td>
-            <td id="js-test-create-view">{this.showTestResult(Constants.TESTS.CREATE_VIEW)}</td>
-          </tr>
-          <tr>
-            <td>Replication</td>
-            <td id="js-test-replication">{this.showTestResult(Constants.TESTS.REPLICATION)}</td>
-          </tr>
-        </tbody>
-      </table>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/components/VerifyInstallScreen.js b/app/addons/verifyinstall/components/VerifyInstallScreen.js
deleted file mode 100644
index a5c637b..0000000
--- a/app/addons/verifyinstall/components/VerifyInstallScreen.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import VerifyInstallButton from './VerifyInstallButton';
-import VerifyInstallResults from './VerifyInstallResults';
-
-export default class VerifyInstallScreen extends React.Component {
-
-  constructor(props) {
-    super(props);
-    this.props.resetTests();
-  }
-
-  render() {
-    return (
-      <div>
-        <VerifyInstallButton verify={this.props.startVerification} isVerifying={this.props.isVerifying} />
-        <VerifyInstallResults testResults={this.props.testResults} />
-      </div>
-    );
-  }
-}
diff --git a/app/addons/verifyinstall/constants.js b/app/addons/verifyinstall/constants.js
deleted file mode 100644
index fd286c0..0000000
--- a/app/addons/verifyinstall/constants.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Licensed 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.
-
-var CONSTANTS = {
-  TESTS: {
-    CREATE_DATABASE: 'TEST_CREATE_DATABASE',
-    CREATE_DOCUMENT: 'TEST_CREATE_DOCUMENT',
-    UPDATE_DOCUMENT: 'TEST_UPDATE_DOCUMENT',
-    DELETE_DOCUMENT: 'TEST_DELETE_DOCUMENT',
-    CREATE_VIEW: 'TEST_CREATE_VIEW',
-    REPLICATION: 'TEST_REPLICATION'
-  }
-};
-
-export default CONSTANTS;
diff --git a/app/addons/verifyinstall/reducers.js b/app/addons/verifyinstall/reducers.js
deleted file mode 100644
index 6067f1d..0000000
--- a/app/addons/verifyinstall/reducers.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed 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.
-
-import ActionTypes from './actiontypes';
-import Constants from './constants';
-
-const initialState = {
-  isVerifying: false,
-  tests: {}
-};
-Object.keys(Constants.TESTS).forEach((key) => {
-  initialState.tests[Constants.TESTS[key]] = { complete: false };
-});
-
-function resetTests(tests) {
-  const testsCopy = {...tests};
-  Object.keys(testsCopy).forEach((key) => {
-    testsCopy[key] = { complete: false };
-  });
-  return testsCopy;
-}
-
-function updateTestStatus(tests, test, success) {
-  const testsCopy = {...tests};
-
-  // shouldn't ever occur since we're using constants for the test names
-  if (!_.has(testsCopy, test)) {
-    throw new Error('Invalid test name passed to updateTestStatus()');
-  }
-
-  // mark this test as complete, and track whether it was a success or failure
-  testsCopy[test] = { complete: true, success: success };
-  return testsCopy;
-}
-
-export default function verifyinstall (state = initialState, action) {
-  switch (action.type) {
-
-    case ActionTypes.VERIFY_INSTALL_START:
-      return {
-        ...state,
-        isVerifying: true
-      };
-
-    case ActionTypes.VERIFY_INSTALL_RESET:
-      return {
-        ...state,
-        tests: resetTests(state.tests)
-      };
-
-    case ActionTypes.VERIFY_INSTALL_SINGLE_TEST_COMPLETE:
-      return {
-        ...state,
-        tests: updateTestStatus(state.tests, action.test, action.success)
-      };
-
-    case ActionTypes.VERIFY_INSTALL_ALL_TESTS_COMPLETE:
-      return {
-        ...state,
-        isVerifying: false
-      };
-
-    default:
-      return state;
-  }
-}
diff --git a/app/addons/verifyinstall/resources.js b/app/addons/verifyinstall/resources.js
deleted file mode 100644
index 0c9f689..0000000
--- a/app/addons/verifyinstall/resources.js
+++ /dev/null
@@ -1,161 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../../core/api";
-import Helpers from "../../helpers";
-import { get, post } from "../../core/ajax";
-import Databases from "../databases/resources";
-import Documents from "../documents/resources";
-const Verifyinstall = FauxtonAPI.addon();
-
-const db = new Databases.Model({
-  id: 'verifytestdb',
-  name: 'verifytestdb'
-});
-
-const dbReplicate = new Databases.Model({
-  id: 'verifytestdb_replicate',
-  name: 'verifytestdb_replicate'
-});
-
-let doc, viewDoc;
-
-Verifyinstall.testProcess = {
-  saveDoc: function () {
-    doc = new Documents.Doc({_id: 'test_doc_1', a: 1}, {
-      database: db
-    });
-
-    return doc.save();
-  },
-
-  destroyDoc: function () {
-    return doc.destroy();
-  },
-
-  updateDoc: function () {
-    doc.set({b: 'hello'});
-    return doc.save();
-  },
-
-  saveDB: function () {
-    return db.save();
-  },
-
-  setupDB: function (db) {
-    const promise = new FauxtonAPI.Promise((resolve, reject) => {
-      db.fetch().then(() => {
-        return db.destroy();
-      }, () => {
-        resolve();
-      }).then(() => {
-        resolve();
-      }, (xhr, error, reason) => {
-        reject(new Error(reason));
-      });
-    });
-    return promise;
-  },
-
-  setup: function () {
-    return FauxtonAPI.Promise.all([
-      this.setupDB(db),
-      this.setupDB(dbReplicate)
-    ]);
-  },
-
-  testView: function () {
-    let resolve, reject;
-    const promise = new FauxtonAPI.Promise(function(res, rej) {
-      resolve = res;
-      reject = rej;
-    });
-    const getPromise = get(viewDoc.url() + '/_view/testview').then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-
-    getPromise.then(function (resp) {
-      resp = _.isString(resp) ? JSON.parse(resp) : resp;
-      const row = resp.rows[0];
-      if (row.value === 6) {
-        resolve();
-      }
-      reject(new Error('Values expect 6, got ' + row.value));
-    }, reject);
-
-    return promise;
-  },
-
-  setupView: function () {
-    const doc1 = new Documents.Doc({_id: 'test_doc_10', a: 1}, { database: db });
-    const doc2 = new Documents.Doc({_id: 'test_doc_20', a: 2}, { database: db });
-    const doc3 = new Documents.Doc({_id: 'test_doc_30', a: 3}, { database: db });
-
-    viewDoc = new Documents.Doc({
-      _id: '_design/view_check',
-      views: {
-        'testview': {
-          map: 'function (doc) { emit(doc._id, doc.a); }',
-          reduce: '_sum'
-        }
-      }
-    }, {
-      database: db
-    });
-
-    return FauxtonAPI.Promise.all([doc1.save(), doc2.save(), doc3.save(), viewDoc.save()]);
-  },
-
-  setupReplicate: function () {
-    const body = {
-      create_target: true,
-      source: 'verifytestdb',
-      target: 'verifytestdb_replicate'
-    };
-    return post(
-      Helpers.getServerUrl('/_replicate'),
-      body
-    ).then(res => {
-      if (res.error) {
-        throw new Error(res.reason || res.error);
-      }
-      return res;
-    });
-  },
-
-  testReplicate: function () {
-    const promise = new FauxtonAPI.Promise((resolve, reject) => {
-      dbReplicate.fetch().then(() => {
-        const docCount = dbReplicate.get('doc_count');
-        if (docCount === 4) {
-          resolve();
-          return;
-        }
-        const reason = 'Replication Failed, expected 4 docs got ' + docCount;
-        reject(new Error(reason));
-      }, reject);
-    });
-
-    return promise;
-  },
-
-  removeDBs: function () {
-    dbReplicate.destroy();
-    db.destroy();
-  }
-};
-
-
-export default Verifyinstall;
diff --git a/app/addons/verifyinstall/routes.js b/app/addons/verifyinstall/routes.js
deleted file mode 100644
index cae1983..0000000
--- a/app/addons/verifyinstall/routes.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed 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.
-
-import React from 'react';
-import FauxtonAPI from "../../core/api";
-import VerifyInstall from "./resources";
-import VerifyInstallContainer from "./components/VerifyInstallContainer";
-import {OnePaneSimpleLayout} from '../components/layouts';
-
-const VerifyRouteObject = FauxtonAPI.RouteObject.extend({
-  routes: {
-    'verifyinstall': 'verifyInstall'
-  },
-  selectedHeader: 'Verify',
-
-  verifyInstall: function () {
-    return <OnePaneSimpleLayout
-      component={<VerifyInstallContainer/>}
-      crumbs={[
-        {name: 'Verify CouchDB Installation'}
-      ]}
-    />;
-  }
-});
-
-VerifyInstall.RouteObjects = [VerifyRouteObject];
-
-export default VerifyInstall;
diff --git a/app/app.js b/app/app.js
deleted file mode 100644
index 713b8de..0000000
--- a/app/app.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// Licensed 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.
-import "jquery";
-import app from "./initialize";
-import _ from "lodash";
-import Helpers from "./helpers";
-import Utils from "./core/utils";
-import FauxtonAPI from "./core/api";
-import 'react-toastify/dist/ReactToastify.min.css';
-import "../assets/less/fauxton.less";
-
-// Make sure we have a console.log
-if (_.isUndefined(console)) {
-  console = {
-    log: function () {},
-    trace: function () {},
-    debug: function () {}
-  };
-}
-
-// Provide a global location to place configuration settings and module
-// creation also mix in Backbone.Events
-Object.assign(app, {
-  utils: Utils,
-  getParams: FauxtonAPI.utils.getParams,
-  helpers: Helpers
-});
-
-FauxtonAPI.config({
-  // I haven't wrapped these dispatch methods in a action
-  // because I don't want to require fauxton/actions in this method.
-  addHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'ADD_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  updateHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'UPDATE_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  removeHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'REMOVE_NAVBAR_LINK',
-      link: link
-    });
-  },
-
-  hideLogin: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_HIDE_LOGIN_LOGOUT_SECTION',
-      visible: false
-    });
-  },
-
-  showLogout: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_LOGOUT_BUTTON'
-    });
-  },
-
-  showLogin: function () {
-    FauxtonAPI.reduxDispatch({
-      type: 'NAVBAR_SHOW_LOGIN_BUTTON'
-    });
-  }
-});
-
-export default app;
diff --git a/app/constants.js b/app/constants.js
deleted file mode 100644
index 7f02640..0000000
--- a/app/constants.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed 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.
-export default {
-
-  MISC: {
-    TRAY_TOGGLE_SPEED: 250,
-    DEFAULT_PAGE_SIZE: 20
-  },
-
-  DATABASES: {
-    DOCUMENT_LIMIT: 100
-  },
-
-  // global events for common used components
-  EVENTS: {
-    TRAY_OPENED: 'tray:opened',
-    NAVBAR_SIZE_CHANGED: 'navbar:size_changed'
-  },
-
-  // documentation URLs
-  DOC_URLS: {
-    GENERAL:'./docs/intro/api.html#documents',
-    ALL_DBS:'./docs/api/server/common.html?highlight=all_dbs#get--_all_dbs',
-    REPLICATION:'./docs/replication/replicator.html#basics',
-    DESIGN_DOCS:'./docs/ddocs/ddocs.html#design-docs',
-    DESIGN_DOC_METADATA:'./docs/api/ddoc/common.html#api-ddoc-view-index-info',
-    VIEW_FUNCS:'./docs/ddocs/ddocs.html#view-functions',
-    MAP_FUNCS:'./docs/ddocs/ddocs.html#map-functions',
-    REDUCE_FUNCS:'./docs/ddocs/ddocs.html#reduce-and-rereduce-functions',
-    API_REF:'./docs/http-api.html',
-    DB_PERMISSION:'./docs/api/database/security.html#db-security',
-    STATS:'./docs/api/server/common.html?highlight=stats#get--_stats',
-    ACTIVE_TASKS:'./docs/api/server/common.html?highlight=stats#active-tasks',
-    LOG:'./docs/api/server/common.html?highlight=stats#log',
-    CONFIG:'./docs/config/index.html',
-    VIEWS:'./docs/intro/overview.html#views',
-    MANGO_INDEX:'./docs/intro/api.html#documents',
-    MANGO_SEARCH:'./docs/intro/api.html#documents',
-    CHANGES:'./docs/api/database/changes.html?highlight=changes#post--db-_changes',
-    SETUP: './docs/cluster/setup.html#the-cluster-setup-wizard',
-    MEMBERSHIP: './docs/cluster/nodes.html'
-  }
-};
diff --git a/app/core/__tests__/ajax.test.js b/app/core/__tests__/ajax.test.js
deleted file mode 100644
index c989a41..0000000
--- a/app/core/__tests__/ajax.test.js
+++ /dev/null
@@ -1,212 +0,0 @@
-// Licensed 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.
-import fetchMock from 'fetch-mock';
-import {
-  json,
-  fetchObserver,
-  get,
-  put,
-  post,
-  deleteRequest
-} from '../ajax';
-
-describe('Fauxton Ajax', () => {
-  let unsubscribe;
-
-  afterEach(() => {
-    if (unsubscribe) {
-      unsubscribe.unsubscribe();
-      unsubscribe = null;
-    }
-    fetchMock.reset();
-  });
-
-  it('should observe multiple requests', (done) => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    fetchMock.getOnce('/testing2', {
-      status: 201,
-      body: {
-        ok: true
-      }
-    });
-
-    let count = 0;
-    unsubscribe = fetchObserver.subscribe({
-      next () {
-        count++;
-        if (count === 2) {
-          done();
-        }
-      }
-    });
-
-    json("/testing");
-    json("/testing2");
-  });
-
-  it('Observer should be filterable', (done) => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    fetchMock.getOnce('/testing-again', {
-      status: 400,
-      body: {
-        hello: 'ok'
-      }
-    });
-
-    unsubscribe = fetchObserver.filter(resp => resp.status === 400).subscribe({
-      next (resp) {
-        done();
-        expect(resp.status).toEqual(400);
-      }
-    });
-
-    json("/testing");
-    json("/testing-again");
-  });
-
-  it('can do a GET', () => {
-    fetchMock.getOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return get('/testing').then(resp =>{
-      expect(resp.ok).toBeTruthy();
-    });
-  });
-
-  it('can do a PUT', () => {
-    fetchMock.putOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return put('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  it('can do a POST', () => {
-    fetchMock.postOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return post('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  it('can do a DELETE', () => {
-    fetchMock.deleteOnce('/testing', {
-      status: 200,
-      body: {
-        ok: true
-      }
-    });
-
-    return deleteRequest('/testing')
-      .then(resp =>{
-        expect(resp.ok).toBeTruthy();
-      });
-  });
-
-  describe('POST with falsy values as the body', () => {
-    const successResponse = {
-      status: 200,
-      body: {
-        ok: true
-      }
-    };
-    it('accepts empty string', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', '')
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('""');
-        });
-    });
-
-    it('accepts zero', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', 0)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('0');
-        });
-    });
-
-    it('accepts false', () => {
-      fetchMock.postOnce('/testing', successResponse);
-      return post('/testing', false)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('false');
-        });
-    });
-  });
-
-  describe('PUT with falsy values as the body', () => {
-    const successResponse = {
-      status: 200,
-      body: {
-        ok: true
-      }
-    };
-    it('accepts empty string', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', '')
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('""');
-        });
-    });
-
-    it('accepts zero', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', 0)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('0');
-        });
-    });
-
-    it('accepts false', () => {
-      fetchMock.putOnce('/testing', successResponse);
-      return put('/testing', false)
-        .then(resp =>{
-          expect(resp.ok).toBeTruthy();
-          expect(fetchMock.lastOptions().body).toBe('false');
-        });
-    });
-  });
-});
diff --git a/app/core/__tests__/api.test.js b/app/core/__tests__/api.test.js
deleted file mode 100644
index ca6e3ad..0000000
--- a/app/core/__tests__/api.test.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "../api";
-
-describe('URLs', () => {
-
-  it('can register and get url', () => {
-    const testUrl = 'this_is_a_test_url';
-
-    FauxtonAPI.registerUrls('testURL', {
-      server: () => {
-        return testUrl;
-      }
-    });
-
-    expect(FauxtonAPI.urls('testURL', 'server')).toBe(testUrl);
-
-  });
-
-  it('can register interceptor to change url', () => {
-    const testUrl = 'interceptor_url';
-
-    FauxtonAPI.registerExtension('urls:interceptors', function (name, context) {
-      if (name === 'testURL' && context === 'intercept') {
-        return testUrl;
-      }
-
-      return false;
-    });
-
-    expect(FauxtonAPI.urls('testURL', 'intercept')).toBe(testUrl);
-  });
-
-});
diff --git a/app/core/__tests__/utils.test.js b/app/core/__tests__/utils.test.js
deleted file mode 100644
index b802a2d..0000000
--- a/app/core/__tests__/utils.test.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// Licensed 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.
-
-import utils from "../utils";
-
-describe('Utils', () => {
-
-  describe('getDocTypeFromId', () => {
-
-    it('returns doc if id not given', () => {
-      const res = utils.getDocTypeFromId();
-      expect(res).toBe('doc');
-    });
-
-    it('returns design doc for design docs', () => {
-      const res = utils.getDocTypeFromId('_design/foobar');
-      expect(res).toBe('design doc');
-    });
-
-    it('returns doc for all others', () => {
-      const res = utils.getDocTypeFromId('blerg');
-      expect(res).toBe('doc');
-    });
-  });
-
-  describe('getSafeIdForDoc', () => {
-
-    it('keeps _design/ intact', () => {
-      const res = utils.getSafeIdForDoc('_design/foo/do');
-      expect(res).toBe('_design/foo%2Fdo');
-    });
-
-    it('encodes all other', () => {
-      const res = utils.getSafeIdForDoc('_redesign/foobar');
-      expect(res).toBe('_redesign%2Ffoobar');
-    });
-  });
-
-  describe('safeURLName', () => {
-
-    it('encodes special chars', () => {
-      expect(utils.safeURLName('foo-bar/baz')).toBe('foo-bar%2Fbaz');
-    });
-
-    it('encodes an encoded doc', () => {
-      expect(utils.safeURLName('foo-bar%2Fbaz')).toBe('foo-bar%252Fbaz');
-    });
-  });
-
-  describe('isSystemDatabase', () => {
-
-    it('detects system databases', () => {
-      expect(utils.isSystemDatabase('_replicator')).toBeTruthy();
-    });
-
-    it('ignores other dbs', () => {
-      expect(utils.isSystemDatabase('foo')).toBeFalsy();
-    });
-  });
-
-  describe('localStorage', () => {
-
-    it('Should get undefined when getting a non-existent key', () => {
-      expect(utils.localStorageGet('qwerty')).not.toBeDefined();
-    });
-
-    it('Should get value after setting it', () => {
-      const key = 'key1';
-      utils.localStorageSet(key, 1);
-      expect(utils.localStorageGet(key)).toBe(1);
-    });
-
-    it('Set and retrieve complex object', () => {
-      const key = 'key2',
-            obj = {
-              one: 1,
-              two: ['1', 'string', 3]
-            };
-      utils.localStorageSet(key, obj);
-      expect(utils.localStorageGet(key)).toEqual(obj);
-    });
-
-    it('stripHTML removes HTML', () => {
-      [
-        { html: '<span>okay</span>', text: 'okay' },
-        { html: 'test <span>before</span> and after', text: 'test before and after' },
-        { html: 'testing <a href="#whatever">attributes</span>', text: 'testing attributes' },
-        { html: '<span>testing</span> multiple <p>elements</p>', text: 'testing multiple elements' }
-      ].forEach(function (item) {
-        expect(utils.stripHTML(item.html)).toBe(item.text);
-      });
-    });
-
-  });
-
-  describe('queryParams', () => {
-    it('builds query string from an object', () => {
-      expect(utils.queryParams({
-        startkey: JSON.stringify('_design/app'),
-        endkey: JSON.stringify('_design/app\u9999'),
-        limit:30
-      })).toBe(
-        'startkey=%22_design%2Fapp%22&endkey=%22_design%2Fapp%E9%A6%99%22&limit=30'
-      );
-    });
-  });
-});
diff --git a/app/core/ajax.js b/app/core/ajax.js
deleted file mode 100644
index 305d8dc..0000000
--- a/app/core/ajax.js
+++ /dev/null
@@ -1,140 +0,0 @@
-import 'whatwg-fetch';
-import {defaultsDeep} from "lodash";
-import {Subject} from 'rxjs/Subject';
-import 'rxjs/add/operator/filter';
-
-/* Add a multicast observer so that all fetch requests can be observed
-  Some usage examples:
-
-  This logs all status codes
-  fetchObserver.subscribe((resp) => console.log(resp.statusCode));
-
-
-  This only logs all status codes that are great than 201
-  fetchObserver.filter(resp.statusCode > 201).subscribe(resp => console.log(resp.statusCode));
-*/
-export const fetchObserver = new Subject();
-
-
-/**
- * json - The lowlevel fetch request with some basic headers
- * that are always needed.
- *
- * @param {string}   url          The url for the request
- * @param {string} [method=GET] The request method
- * @param {object} [opts={}]    Extra fetch options that will be added.
- * Any opts added here will override the default ones
- * Passing in `raw: true` in here will return the raw response instead of a json body response.
- *
- * @return {Promise}
- */
-export const json = (url, method = "GET", opts = {}) => {
-  return fetch(
-    url,
-    defaultsDeep(
-      {},
-      opts,
-      {
-        method,
-        credentials: "include",
-        headers: {
-          accept: "application/json",
-          "Content-Type": "application/json",
-          "Pragma":"no-cache" //Disables cache for IE11
-        },
-        cache: "no-cache"
-      }
-    )
-  ).then(resp => {
-    fetchObserver.next(resp);
-    if (opts.raw) {
-      return resp;
-    }
-    return resp.json();
-  });
-};
-
-
-/**
- * get - Get request
- *
- * @param {string}   url Url of request
- * @param {object} [opts={}] Opts to add to request
- *
- * @return {Promise} A promise with the request's response
- */
-export const get = (url, opts = {}) => {
-  return json(url, "GET", opts);
-};
-
-export const deleteRequest = (url, opts = {}) => {
-  return json(url, "DELETE", opts);
-};
-
-/**
- * post - Post request
- *
- * @param {string}   url  Url of request
- * @param {object} [body] Body of request
- * @param {object} [opts={}] Opts to add to request
- *
- * @return {Promise} A promise with the request's response
- */
-export const post = (url, body, opts = {}) => {
-  if (typeof body !== 'undefined') {
-    if (opts.rawBody)
-      opts.body = body;
-    else
-      opts.body = JSON.stringify(body);
-  }
-  return json(url, "POST", opts);
-};
-
-/**
- * put - Put request
- *
- * @param {string}   url  Url of request
- * @param {object} [body] Body of request
- * @param {object} [opts={}] Opts to add to request
- * Passing in `rawBody: true` in here will not stringify the body.
- *
- * @return {Promise} A promise with the request's response
- */
-export const put = (url, body, opts = {}) => {
-  if (typeof body !== 'undefined') {
-    if (opts.rawBody)
-      opts.body = body;
-    else
-      opts.body = JSON.stringify(body);
-  }
-  return json(url, "PUT", opts);
-};
-
-export const formEncoded = (url, method, opts = {}) => {
-  return json(url, method, defaultsDeep(
-    {},
-    opts,
-    {
-      headers: {
-        "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
-      }
-    }));
-};
-
-export const postFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "POST", opts);
-};
-
-export const putFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "PUT", opts);
-};
-
-export const deleteFormEncoded = (url, body, opts = {}) => {
-  if (body)
-    opts.body = body;
-  return formEncoded(url, "DELETE", opts);
-};
diff --git a/app/core/api.js b/app/core/api.js
deleted file mode 100644
index 7927397..0000000
--- a/app/core/api.js
+++ /dev/null
@@ -1,123 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "./base";
-import Router from "./router";
-import RouteObject from "./routeObject";
-import utils from "./utils";
-import Store from "./store";
-import constants from "../constants";
-import dispatcher from "./dispatcher";
-import $ from "jquery";
-import Backbone from "backbone";
-import _ from "lodash";
-import Promise from "bluebird";
-
-Backbone.$ = $;
-Backbone.ajax = function () {
-  return Backbone.$.ajax.apply(Backbone.$, arguments);
-};
-
-Object.assign(FauxtonAPI, {
-  Router,
-  RouteObject,
-  utils,
-  Store,
-  dispatcher,
-  Promise,
-  Events: _.extend({}, Backbone.Events)
-});
-
-// Pass along all constants
-FauxtonAPI.constants = constants;
-
-FauxtonAPI.dispatch = dispatcher.dispatch;
-
-FauxtonAPI.navigate = function (url, _opts) {
-  var options = _.extend({trigger: true}, _opts);
-  FauxtonAPI.router.navigate(url, options);
-  if (options.trigger) {
-    FauxtonAPI.router.trigger('trigger-update');
-  }
-};
-
-FauxtonAPI.beforeUnload = function () {
-  FauxtonAPI.router.beforeUnload.apply(FauxtonAPI.router, arguments);
-};
-
-FauxtonAPI.removeBeforeUnload = function () {
-  FauxtonAPI.router.removeBeforeUnload.apply(FauxtonAPI.router, arguments);
-};
-
-FauxtonAPI.addRoute = function (route) {
-  FauxtonAPI.router.route(route.route, route.name, route.callback);
-};
-
-var urlPaths = {};
-
-FauxtonAPI.registerUrls = function (namespace, urls) {
-  urlPaths[namespace] = urls;
-};
-
-FauxtonAPI.url = {
-  encode(name = "") {
-    // These special caracters are allowed by couch: _, $, (, ), +, -, and /
-    // From them only $ + and / are to be escaped in a URI component.
-    return (/[$+/]/g.test(name)) ? encodeURIComponent(name) : name;
-  },
-  decode(name = "") {
-    return (/[$+/]/g.test(name)) ? decodeURIComponent(name) : name;
-  }
-};
-
-//This is a little rough and needs some improvement. But the basic concept is there
-FauxtonAPI.urls = function (name, context) {
-  var interceptors = FauxtonAPI.getExtensions('urls:interceptors');
-  var url;
-
-  var args = arguments;
-  _.find(interceptors, function (interceptor) {
-    var out = interceptor.apply(null, args);
-
-    if (out) {
-      url = out;
-      return true;
-    }
-    return false;
-  });
-
-  if (!_.isUndefined(url)) { return url; }
-
-  if (!urlPaths[name]) {
-    console.error('could not find name ', name);
-    return '';
-  }
-
-  if (!urlPaths[name][context]) {
-    console.error('could not find context ', context);
-    return '';
-  }
-
-  args = Array.prototype.slice.call(arguments, 2);
-  url = urlPaths[name][context].apply(null, args);
-  return url;
-};
-
-// out-the-box Fauxton has only Views, but scripts extending Fauxton may introduce others (search indexes, geospatial
-// indexes, etc). This returns an array of the special design doc property names for the index types
-FauxtonAPI.getIndexTypePropNames = function () {
-  var indexTypes = FauxtonAPI.getExtensions('IndexTypes:propNames');
-  indexTypes.push('views');
-  return indexTypes;
-};
-
-export default FauxtonAPI;
diff --git a/app/core/authentication.js b/app/core/authentication.js
deleted file mode 100644
index c933aff..0000000
--- a/app/core/authentication.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-import FauxtonAPI from "./base";
-import Promise from 'bluebird';
-
-export const authenticate = (session, roles) => {
-  if (session.isAdminParty()) {
-    return true;
-  } else if (session.matchesRoles(roles)) {
-    return true;
-  }
-
-  throw new Error('Unable to authenticate');
-};
-
-export const authenticationDenied = () => {
-  let url = window.location.hash
-    .replace('#', '')
-    .replace('login?urlback=', '');
-
-  if (url) {
-    FauxtonAPI.navigate(`/login?urlback=${url}`, { replace: true });
-  }
-
-  FauxtonAPI.navigate(`/login`, { replace: true });
-};
-
-export const checkAccess = (roles = []) => {
-  return new Promise((resolve, reject) => {
-    return FauxtonAPI.session.getSession()
-      .then(() => {
-        if (authenticate(FauxtonAPI.session, roles)) {
-          resolve();
-          return;
-        }
-
-        reject();
-      })
-      .catch(err => {
-        reject(err);
-        authenticationDenied();
-      });
-  });
-};
diff --git a/app/core/base.js b/app/core/base.js
deleted file mode 100644
index 2278d84..0000000
--- a/app/core/base.js
+++ /dev/null
@@ -1,217 +0,0 @@
-// Licensed 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.
-
-import Backbone from "backbone";
-import _ from "lodash";
-
-var FauxtonAPI = {
-  //add default objects
-  router: {
-    navigate: function () {}
-  },
-
-  masterLayout: {},
-
-  // I haven't wrapped these dispatch methods in a action
-  // because I don't want to require fauxton/actions in this method.
-  addHeaderLink: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'ADD_NAVBAR_LINK',
-      link: link
-    });
-  },
-  showHeaderLinkBadge: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'SHOW_NAVBAR_LINK_BADGE',
-      link: link
-    });
-  },
-  hideHeaderLinkBadge: function (link) {
-    FauxtonAPI.reduxDispatch({
-      type: 'HIDE_NAVBAR_LINK_BADGE',
-      link: link
-    });
-  },
-
-  /**
-   * Displays a notification message. The message is only displayed for a few seconds.
-   * The option visibleTime can be provided to set for how long the message should be displayed.
-   *
-   * @param {object} options Options are of the form
-   * {
-   *  message: "string",
-   *  type: "success"|"error"|"info",
-   *  clear: true|false,
-   *  escape: true|false,
-   *  visibleTime: number
-   * }
-   */
-  addNotification: function (options) {
-    options = Object.assign({
-      msg: 'Notification Event Triggered!',
-      type: 'info',
-      escape: true,
-      clear: false
-    }, options);
-
-    if (FauxtonAPI.reduxDispatch) {
-      FauxtonAPI.reduxDispatch({
-        type: 'ADD_NOTIFICATION',
-        options: {
-          info: options
-        }
-      });
-    }
-  },
-
-  /**
-   * Shows a permanent notification message
-   *
-   * @param {object} message
-   */
-  showPermanentNotification: function (message) {
-    FauxtonAPI.reduxDispatch({
-      type: 'SHOW_PERMANENT_NOTIFICATION',
-      options: { msg: message }
-    });
-  },
-
-  config: function (options) {
-    return _.extend(this, options);
-  }
-};
-
-FauxtonAPI.Deferred = function () {
-  return $.Deferred();
-};
-
-FauxtonAPI.when = function (deferreds) {
-  if (deferreds instanceof Array) {
-    return $.when.apply(null, deferreds);
-  }
-
-  return $.when(deferreds);
-};
-
-FauxtonAPI.addonExtensions = {
-  initialize: function () {},
-  RouteObjects: {},
-  Views: {}
-};
-
-FauxtonAPI.addon = function (extra) {
-  return _.extend(_.clone(FauxtonAPI.addonExtensions), extra);
-};
-
-FauxtonAPI.View = Backbone.View.extend({
-  // This should return an array of promises, an empty array, or null
-  establish: function () {
-    return null;
-  },
-  loaderClassname: 'loader',
-  manage: true,
-
-  forceRender: function () {
-    this.hasRendered = false;
-  }
-});
-
-var caching = {
-  fetchOnce: function (opt) {
-    var options = _.extend({}, opt);
-
-    if (!this._deferred || this._deferred.state() === "rejected" || options.forceFetch) {
-      this._deferred = this.fetch();
-    }
-
-    return this._deferred;
-  }
-};
-
-FauxtonAPI.Model = Backbone.Model.extend({ });
-
-FauxtonAPI.Collection = Backbone.Collection.extend({ });
-
-_.each([FauxtonAPI.Model, FauxtonAPI.Collection], function (ctor) {
-  _.extend(ctor.prototype, caching);
-});
-
-var extensions = _.extend({}, Backbone.Events);
-// Can look at a remove function later.
-FauxtonAPI.registerExtension = function (name, view) {
-  if (!extensions[name]) {
-    extensions[name] = [];
-  }
-
-  extensions.trigger('add:' + name, view);
-  extensions[name].push(view);
-};
-
-FauxtonAPI.unRegisterExtension = function (name) {
-  var views = extensions[name];
-
-  if (!views) { return; }
-  extensions.trigger('remove:' + name, views);
-  delete extensions[name];
-};
-
-FauxtonAPI.getExtensions = function (name) {
-  var views = extensions[name];
-
-  if (!views) {
-    views = [];
-  }
-  return views;
-};
-
-FauxtonAPI.removeExtensionItem = function (name, view, cb) {
-  var views = extensions[name];
-  if (!views) { return; }
-
-  var _cb = arguments[arguments.length - 1];
-  if (_.isObject(view) && !cb) {
-    _cb = function (item) { return _.isEqual(item, view);};
-  }
-
-  views = _.filter(views, function (item) {
-    return !_cb(item);
-  });
-
-  extensions[name] = views;
-  extensions.trigger('removeItem:' + name, view);
-};
-
-FauxtonAPI.extensions = extensions;
-
-FauxtonAPI.setSession = function (newSession) {
-  FauxtonAPI.session = newSession;
-};
-
-FauxtonAPI.reducers = {};
-
-
-FauxtonAPI.addReducers = (reducers) => {
-  FauxtonAPI.reducers = {
-    ...FauxtonAPI.reducers,
-    ...reducers
-  };
-};
-
-FauxtonAPI.middlewares = [];
-FauxtonAPI.addMiddleware = (middleware) => {
-  // Basic validation
-  if (middleware && typeof middleware === 'function') {
-    FauxtonAPI.middlewares.push(middleware);
-  }
-};
-
-export default FauxtonAPI;
diff --git a/app/core/dispatcher.js b/app/core/dispatcher.js
deleted file mode 100644
index 2dbe0fd..0000000
--- a/app/core/dispatcher.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-import {findIndex} from 'lodash';
-
-const stores = [];
-let dispatchId = 0;
-
-export const register = (store) => {
-  if (typeof store !== "function") {
-    throw new Error("Store dispatch method must be a function");
-  }
-
-  dispatchId += 1;
-  stores.push(store);
-  store.dispatchId = dispatchId;
-  return dispatchId;
-};
-
-export const dispatch = (msg) => {
-  stores.forEach(store => {
-    store(msg);
-  });
-};
-
-export const unregister = (id) => {
-  const storeIndex = findIndex(stores, store => store.dispatchId === id);
-
-  if (storeIndex === -1) {
-    return;
-  }
-
-  stores.splice(storeIndex, 1);
-};
-
-export default {
-  register,
-  dispatch,
-  unregister
-};
diff --git a/app/core/routeObject.js b/app/core/routeObject.js
deleted file mode 100644
index eb17a60..0000000
--- a/app/core/routeObject.js
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed 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.
-
-import ReactDOM from "react-dom";
-import Backbone from "backbone";
-import _ from "lodash";
-
-var RouteObject = function (options) {
-  this._options = options;
-  this.reactComponents = {};
-
-  this._configure(options || {});
-  this.initialize.apply(this, arguments);
-};
-
-/* How Route Object events work
-
-Its now very simple. We don't want it to do much. It creates a list of routes. Then each route callback must return
-a React component that will be rendered into the app
-
-*/
-
-// Piggy-back on Backbone's self-propagating extend function
-RouteObject.extend = Backbone.Model.extend;
-
-var routeObjectOptions = ["routes", "roles"];
-
-_.extend(RouteObject.prototype, {
-  // Should these be default vals or empty funcs?
-  routes: {},
-  route: function () {},
-  roles: [],
-  initialize: function () {}
-}, {
-
-  get: function (key) {
-    return _.isFunction(this[key]) ? this[key]() : this[key];
-  },
-
-  _configure: function (options) {
-    _.each(_.intersection(_.keys(options), routeObjectOptions), (key) => {
-      this[key] = options[key];
-    });
-  },
-
-  getRouteUrls: function () {
-    return _.keys(this.get('routes'));
-  },
-
-  hasRoute: function (route) {
-    if (this.get('routes')[route]) {
-      return true;
-    }
-    return false;
-  },
-
-  routeCallback: function (route, args) {
-    var routes = this.get('routes'),
-        routeObj = routes[route],
-        routeCallback;
-
-    if (typeof routeObj === 'object') {
-      routeCallback = this[routeObj.route];
-    } else {
-      routeCallback = this[routeObj];
-    }
-
-    return routeCallback.apply(this, args);
-  },
-
-  getRouteRoles: function (routeUrl) {
-    var route = this.get('routes')[routeUrl];
-
-    if ((typeof route === 'object') && route.roles) {
-      return route.roles;
-    }
-
-    return this.roles;
-  }
-
-});
-export default RouteObject;
diff --git a/app/core/router.js b/app/core/router.js
deleted file mode 100644
index 49e5e40..0000000
--- a/app/core/router.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// Licensed 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.
-
-import {checkAccess} from "./authentication";
-import Backbone from "backbone";
-import _ from "lodash";
-
-var beforeUnloads = {};
-
-export default Backbone.Router.extend({
-  routes: {},
-  originalPageTitle: window.document.title,
-
-  beforeUnload: function (name, fn) {
-    beforeUnloads[name] = fn;
-  },
-
-  removeBeforeUnload: function (name) {
-    delete beforeUnloads[name];
-  },
-
-
-  navigate: function (fragment, options) {
-    let continueNav = true;
-    const msg = _.find(_.map(beforeUnloads, function (fn) { return fn(); }), function (beforeReturn) {
-      if (beforeReturn) { return true; }
-    });
-
-    if (msg) {
-      continueNav = window.confirm(msg);
-    }
-
-    if (options && options.redirect) {
-      return window.location = fragment;
-    }
-
-    if (continueNav) {
-      Backbone.Router.prototype.navigate(fragment, options);
-      this.updateWindowTitle(fragment);
-    }
-  },
-
-  updateWindowTitle: function(fragment) {
-    if (fragment.startsWith('#/')) {
-      window.document.title = this.originalPageTitle + ' - ' + fragment.substring(2);
-    } else if (fragment.startsWith('/') || fragment.startsWith('#')) {
-      window.document.title = this.originalPageTitle + ' - ' + fragment.substring(1);
-    } else {
-      window.document.title = this.originalPageTitle + ' - ' + fragment;
-    }
-  },
-
-  addModuleRouteObject: function (RouteObject) {
-    const that = this;
-    const routeUrls = RouteObject.prototype.getRouteUrls();
-
-    routeUrls.forEach(route => {
-      this.route(route, route.toString(), (...args) => {
-        const roles = RouteObject.prototype.getRouteRoles(route);
-
-        checkAccess(roles).then(() => {
-          if (!that.activeRouteObject || !that.activeRouteObject.hasRoute(route)) {
-            that.activeRouteObject = new RouteObject(route, args);
-          }
-
-          const routeObject = that.activeRouteObject;
-          const component = routeObject.routeCallback(route, args);
-          that.currentRouteOptions = {
-            selectedHeader: this.activeRouteObject.selectedHeader,
-            component,
-            roles,
-            route: route.toString()
-          };
-          that.trigger('new-component', this.currentRouteOptions);
-        }, () => {/* do nothing on reject*/ });
-      });
-    });
-  },
-
-  setModuleRoutes: function (addons) {
-    _.each(addons, (module) => {
-      if (module) {
-        module.initialize();
-        // This is pure routes the addon provides
-        if (module.RouteObjects) {
-          _.each(module.RouteObjects, this.addModuleRouteObject.bind(this));
-        }
-      }
-    });
-  },
-
-  initialize: function (addons) {
-    this.addons = addons;
-    // NOTE: This must be below creation of the layout
-    // FauxtonAPI header links and others depend on existence of the layout
-    this.setModuleRoutes(addons);
-
-    this.lastPages = [];
-    //keep last few pages visited in Fauxton
-    Backbone.history.on('route', function () {
-      this.lastPages.push(Backbone.history.fragment);
-      if (this.lastPages.length > 5) {
-        this.lastPages.shift();
-      }
-    }, this);
-  }
-});
diff --git a/app/core/store.js b/app/core/store.js
deleted file mode 100644
index 979ce0b..0000000
--- a/app/core/store.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Licensed 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.
-
-import Backbone from "backbone";
-import _ from "lodash";
-
-var Store = function () {
-  this.initialize.apply(this, arguments);
-  _.bindAll(this);
-};
-
-Store.extend = Backbone.Model.extend;
-_.extend(Store.prototype, Backbone.Events, {
-  triggerChange: function () {
-    this.trigger('change');
-  },
-
-  initialize: function () {}
-});
-
-export default Store;
diff --git a/app/core/utils.js b/app/core/utils.js
deleted file mode 100644
index d743107..0000000
--- a/app/core/utils.js
+++ /dev/null
@@ -1,147 +0,0 @@
-// Licensed 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.
-
-
-// This file creates a set of helper functions that will be loaded for all html
-// templates. These functions should be self contained and not rely on any
-// external dependencies as they are loaded prior to the application. We may
-// want to change this later, but for now this should be thought of as a
-// "purely functional" helper system.
-
-
-import _ from 'lodash';
-import param from 'jquery-param-fn';
-
-const utils = {
-
-  // Thanks to: http://stackoverflow.com/a/2880929
-  getParams: function (queryString) {
-    if (queryString) {
-      // I think this could be combined into one if
-      if (queryString.substring(0, 1) === '?') {
-        queryString = queryString.substring(1);
-      } else if (queryString.indexOf('?') > -1) {
-        queryString = queryString.split('?')[1];
-      }
-    }
-    const hash = window.location.hash.split('?')[1];
-    queryString = queryString || hash || window.location.search.substring(1);
-    const urlParams = {},
-          pl = /\+/g,  // Regex for replacing addition symbol with a space
-          search = /([^&=]+)=?([^&]*)/g,
-          decode = function (s) { return decodeURIComponent(s.replace(pl, ' ')); },
-          query = queryString;
-
-    if (queryString) {
-      let match;
-      while ((match = search.exec(query))) {
-        urlParams[decode(match[1])] = decode(match[2]);
-      }
-    }
-
-    return urlParams;
-  },
-
-  removeSpecialCharacters: function (name) {
-    return name.replace(/[^\w\s]/gi, '');
-  },
-
-  safeURLName: function (name = '') {
-    // These special caracters are allowed by couch: _, $, (, ), +, -, and /
-    // From them only $ + and / are to be escaped in a URI component.
-    // return (/[$+/]/g.test(name)) ? encodeURIComponent(name) : name;
-    return encodeURIComponent(name);
-  },
-
-  queryParams: function (obj) {
-    //Simulates jQuery.param()
-    return param(obj);
-  },
-
-  queryString: function (obj) {
-    //Similar to queryParams() but skips object properties
-    //that are undefined
-    Object.keys(obj).forEach((key) => {
-      if (obj[key] === undefined) {
-        delete obj[key];
-      }
-    });
-    return param(obj);
-  },
-
-  getDocTypeFromId: function (id) {
-    if (id && /^_design\//.test(id)) {
-      return 'design doc';
-    }
-
-    return 'doc';
-  },
-
-  isSystemDatabase: function (id) {
-    return (/^_/).test(id);
-  },
-
-  // Need this to work around backbone router thinking _design/foo
-  // is a separate route. Alternatively, maybe these should be
-  // treated separately. For instance, we could default into the
-  // json editor for docs, or into a ddoc specific page.
-  getSafeIdForDoc: function (id) {
-    if (utils.getDocTypeFromId(id) === 'design doc') {
-      const ddoc = id.replace(/^_design\//, '');
-      return '_design/' + utils.safeURLName(ddoc);
-    }
-
-    return utils.safeURLName(id);
-  },
-
-  // a pair of simple local storage wrapper functions. These ward against problems getting or
-  // setting (e.g. local storage full) and allow you to get/set complex data structures
-  localStorageSet: function (key, value) {
-    if (_.isObject(value) || _.isArray(value)) {
-      value = JSON.stringify(value);
-    }
-    let success = true;
-    try {
-      window.localStorage.setItem(key, value);
-    } catch (e) {
-      success = false;
-    }
-    return success;
-  },
-
-  localStorageGet: function (key) {
-    let data;
-    if (_.has(window.localStorage, key)) {
-      data = window.localStorage[key];
-      try {
-        return JSON.parse(data);
-      } catch (e) {
-        return data;
-      }
-    }
-    return data;
-  },
-
-  stripHTML: function (str) {
-
-    if (!document) {
-      //not in browser, this should be ignored when testing in jest
-      return str;
-    }
-
-    const tmpElement = document.createElement('div');
-    tmpElement.innerHTML = str;
-    return tmpElement.textContent || tmpElement.innerText;
-  }
-};
-
-export default utils;
diff --git a/app/helpers.js b/app/helpers.js
deleted file mode 100644
index 53bef2a..0000000
--- a/app/helpers.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// Licensed 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.
-
-
-// This file creates a set of helper functions that will be loaded for all html
-// templates. These functions should be self contained and not rely on any
-// external dependencies as they are loaded prior to the application. We may
-// want to change this later, but for now this should be thought of as a
-// "purely functional" helper system.
-
-import constants from "./constants";
-import app from "./initialize";
-import utils from "./core/utils";
-import moment from "moment";
-import url from "url";
-import {get} from "./core/ajax";
-import _ from 'lodash';
-
-var Helpers = {};
-
-Helpers.removeSpecialCharacters = utils.removeSpecialCharacters;
-
-Helpers.safeURL = utils.safeURLName;
-
-Helpers.imageUrl = function (path) {
-  // TODO: add dynamic path for different deploy targets
-  return path;
-};
-
-Helpers.getDocUrl = function (key) {
-  return (_.has(constants.DOC_URLS, key)) ? constants.DOC_URLS[key] : '#';
-};
-
-// File size pretty printing, taken from futon.format.js
-Helpers.formatSize = function (size, decimals = 1) {
-  var jump = 512;
-  if (size < jump) return size + " bytes";
-  var units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
-  var i = 0;
-  while (size >= jump && i < units.length) {
-    i += 1;
-    size /= 1024;
-  }
-  return size.toFixed(decimals) + ' ' + units[i - 1];
-};
-
-Helpers.formatDate = function (timestamp) {
-  return moment(timestamp, 'X').format('MMM Do, h:mm:ss a');
-};
-Helpers.getDateFromNow = function (timestamp) {
-  return moment(timestamp, 'X').fromNow();
-};
-
-Helpers.escapeJQuerySelector = function (selector) {
-  return selector && selector.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, "\\$&");
-};
-
-Helpers.getApiUrl = endpointRoute => {
-  if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
-    endpointRoute = endpointRoute.substr(1);
-  }
-  return url.resolve(window.location.href, app.host + endpointRoute);
-};
-
-Helpers.getServerUrl = endpointRoute => {
-  if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
-    endpointRoute = endpointRoute.substr(1);
-  }
-  return app.host + endpointRoute;
-};
-
-Helpers.getRootUrl = ({origin, pathname} = window.location) => {
-  return url.resolve(origin + pathname, app.host);
-};
-
-Helpers.getUUID = function (count = 1) {
-  const url = Helpers.getServerUrl(`/_uuids?count=${count}`);
-  return get(url);
-};
-
-/**
- * Determine if the current application is running on IE10 or IE11
- * @returns {boolean} True if on IE10 or IE11. Otherwise false.
- */
-Helpers.isIE1X = function() {
-  return document.documentMode == 11 || document.documentMode == 10;
-};
-
-export default Helpers;
diff --git a/app/initialize.js.underscore b/app/initialize.js.underscore
deleted file mode 100644
index 9b2014d..0000000
--- a/app/initialize.js.underscore
+++ /dev/null
@@ -1,29 +0,0 @@
-/* eslint-disable */
-
-// Licensed 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.
-
-/*
- * ::WARNING::
- * THIS IS A GENERATED FILE. DO NOT EDIT.
- */
-
-// Provide a global location to place configuration settings and module
-// creation.
-export default {
-  // The root path to run the application.
-  root: "<%= root %>",
-  version: "<%= version %>",
-  // Host is used as prefix for urls
-  host: "<%= host %>",
-  i18n: <%= i18n %>
-};
diff --git a/app/load_addons.js.underscore b/app/load_addons.js.underscore
deleted file mode 100644
index ca6593b..0000000
--- a/app/load_addons.js.underscore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed 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.
-
-
-/*
- * ::WARNING::
- * THIS IS A GENERATED FILE. DO NOT EDIT.
- */
-
-<% deps.forEach(function (dep, i) { %>
-<%= 'import { default as addon_' + i + ' } from "' + dep + '";' %>
-<% }); %>
-
-export default [
-  <% deps.forEach(function (dep, i) { %>
-    <%= 'addon_' + i + ',' %>
-  <% }); %>
-];
diff --git a/app/main.js b/app/main.js
deleted file mode 100644
index 4089e77..0000000
--- a/app/main.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed 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.
-
-import app from './app';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import FauxtonAPI from './core/api';
-import LoadAddons from './load_addons';
-import Backbone from 'backbone';
-import $ from 'jquery';
-import AppWrapper from './addons/fauxton/appwrapper';
-
-import { createStore, applyMiddleware, combineReducers } from 'redux';
-import thunk from 'redux-thunk';
-import { Provider } from 'react-redux';
-
-FauxtonAPI.addMiddleware(thunk);
-const store = createStore(
-  combineReducers(FauxtonAPI.reducers),
-  applyMiddleware(...FauxtonAPI.middlewares)
-);
-FauxtonAPI.reduxDispatch = (action) => {
-  store.dispatch(action);
-};
-FauxtonAPI.reduxState = () => {
-  return store.getState();
-};
-
-app.addons = LoadAddons;
-FauxtonAPI.router = app.router = new FauxtonAPI.Router(app.addons);
-// Trigger the initial route and enable HTML5 History API support, set the
-// root folder to '/' by default.  Change in app.js.
-Backbone.history.start({ pushState: false, root: app.root });
-
-// feature detect IE
-if ('ActiveXObject' in window) {
-  $.ajaxSetup({ cache: false });
-}
-
-// Walks up the element tree to look for a link to see if it is part
-// of the click nodes
-const findLink = (target) => {
-  if (!target) {
-    return null;
-  }
-
-  if (target.tagName === 'A') {
-    return target;
-  }
-  return findLink(target.parentNode);
-};
-// All navigation that is relative should be passed through the navigate
-// method, to be processed by the router. If the link has a `data-bypass`
-// attribute, bypass the delegation completely.
-document.addEventListener("click", evt => {
-
-  const target = findLink(evt.target);
-  if (!target) {
-    return;
-  }
-  //"a:not([data-bypass])"
-  const dataBypass = target.getAttribute('data-bypass');
-  if (dataBypass) {
-    return;
-  }
-
-  // Get the absolute anchor href.
-  const href = { prop: target.href, attr: target.getAttribute("href") };
-  if (!href.prop) {
-    return;
-  }
-
-  // Get the absolute root
-  const root = location.protocol + "//" + location.host;
-
-  // Ensure the root is part of the anchor href, meaning it's relative
-  if (href.prop && href.prop.slice(0, root.length) === root) {
-    // Stop the default event to ensure the link will not cause a page
-    // refresh.
-    evt.preventDefault();
-
-    //User app navigate so that navigate goes through a central place
-    app.router.navigate(href.attr, true);
-  }
-});
-
-ReactDOM.render(
-  <Provider store={store}>
-    <AppWrapper router={app.router}/>
-  </Provider>,
-  document.getElementById('app')
-);
diff --git a/assets/fonts/FontAwesome.otf b/assets/fonts/FontAwesome.otf
deleted file mode 100644
index 7012545..0000000
--- a/assets/fonts/FontAwesome.otf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/Gemfile b/assets/fonts/Gemfile
deleted file mode 100644
index 8af80b1..0000000
--- a/assets/fonts/Gemfile
+++ /dev/null
@@ -1,6 +0,0 @@
-source 'https://rubygems.org'
-
-gem 'fontcustom', 
-:git => 'https://github.com/benkeen/fontcustom.git',
-:branch => 'master'
-
diff --git a/assets/fonts/README.md b/assets/fonts/README.md
deleted file mode 100644
index 02a11b8..0000000
--- a/assets/fonts/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-*WARNING:  this is a temporary solution for adding icons to the Icon Font. This will become a grunt task eventually.*
-
-This is a temp solution till Fontcustom fixes this [BUG](https://github.com/FontCustom/fontcustom/issues/172)<br>
-
-### Installation
-
-1. Requires **Bundler.io**, **Ruby 1.9.2+**, **FontForge** with Python scripting.
-
-```sh
-# On Mac
-$ gem install bundler
-$ brew install fontforge eot-utils
-$ cd [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts
-$ bundle
-```
-
-That should install the gem in a path like below:
-/Users/[USERNAME]/.rvm/gems/[RUBYVERSION]/bundler/gems/fontcustom
-
-2. Update `fontcustom.yml` with the correct paths where it says `PUT_YOUR_PATH_HERE`.
-
-3. Update the `font_name` value to generate a new filename for the font files. This is necessary for browser cache-busting.
-
-4. Add your new font(s) in SVG format to the `assets/icons` folder.
-
-5. If Gemfile.lock exists, delete it. The run `bundle install`
-
-6. Run the command `bundle exec fontcustom compile`. That generates the following:
-
-- an `icons.less` file [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/less
-- a `fauxtonicon-preview.html` preview [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts/styleguide
-- font files in [LOCAL_COUCHDB_REPO]/src/couchdb-fauxton/assets/fonts/
-  * `[font name].eot` 
-  * `[font name].svg`
-  * `[font name].ttf`
-  * `[font name].woff` 
-
-7. Delete the old fauxtoniconX.*** files, and ./styleguide/fauxtoniconX-preview.html file.
-
-For more info on Fontcustom, check out their documenation: [Fontcustom documentation](https://github.com/FontCustom/fontcustom)
-
-For more info on Bundler, check out their documentation:  [Bundler documentation](http://bundler.io)
-
-
-[Licenses](https://github.com/FontCustom/fontcustom/blob/master/LICENSES.txt)
diff --git a/assets/fonts/fauxtonicon5.eot b/assets/fonts/fauxtonicon5.eot
deleted file mode 100644
index 2db254f..0000000
--- a/assets/fonts/fauxtonicon5.eot
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fauxtonicon5.svg b/assets/fonts/fauxtonicon5.svg
deleted file mode 100644
index 7a9d1a7..0000000
--- a/assets/fonts/fauxtonicon5.svg
+++ /dev/null
@@ -1,729 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2016-5-16: Created with FontForge (http://fontforge.org)
--->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
-<metadata>
-Created by FontForge 20150302 at Mon May 16 09:51:56 2016
- By Ben Keen
-Copyright (c) 2016, Ben Keen
-</metadata>
-<defs>
-<font id="fauxtonicon5" horiz-adv-x="512" >
-  <font-face 
-    font-family="fauxtonicon5"
-    font-weight="400"
-    font-stretch="normal"
-    units-per-em="512"
-    panose-1="2 0 5 9 0 0 0 0 0 0"
-    ascent="448"
-    descent="-64"
-    bbox="-0.0730828 -64.6562 585.143 448.515"
-    underline-thickness="25.6"
-    underline-position="-51.2"
-    unicode-range="U+F100-F177"
-  />
-    <missing-glyph />
-    <glyph glyph-name="uniF108" unicode="&#xf108;" 
-d="M219.648 412.16c39.5944 0 76.2874 -9.89876 110.079 -29.6963c33.7923 -19.7975 60.4163 -46.4215 79.8721 -79.8721c19.4564 -33.4505 29.1846 -70.1439 29.1846 -110.08c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963zM256 55.8076v54.2725c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.75521 2.55957 -6.14453 2.55957h-54.7842
-c-2.73047 0 -4.94889 -0.85319 -6.65527 -2.55957c-1.70703 -1.70703 -2.73112 -3.92578 -3.07227 -6.65625v-54.2725c0 -2.73047 1.02409 -4.94889 3.07227 -6.65527c2.04753 -1.70703 4.26595 -2.73112 6.65527 -3.07227h54.7842
-c2.38932 0 4.4375 1.02409 6.14453 3.07227c1.70638 2.04753 2.55957 4.26595 2.55957 6.65527zM255.488 154.112l5.12012 177.151c0 2.38932 -1.02409 4.09603 -3.07227 5.12012c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-62.9756
-c-2.73112 0 -4.94987 -0.853516 -6.65625 -2.56055c-2.04818 -1.02409 -3.07227 -2.73079 -3.07227 -5.12012l5.12012 -177.151c0 -2.04818 0.853516 -3.75488 2.56055 -5.12012c1.70638 -1.36523 4.0957 -2.04785 7.16797 -2.04785h52.7354
-c2.73112 0 4.94987 0.682617 6.65625 2.04785s2.73047 3.07194 3.07227 5.12012z" />
-    <glyph glyph-name="uniF12A" unicode="&#xf12a;" 
-d="M201.216 89.5996v-68.6074c0 -3.07227 -1.19466 -5.80306 -3.58398 -8.19238s-4.94922 -3.41341 -7.67969 -3.07227h-68.6084c-3.07161 0 -5.80208 1.02409 -8.19141 3.07227s-3.58398 4.77897 -3.58398 8.19238v68.6074c0 3.07227 1.19466 5.80306 3.58398 8.19238
-s5.11979 3.41341 8.19141 3.07227h68.6084c2.73047 0 5.29036 -1.02409 7.67969 -3.07227s3.58398 -4.77897 3.58398 -8.19238zM291.328 261.12c0 -10.2402 -1.36523 -19.7975 -4.0957 -28.6719c-2.73112 -8.875 -6.14453 -16.2139 -10.2402 -22.0166
-c-4.09635 -5.80273 -9.38704 -11.4346 -15.8721 -16.8955c-6.48568 -5.46159 -11.9469 -9.72819 -16.3838 -12.7998c-4.4375 -3.07227 -10.2402 -6.3151 -17.4082 -9.72852c-7.85091 -4.4375 -14.3363 -10.752 -19.4561 -18.9434
-c-5.11979 -8.19206 -7.67969 -14.5068 -7.67969 -18.9443c0 -3.41341 -1.19466 -6.48535 -3.58398 -9.21582c-2.38932 -2.73112 -5.12012 -4.26725 -8.19238 -4.6084h-68.6084c-2.73047 0 -5.11979 1.70671 -7.16797 5.12012
-c-2.04753 3.41341 -3.07129 6.9974 -3.07129 10.752v13.3125c0 15.7012 6.31445 30.5492 18.9434 44.5439c12.6296 13.9941 26.1123 24.234 40.4482 30.7197c11.2643 5.11979 19.2858 10.5811 24.0645 16.3838s7.16797 12.9707 7.16797 21.5039
-c0 7.85091 -4.4375 14.8483 -13.3125 20.9922c-8.87435 6.14388 -19.1143 9.21582 -30.7197 9.21582c-12.2884 0 -22.5283 -2.73047 -30.7197 -8.19141c-6.82682 -4.77865 -17.0671 -15.7015 -30.7207 -32.7686c-2.38932 -3.07161 -5.29069 -4.60742 -8.7041 -4.60742
-c-2.38932 0 -4.77865 0.682617 -7.16797 2.04785l-46.5918 35.8398c-2.73047 2.04818 -4.26628 4.4375 -4.60742 7.16797c-0.341797 2.73047 0.169922 5.46094 1.53516 8.19141c30.3789 50.5176 74.5817 75.7764 132.608 75.7764c15.36 0 30.7201 -2.90137 46.0801 -8.7041
-s29.1839 -13.6533 41.4717 -23.5518c12.2884 -9.89844 22.3577 -22.1865 30.208 -36.8643c7.85091 -14.6771 11.7764 -29.6956 11.7764 -45.0557z" />
-    <glyph glyph-name="uniF133" unicode="&#xf133;" 
-d="M0 192.512l75.7764 76.2881l180.224 179.712l75.7764 -75.7754l-179.712 -180.225l179.712 -180.224l-75.7764 -75.7764l-180.224 180.225z" />
-    <glyph glyph-name="uniF107" unicode="&#xf107;" 
-d="M146.432 92.1602v-64c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998c-3.75456 -3.41341 -8.02116 -5.29102 -12.7998 -5.63281h-73.2158c-4.77865 0 -9.04525 1.8776 -12.7998 5.63281c-3.75521 3.75456 -5.63281 8.02116 -5.63281 12.7998v64
-c0 4.77865 1.8776 9.04525 5.63281 12.7998c3.75456 3.75456 8.02116 5.46126 12.7998 5.12012h73.2158c5.11979 0 9.38639 -1.70671 12.7998 -5.12012s5.29069 -7.68001 5.63184 -12.7998zM154.624 393.728l-7.67969 -219.647
-c-0.341797 -4.77865 -2.38997 -9.04525 -6.14453 -12.7998s-8.02116 -5.46126 -12.7998 -5.12012h-73.2158c-4.77865 0 -9.04525 1.70671 -12.7998 5.12012c-3.75521 3.41341 -5.80339 7.68001 -6.14453 12.7998l-7.67969 219.647
-c-0.341146 4.7793 1.19466 9.04622 4.60742 12.8008c3.41341 3.75456 7.68034 5.63184 12.8008 5.63184h91.6475c4.77865 0 9.04525 -1.87728 12.7998 -5.63184c3.75521 -3.75456 5.29134 -8.02148 4.6084 -12.8008z" />
-    <glyph glyph-name="uniF138" unicode="&#xf138;" 
-d="M512 245.76v-226.815c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.4831 -32.2568 -13.8242h-420.863c-12.2884 0 -23.0407 4.60807 -32.2568 13.8242c-9.21549 9.21549 -13.6527 19.9674 -13.3115 32.2559v226.815
-c8.5332 -9.55729 18.0905 -17.9199 28.6719 -25.0879c68.9492 -46.7624 116.395 -79.5303 142.336 -98.3037c10.9225 -8.19206 19.6266 -14.5068 26.1123 -18.9443c6.48503 -4.4375 15.5303 -9.04557 27.1357 -13.8242s22.0163 -6.99707 31.2324 -6.65527h1.02344
-c9.55729 0 19.9681 2.21842 31.2324 6.65527c11.2637 4.4375 20.3089 9.04557 27.1357 13.8242s15.5309 11.0934 26.1123 18.9443c32.4264 23.2103 79.8717 55.9782 142.336 98.3037c10.9225 7.50911 20.4798 15.8717 28.6719 25.0879zM512 329.728
-c0 -15.0182 -4.60807 -29.3542 -13.8242 -43.0078c-9.21615 -13.653 -20.8213 -25.429 -34.8154 -35.3281c-71.6803 -49.8346 -116.395 -80.7253 -134.145 -92.6719c-1.70638 -1.36523 -5.63151 -4.2666 -11.7754 -8.7041
-c-6.14453 -4.43685 -11.2646 -8.19141 -15.3604 -11.2637c-4.09635 -3.07227 -9.04557 -6.14421 -14.8477 -9.21582c-5.80273 -3.07227 -11.4349 -5.63216 -16.8965 -7.67969c-5.46159 -2.04818 -10.0697 -2.90169 -13.8242 -2.56055h-1.02344
-c-4.09635 0 -8.70443 0.853516 -13.8242 2.56055c-5.11979 1.70638 -10.752 4.26628 -16.8965 7.67969c-6.14388 3.41341 -11.0931 6.48535 -14.8477 9.21582s-8.87467 6.48503 -15.3604 11.2637c-6.48503 4.77865 -10.4102 7.68001 -11.7754 8.7041
-c-17.4082 11.9466 -42.4964 29.1839 -75.2646 51.7119c-32.7676 22.528 -52.2233 36.1813 -58.3672 40.96c-11.9466 7.85091 -23.04 18.7738 -33.2803 32.7686s-15.5309 27.1361 -15.8721 39.4238c0 14.6771 3.92546 26.9652 11.7764 36.8643
-c7.85026 9.89844 19.1143 14.8477 33.792 14.8477h420.863c12.2884 0 22.8698 -4.43717 31.7441 -13.3115c8.875 -8.875 13.4831 -19.6273 13.8242 -32.2568z" />
-    <glyph glyph-name="uniF146" unicode="&#xf146;" 
-d="M208.766 -59.6162c-46.3301 0 -89.874 18.0889 -122.595 50.8799c-32.7598 32.7432 -50.8096 76.2324 -50.8096 122.586c0.0302734 46.3223 18.0498 89.8584 50.8096 122.58l175.544 171.749c47.1777 47.2002 130.493 47.3848 178.093 -0.253906
-c49.1084 -49.1934 49.1084 -129.184 0 -178.322l-157.979 -154.101c-30.4199 -30.4355 -80.4199 -30.4961 -111.148 0.276367c-30.7285 30.79 -30.7285 80.7598 0 111.479l61.1465 61.1553l44.583 -44.582l-61.1465 -61.1475
-c-4.04199 -4.06348 -4.61914 -8.74414 -4.61914 -11.1465c0 -2.43066 0.577148 -7.11133 4.61914 -11.1758c8.06641 -8.03613 14.2168 -8.03613 22.291 0l157.888 154.123c24.3232 24.292 24.3232 64.2871 -0.24707 88.8965c-23.8301 23.8311 -65.334 23.8311 -89.165 0
-l-175.529 -171.766c-20.5908 -20.6211 -32.082 -48.3018 -32.082 -77.7656c0 -29.4971 11.4912 -57.2051 32.3281 -78.0195c41.6963 -41.7354 114.359 -41.7354 156.039 0l78.8203 78.8203l44.5527 -44.5674l-78.8213 -78.8193
-c-32.7275 -32.7617 -76.2568 -50.8799 -122.571 -50.8799z" />
-    <glyph glyph-name="uniF137" unicode="&#xf137;" 
-d="M475.648 18.9443v219.136c-6.14453 -6.82682 -12.8008 -13.1416 -19.9688 -18.9443c-50.8587 -38.9121 -91.4772 -70.9974 -121.855 -96.2559c-9.55729 -8.19206 -17.4079 -14.6774 -23.5518 -19.4561c-6.14453 -4.77865 -14.3366 -9.38672 -24.5762 -13.8242
-c-10.2402 -4.43685 -19.9684 -6.65527 -29.1846 -6.65527h-1.02344c-8.875 0 -18.6032 2.21842 -29.1846 6.65527c-10.5814 4.4375 -18.7734 9.04557 -24.5762 13.8242c-5.80208 4.77865 -13.6527 11.264 -23.5518 19.4561
-c-30.0371 25.2585 -70.6556 57.3438 -121.855 96.2559c-7.16797 5.80273 -13.8242 12.1175 -19.9688 18.9443v-219.136c0 -2.73112 1.02409 -4.94987 3.07227 -6.65625c2.04818 -1.70703 4.09635 -2.56055 6.14453 -2.56055h420.863
-c2.38932 0 4.4375 0.853516 6.14453 2.56055c1.70638 1.70638 2.73047 3.92513 3.07227 6.65625zM475.648 318.976v7.16797l-0.512695 3.58398l-0.511719 3.58398l-1.53613 2.56055l-2.55957 2.04785l-4.09668 1.02441h-420.863
-c-2.38932 0 -4.4375 -1.02409 -6.14453 -3.07227c-1.70638 -2.04818 -2.73047 -4.09635 -3.07227 -6.14453c0 -32.0853 13.9948 -59.221 41.9844 -81.4072c36.8639 -29.0137 75.0934 -59.2217 114.688 -90.624c1.36523 -0.682943 4.77832 -3.41374 10.2393 -8.19238
-c5.46159 -4.77865 9.72852 -8.36263 12.8008 -10.752c3.07161 -2.38932 7.33822 -5.46126 12.7998 -9.21582c5.46094 -3.75456 10.2396 -6.31445 14.3359 -7.67969c4.0957 -1.36589 8.19173 -2.2194 12.2881 -2.56055h1.02344c3.75456 0 7.85059 0.853516 12.2881 2.56055
-c4.4375 1.70638 9.21615 4.26628 14.3359 7.67969c5.12044 3.41341 9.38704 6.48535 12.7998 9.21582c3.41341 2.73047 7.68034 6.31445 12.8008 10.752c5.11979 4.4375 8.53288 7.16829 10.2393 8.19238c39.5951 31.4023 77.8245 61.6104 114.688 90.624
-c10.2402 8.19206 19.7975 19.2852 28.6719 33.2793c8.875 13.9948 13.3125 26.4535 13.3125 37.376zM512 329.728v-310.783c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.4831 -32.2568 -13.8242h-420.863
-c-12.2884 0 -23.0407 4.60807 -32.2568 13.8242c-9.21549 9.21549 -13.6527 19.9674 -13.3115 32.2559v310.783c0 12.6296 4.43717 23.3818 13.3115 32.2568c8.875 8.87435 19.6273 13.3115 32.2568 13.3115h420.863c12.6296 0 23.3818 -4.43717 32.2568 -13.3115
-c8.87435 -8.875 13.3115 -19.6273 13.3115 -32.2568z" />
-    <glyph glyph-name="uniF126" unicode="&#xf126;" 
-d="M456 339.429c5.33333 -5.33333 9.90462 -12.5716 13.7139 -21.7148c3.8099 -9.14258 5.71484 -17.5234 5.71484 -25.1426v-329.143c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-384c-7.61914 0 -14.0954 2.66667 -19.4287 8
-s-8 11.8096 -8 19.4287v457.143c0 7.61914 2.66667 14.0954 8 19.4287s11.8096 8 19.4287 8h256c7.61914 0 16 -1.90462 25.1426 -5.71387c9.14323 -3.8099 16.3815 -8.38151 21.7148 -13.7148zM329.143 409.143v-107.429h107.429
-c-1.90495 5.52409 -4 9.42904 -6.28516 11.7148l-89.4287 89.4287c-2.28581 2.28581 -6.19076 4.38086 -11.7148 6.28516zM438.857 -27.4287v292.571h-118.857c-7.61914 0 -14.0954 2.66667 -19.4287 8s-8 11.8096 -8 19.4287v118.857h-219.429v-438.857h365.715z
-M173.714 228.571c1.52409 2.09505 3.52409 3.28548 6 3.57129c2.47656 0.285807 4.76237 -0.333008 6.85742 -1.85645l14.5713 -10.8574c2.0957 -1.52409 3.28613 -3.52409 3.57129 -6c0.285807 -2.47656 -0.333008 -4.76237 -1.85645 -6.85742l-52 -69.4287l52 -69.4287
-c1.52344 -2.09505 2.14225 -4.38053 1.85645 -6.85645c-0.285156 -2.47656 -1.47559 -4.47656 -3.57129 -6l-14.5713 -10.8574c-2.09505 -1.52409 -4.38086 -2.14323 -6.85742 -1.85742c-2.47591 0.285807 -4.47591 1.47624 -6 3.57129l-64.5713 86
-c-2.66667 3.61914 -2.66667 7.23828 0 10.8574zM402.857 142.571c2.66667 -3.61914 2.66667 -7.23828 0 -10.8574l-64.5713 -86c-1.52409 -2.09505 -3.52409 -3.28548 -6 -3.57129c-2.47656 -0.285807 -4.76237 0.333333 -6.85742 1.85742l-14.5713 10.8574
-c-2.0957 1.52344 -3.28613 3.52344 -3.57129 6c-0.285807 2.47591 0.333008 4.76139 1.85645 6.85645l52 69.4287l-52 69.4287c-1.52344 2.09505 -2.14225 4.38086 -1.85645 6.85742c0.285156 2.47591 1.47559 4.47591 3.57129 6l14.5713 10.8574
-c2.09505 1.52344 4.38086 2.14225 6.85742 1.85645c2.47591 -0.285807 4.47591 -1.47624 6 -3.57129zM225.714 10.8574c-2.47591 0.380859 -4.42806 1.61882 -5.85645 3.71387c-1.42904 2.09505 -1.9528 4.38086 -1.57129 6.85742l39.4277 237.429
-c0.38151 2.47591 1.61979 4.42806 3.71484 5.85645c2.09505 1.42904 4.38086 1.95312 6.85742 1.57227l18 -2.85742c2.47591 -0.380859 4.42806 -1.61914 5.85645 -3.71484c1.42904 -2.09505 1.9528 -4.38053 1.57129 -6.85645l-39.4277 -237.429
-c-0.38151 -2.47656 -1.61979 -4.42904 -3.71484 -5.85742s-4.38086 -1.95215 -6.85742 -1.57129z" />
-    <glyph glyph-name="uniF121" unicode="&#xf121;" 
-d="M0 282.624l75.7764 75.7764l180.224 -179.712l180.224 179.712l75.7764 -75.7764l-256 -256l-75.7764 75.7764z" />
-    <glyph glyph-name="uniF120" unicode="&#xf120;" 
-d="M292.352 247.296c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998l-128 -128c-3.75521 -3.75456 -8.02214 -5.63184 -12.8008 -5.63184s-9.04525 1.87728 -12.7998 5.63184l-128 128c-3.75456 3.75456 -5.63184 8.02116 -5.63184 12.7998
-s1.87728 9.04525 5.63184 12.7998c3.75456 3.75456 8.02116 5.63184 12.7998 5.63184h256c4.77865 0 9.04557 -1.87728 12.8008 -5.63184c3.75456 -3.75456 5.46094 -8.02116 5.11914 -12.7998z" />
-    <glyph glyph-name="uniF144" unicode="&#xf144;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM93.1836 163.328l107.009 -107.008l52.7354 53.248l165.889 165.888l-52.7363 53.248l-165.888 -166.4
-l-54.2725 54.2725z" />
-    <glyph glyph-name="uniF122" unicode="&#xf122;" 
-d="M192 416.768h128v-128h-128v128zM192 256.512h128v-128h-128v128zM192 96.7676h128v-128.512h-128v128.512z" />
-    <glyph glyph-name="uniF11E" unicode="&#xf11e;" 
-d="M466.432 193.024l-228.863 -229.376l-228.353 229.376l80.8965 80.8955l90.624 -90.1123v237.568h114.176v-237.568l90.1123 89.6006z" />
-    <glyph glyph-name="uniF14E" unicode="&#xf14e;" 
-d="M329.216 220.16v-18.4326c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-100.352v-100.352c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957
-h-18.4316c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v100.352h-100.353c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v18.4326
-c0 2.38932 0.853516 4.43717 2.56055 6.14355c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055h100.353v100.863c0 2.73112 0.85319 4.94987 2.55957 6.65625c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h18.4316c2.73112 0 4.94987 -0.853516 6.65625 -2.56055
-c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625v-100.863h100.352c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527v0.511719zM365.568 92.1602v237.567c0 12.6296 -4.4375 23.3818 -13.3125 32.2568
-c-8.87435 8.87435 -19.6263 13.3115 -32.2559 13.3115h-237.568c-12.6289 0 -23.3809 -4.43717 -32.2559 -13.3115c-8.87435 -8.875 -13.4824 -19.6273 -13.8242 -32.2568v-237.567c0 -12.6296 4.60807 -23.5524 13.8242 -32.7686
-c9.21615 -9.21549 19.9681 -13.6527 32.2559 -13.3115h237.568c12.6296 0 23.3815 4.43717 32.2559 13.3115c8.875 8.875 13.3125 19.7979 13.3125 32.7686zM402.432 329.728v-237.567c0 -22.8691 -8.02116 -42.3252 -24.0635 -58.3682
-c-16.043 -16.043 -35.499 -24.0645 -58.3682 -24.0645h-237.568c-22.8691 0 -42.3249 8.02148 -58.3672 24.0645c-16.043 16.043 -24.0645 35.499 -24.0645 58.3682v237.567c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762
-h237.568c22.528 0 41.984 -8.19206 58.3682 -24.5762s24.4053 -35.6696 24.0635 -57.8564z" />
-    <glyph glyph-name="uniF100" unicode="&#xf100;" 
-d="M292.352 46.0801h183.297v36.8643h-183.297v-36.8643zM182.784 192.512h292.864v36.3525h-292.864v-36.3525zM365.568 338.944h110.08v36.3516h-110.08v-36.3516zM512 100.864v-72.7041c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998
-c-3.75456 -3.41341 -8.02116 -5.29102 -12.7998 -5.63281h-475.137c-5.11979 0 -9.38639 1.8776 -12.7998 5.63281c-3.41341 3.75456 -5.29069 8.02116 -5.63184 12.7998v72.7041c0 5.11979 1.87728 9.55697 5.63184 13.3115
-c3.75456 3.75456 8.02116 5.46126 12.7998 5.12012h475.137c5.11979 0 9.38639 -1.70671 12.7998 -5.12012s5.29069 -7.85059 5.63184 -13.3115zM512 247.296v-73.2158c0 -4.77865 -1.87728 -9.04525 -5.63184 -12.7998s-8.02116 -5.46126 -12.7998 -5.12012h-475.137
-c-5.11979 0 -9.38639 1.70671 -12.7998 5.12012c-3.41341 3.41341 -5.29069 7.68001 -5.63184 12.7998v73.2158c0 5.11979 1.87728 9.38639 5.63184 12.7998c3.75456 3.41341 8.02116 5.29069 12.7998 5.63184h475.137c5.11979 0 9.38639 -1.87728 12.7998 -5.63184
-s5.29069 -8.02116 5.63184 -12.7998zM512 393.728v-73.2158c0 -5.11979 -1.87728 -9.38639 -5.63184 -12.7998s-8.02116 -5.29069 -12.7998 -5.63184h-475.137c-5.11979 0 -9.38639 1.87728 -12.7998 5.63184c-3.41341 3.75456 -5.29069 8.02116 -5.63184 12.7998v73.2158
-c0 4.7793 1.87728 9.04622 5.63184 12.8008c3.75456 3.75456 8.02116 5.63184 12.7998 5.63184h475.137c5.11979 0 9.38639 -1.87728 12.7998 -5.63184s5.29069 -8.02148 5.63184 -12.8008z" />
-    <glyph glyph-name="uniF16F" unicode="&#xf16f;" 
-d="M9.21582 193.536l228.353 227.84l228.863 -227.84l-81.4072 -81.4082l-90.1123 90.624v-239.104h-114.176v239.104l-90.624 -90.624z" />
-    <glyph glyph-name="uniF162" unicode="&#xf162;" 
-d="M398.464 368c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944zM480 113.536v140.944
-c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361zM304 160v-48h16v-48h-16h-64h-48v48h48v48h-48v64h48h64
-v-64zM256 256v48h48v-48h-48z" />
-    <glyph glyph-name="uniF164" unicode="&#xf164;" 
-d="M284.4 252.96v-121.904h-48.7686v97.5205h-24.3838v-97.5205h-48.7676v97.5205h-24.3848v-97.5205h-48.752v121.904h195.057zM406.304 179.808h24.3682v-48.7676h-48.752v48.7676h-24.3838v-48.7676h-48.7686v121.92h121.904v-48.7676h-24.3682v-24.3848z
-M357.536 204.192h23.4082v24.3838h-23.4082v-24.3838zM398.464 0h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944
-c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944
-c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF15C" unicode="&#xf15c;" 
-d="M164.352 192.512c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998l-128 -128c-3.75521 -3.75456 -8.02214 -5.63184 -12.8008 -5.63184s-9.04525 1.87728 -12.7998 5.63184c-3.75456 3.75456 -5.63184 8.02116 -5.63184 12.7998v256
-c0 5.12044 1.87728 9.38704 5.63184 12.7998c3.75456 3.41341 8.02116 5.29102 12.7998 5.63281c4.77865 0.341146 9.04557 -1.53646 12.8008 -5.63281l128 -128c3.41276 -3.41276 5.11914 -7.67936 5.11914 -12.7998z" />
-    <glyph glyph-name="uniF16D" unicode="&#xf16d;" 
-d="M146.432 238.08v-164.353c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-18.4316c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4316c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM219.648 238.08v-164.353
-c0 -2.73047 -0.853516 -4.94889 -2.56055 -6.65527c-1.70638 -1.70703 -3.92513 -2.56055 -6.65625 -2.56055h-18.4316c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4316c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM292.352 238.08v-164.353
-c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70638 -1.70703 -3.75423 -2.56055 -6.14355 -2.56055h-18.4326c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527v164.353
-c0 2.73047 0.85319 4.94922 2.55957 6.65625c1.70703 1.70638 3.92578 2.55957 6.65625 2.55957h18.4326c2.38932 0 4.43717 -0.85319 6.14355 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM329.216 31.2324v270.848h-256v-270.848
-c0 -4.09635 0.682617 -7.85124 2.04785 -11.2646s2.73079 -5.97331 4.09668 -7.67969c1.36523 -1.70703 2.389 -2.56055 3.07129 -2.56055h237.568c0.682943 0 1.70703 0.853516 3.07227 2.56055c1.36523 1.70638 2.73047 4.26628 4.0957 7.67969
-s2.04785 7.16829 2.04785 11.2646zM137.216 338.944h128l-13.8242 33.2793c-1.36523 1.70703 -2.90104 2.73112 -4.60742 3.07227h-90.624c-2.04818 -0.341146 -3.75488 -1.36523 -5.12012 -3.07227zM402.432 329.728v-18.4316
-c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-27.6475v-270.848c0 -15.7018 -4.4375 -29.3551 -13.3125 -40.96c-8.87435 -11.6055 -19.6263 -17.4082 -32.2559 -17.4082h-237.568
-c-12.6289 0 -23.3809 5.63184 -32.2559 16.8955c-8.87435 11.2643 -13.4824 24.7471 -13.8242 40.4482v271.872h-27.1357c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v18.4316
-c0 2.73112 0.85319 4.94987 2.55957 6.65625c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h88.0645l19.9678 47.6152c3.07227 7.16797 8.36296 13.1416 15.8721 17.9209c7.50911 4.77865 15.0186 7.33854 22.5283 7.67969h91.1357
-c7.50911 0 15.0182 -2.5599 22.5273 -7.67969c7.50977 -5.12044 12.6299 -11.0941 15.3604 -17.9209l19.9678 -47.6152h88.5762c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.92513 2.55957 -6.65625z" />
-    <glyph glyph-name="uniF145" unicode="&#xf145;" 
-d="M0 192c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1758 110.422 75.0931 180.736 74.752s130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4935 -109.568 -74.4108 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1758 -73.8984 110.592 -75.2637 181.248zM55.8076 192c0 -55.2962 19.627 -102.4 58.8809 -141.312
-c39.2533 -38.9121 86.3571 -58.5391 141.312 -58.8809c54.9544 -0.341146 102.058 19.2858 141.312 58.8809c39.2539 39.5944 58.8809 86.6982 58.8809 141.312s-19.627 101.717 -58.8809 141.312c-39.2533 39.5951 -86.3571 59.222 -141.312 58.8809
-c-54.9544 -0.341797 -102.058 -19.9688 -141.312 -58.8809c-39.2539 -38.9115 -58.8809 -86.0153 -58.8809 -141.312zM110.08 165.888l48.1279 47.1045l47.6162 -48.1279l147.968 148.992l48.1279 -47.6162l-148.992 -148.48l-47.1035 -47.6162l-47.6162 47.6162z" />
-    <glyph glyph-name="uniF102" unicode="&#xf102;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v384h-384v-384h384zM384 96.7676h-256l128 192z" />
-    <glyph glyph-name="uniF129" unicode="&#xf129;" 
-d="M240.941 207.059c0 19.0046 -6.72135 35.2279 -20.1641 48.6699c-13.4427 13.4427 -29.666 20.1641 -48.6699 20.1641c-19.0046 0 -35.2279 -6.72135 -48.6699 -20.1641c-13.4427 -13.4421 -20.1641 -29.6654 -20.1641 -48.6699
-c0 -19.0039 6.72135 -35.2272 20.1641 -48.6699c13.4421 -13.4427 29.6654 -20.1641 48.6699 -20.1641c19.0039 0 35.2272 6.72135 48.6699 20.1641s20.1641 29.666 20.1641 48.6699zM447.458 69.376c0 9.32617 -3.4082 17.3926 -10.2246 24.1992
-c-6.81706 6.80664 -14.8838 10.2152 -24.2002 10.2256c-9.31641 0.00976562 -17.3828 -3.39876 -24.1992 -10.2256c-6.81641 -6.82617 -10.2246 -14.8926 -10.2246 -24.1992c0 -9.4974 3.36296 -17.609 10.0889 -24.335c6.72656 -6.72656 14.8382 -10.0898 24.335 -10.0898
-c9.4974 0 17.609 3.36328 24.335 10.0898c6.72656 6.72591 10.0898 14.8376 10.0898 24.335zM447.458 344.741c0 9.32682 -3.4082 17.3936 -10.2246 24.2002c-6.81706 6.80664 -14.8838 10.2148 -24.2002 10.2246c-9.31641 0.0104167 -17.3828 -3.39779 -24.1992 -10.2246
-s-10.2246 -14.8936 -10.2246 -24.2002c0 -9.49674 3.36296 -17.6084 10.0889 -24.335c6.72656 -6.72591 14.8382 -10.0889 24.335 -10.0889c9.4974 0 17.609 3.36296 24.335 10.0889c6.72656 6.72656 10.0898 14.8382 10.0898 24.335zM344.199 231.529v-49.7539
-c0 -1.79753 -0.627279 -3.5446 -1.88184 -5.24121c-1.25521 -1.69661 -2.69076 -2.6403 -4.30664 -2.83105l-41.6836 -6.45996c-1.96745 -6.27474 -4.83366 -13.0863 -8.59863 -20.4346c6.0944 -8.60352 14.1611 -18.9137 24.2002 -30.9307
-c1.25456 -1.79753 1.88184 -3.58952 1.88184 -5.37598c0 -2.14844 -0.627279 -3.85026 -1.88184 -5.10547c-4.1263 -5.38086 -11.5202 -13.402 -22.1816 -24.0635c-10.6621 -10.6621 -17.6995 -15.998 -21.1123 -16.0078c-1.9681 0 -3.85059 0.627604 -5.64746 1.88281
-l-30.9307 24.1992c-6.63607 -3.40365 -13.5381 -6.18457 -20.7061 -8.34277c-1.96745 -19.3659 -4.0306 -33.2601 -6.18945 -41.6826c-1.25456 -4.30664 -3.94499 -6.45996 -8.07129 -6.45996h-50.0107c-1.96745 0 -3.75944 0.672526 -5.37598 2.01758
-c-1.61589 1.34505 -2.51432 2.91602 -2.69531 4.71289l-6.18945 41.1406c-6.09375 1.79753 -12.8148 4.57845 -20.1631 8.34277l-31.7295 -23.9277c-1.25456 -1.25521 -3.04655 -1.88281 -5.37598 -1.88281c-1.96745 0 -3.84961 0.717773 -5.64648 2.15332
-c-25.8112 23.8431 -38.7168 38.1842 -38.7168 43.0234c0 1.61589 0.627604 3.31738 1.88281 5.10449c1.79688 2.50977 5.47103 7.25846 11.0225 14.2461c5.55208 6.98698 9.76367 12.4531 12.6348 16.3984c-4.1263 7.89128 -7.26367 15.2402 -9.41211 22.0469
-l-40.8691 6.45996c-1.79688 0.180339 -3.32292 1.03353 -4.57812 2.55957c-1.25456 1.52604 -1.88184 3.27311 -1.88184 5.24121v49.7539c0 1.79688 0.627279 3.54362 1.88184 5.24023c1.25521 1.69661 2.69076 2.6403 4.30664 2.83105l41.6836 6.45996
-c1.96745 6.27474 4.83333 13.0866 8.59766 20.4355c-6.09375 8.60352 -14.1602 18.9137 -24.1992 30.9307c-1.25456 1.96745 -1.88184 3.75944 -1.88184 5.37598c0 2.14844 0.627279 3.94043 1.88184 5.37598c3.94531 5.38086 11.2939 13.3571 22.0459 23.9287
-c10.752 10.571 17.8346 15.8617 21.248 15.8721c1.9681 0 3.85059 -0.627604 5.64746 -1.88281l30.9307 -24.1992c6.09375 3.22266 12.9958 6.08887 20.7061 8.59863c1.96745 19.3652 4.0306 33.1689 6.18945 41.4111c1.25456 4.30729 3.94499 6.46094 8.07129 6.46094
-h50.0098c1.9681 0 3.76009 -0.672852 5.37598 -2.01855c1.61654 -1.34505 2.5153 -2.91602 2.69629 -4.71289l6.18848 -41.1406c6.0944 -1.79688 12.8158 -4.5778 20.1641 -8.34277l31.7295 23.9287c1.43555 1.25456 3.22754 1.88184 5.37598 1.88184
-c1.96745 0 3.84961 -0.717773 5.64648 -2.15332c25.8112 -23.8431 38.7168 -38.1839 38.7168 -43.0225c0 -1.61654 -0.627604 -3.31836 -1.88281 -5.10547c-2.14844 -2.87109 -5.91309 -7.70996 -11.2939 -14.5166s-9.41667 -12.1826 -12.1074 -16.1279
-c4.1263 -8.60352 7.17318 -15.9521 9.14062 -22.0459l40.8701 -6.18945c1.79688 -0.361328 3.32259 -1.30501 4.57715 -2.83105c1.25521 -1.52604 1.88281 -3.27279 1.88281 -5.24023zM516.307 88.1992v-37.6465c0 -2.87109 -13.3571 -5.65202 -40.0713 -8.34277
-c-2.14844 -4.83919 -4.83887 -9.50228 -8.07129 -13.9893c9.14583 -20.2598 13.7188 -32.6283 13.7188 -37.1055c0 -0.712891 -0.356445 -1.34017 -1.06934 -1.88184c-21.8757 -12.7298 -32.9893 -19.0947 -33.3408 -19.0947c-1.43555 0 -5.55664 4.21126 -12.3633 12.6338
-c-6.80664 8.42318 -11.4697 14.5169 -13.9893 18.2812c-3.58398 -0.361328 -6.27441 -0.541992 -8.07129 -0.541992c-1.79753 0 -4.48828 0.180664 -8.07227 0.541992c-2.50977 -3.76432 -7.17285 -9.85807 -13.9893 -18.2812
-c-6.81641 -8.42253 -10.9375 -12.6338 -12.3633 -12.6338c-0.361328 0 -11.4746 6.36491 -33.3398 19.0947c-0.712891 0.541667 -1.06934 1.16895 -1.06934 1.88184c0 4.47721 4.57292 16.8457 13.7188 37.1055c-3.22266 4.47721 -5.91341 9.1403 -8.07227 13.9893
-c-26.7142 2.69076 -40.0713 5.47168 -40.0713 8.34277v37.6465c0 2.87174 13.3571 5.65267 40.0713 8.34277c2.32943 5.20052 5.02018 9.86393 8.07227 13.9902c-9.14583 20.2591 -13.7188 32.6273 -13.7188 37.1045c0 0.712891 0.356445 1.34049 1.06934 1.88281
-c0.71224 0.361328 3.84928 2.15332 9.41113 5.37598c5.56185 3.22201 10.8525 6.26888 15.8721 9.14062c5.01953 2.87109 7.70996 4.30664 8.07129 4.30664c1.43555 0 5.55664 -4.16634 12.3633 -12.499s11.4701 -14.3812 13.9902 -18.1455
-c3.58398 0.361328 6.27441 0.541992 8.07129 0.541992s4.4873 -0.180664 8.07129 -0.541992c9.14583 12.7292 17.3932 22.7682 24.7422 30.1172l1.61133 0.541992c0.712891 0 11.8262 -6.27441 33.3398 -18.8232c0.712891 -0.542318 1.06934 -1.16992 1.06934 -1.88281
-c0 -4.47721 -4.57292 -16.8454 -13.7188 -37.1045c3.05208 -4.1263 5.74251 -8.78939 8.07129 -13.9893c26.7148 -2.69076 40.0723 -5.47168 40.0723 -8.34277zM516.307 363.565v-37.6475c0 -2.87109 -13.3571 -5.65202 -40.0713 -8.34277
-c-2.14844 -4.83854 -4.83887 -9.50163 -8.07129 -13.9893c9.14583 -20.2591 13.7188 -32.6276 13.7188 -37.1055c0 -0.71224 -0.356445 -1.33952 -1.06934 -1.88184c-21.8757 -12.7298 -32.9893 -19.0947 -33.3408 -19.0947c-1.43555 0 -5.55664 4.21159 -12.3633 12.6348
-c-6.80664 8.42253 -11.4697 14.5163 -13.9893 18.2812c-3.58398 -0.361328 -6.27441 -0.541992 -8.07129 -0.541992c-1.79753 0 -4.48828 0.180664 -8.07227 0.541992c-2.50977 -3.76497 -7.17285 -9.85872 -13.9893 -18.2812
-c-6.81641 -8.42318 -10.9375 -12.6348 -12.3633 -12.6348c-0.361328 0 -11.4746 6.36491 -33.3398 19.0947c-0.712891 0.542318 -1.06934 1.1696 -1.06934 1.88184c0 4.47786 4.57292 16.8464 13.7188 37.1055c-3.22266 4.47721 -5.91341 9.1403 -8.07227 13.9893
-c-26.7142 2.69076 -40.0713 5.47168 -40.0713 8.34277v37.6475c0 2.87109 13.3571 5.65202 40.0713 8.34277c2.32943 5.19987 5.02018 9.86296 8.07227 13.9893c-9.14583 20.2591 -13.7188 32.6273 -13.7188 37.1045c0 0.712891 0.356445 1.34049 1.06934 1.88281
-c0.71224 0.361328 3.84928 2.15332 9.41113 5.37598s10.8525 6.26953 15.8721 9.14062s7.70996 4.30664 8.07129 4.30664c1.43555 0 5.55664 -4.16634 12.3633 -12.499c6.80664 -8.33203 11.4701 -14.3805 13.9902 -18.1455
-c3.58398 0.361328 6.27441 0.541992 8.07129 0.541992s4.4873 -0.180664 8.07129 -0.541992c9.14583 12.7298 17.3932 22.7692 24.7422 30.1182l1.61133 0.541992c0.712891 0 11.8262 -6.27474 33.3398 -18.8242c0.712891 -0.541667 1.06934 -1.16895 1.06934 -1.88184
-c0 -4.47786 -4.57292 -16.8464 -13.7188 -37.1055c3.05208 -4.12565 5.74251 -8.78874 8.07129 -13.9893c26.7148 -2.69076 40.0723 -5.47168 40.0723 -8.34277z" />
-    <glyph glyph-name="uniF168" unicode="&#xf168;" 
-d="M512 92.1602v-91.6484c0 -7.50911 -2.73079 -13.9945 -8.19238 -19.4561c-5.46094 -5.46094 -11.9463 -8.19141 -19.4561 -8.19141h-91.1357c-7.50911 0 -13.9945 2.73047 -19.4561 8.19141c-5.46094 5.46159 -8.19141 11.9469 -8.19141 19.4561v91.6484
-c0 7.50911 2.73047 13.9945 8.19141 19.4561c5.46159 5.46094 11.9469 8.02083 19.4561 7.67969h27.1357v54.7842h-145.92v-54.7842h27.1367c7.85026 0 14.3356 -2.5599 19.4561 -7.67969c5.11979 -5.12044 7.85026 -11.6058 8.19141 -19.4561v-91.6484
-c0 -7.50911 -2.73047 -13.9945 -8.19141 -19.4561c-5.46159 -5.46094 -11.9469 -8.19141 -19.4561 -8.19141h-91.1367c-7.85026 0 -14.3356 2.73047 -19.4561 8.19141c-5.11979 5.46159 -7.85026 11.9469 -8.19141 19.4561v91.6484
-c0 7.50911 2.73047 13.9945 8.19141 19.4561c5.46159 5.46094 11.9469 8.02083 19.4561 7.67969h27.1367v54.7842h-145.92v-54.7842h27.1357c7.50911 0 13.9945 -2.5599 19.4561 -7.67969c5.46094 -5.12044 8.19141 -11.6058 8.19141 -19.4561v-91.6484
-c0 -7.50911 -2.73047 -13.9945 -8.19141 -19.4561c-5.46159 -5.46094 -11.9469 -8.19141 -19.4561 -8.19141h-91.1357c-7.85091 0 -14.3363 2.73047 -19.4561 8.19141c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v91.6484
-c0 7.50911 2.73079 13.9945 8.19238 19.4561c5.46094 5.46094 11.9463 8.02083 19.4561 7.67969h27.1357v54.7842c0 9.89844 3.58398 18.6025 10.752 26.1123c7.16797 7.50911 15.8721 11.0931 26.1123 10.752h145.92v54.7832h-27.1367
-c-7.85026 0 -14.3356 2.56022 -19.4561 7.68066c-5.11979 5.11979 -7.85026 11.6051 -8.19141 19.4561v91.6475c0 7.50977 2.73047 13.9951 8.19141 19.4561c5.46159 5.46159 11.9469 8.19238 19.4561 8.19238h91.1367c7.85026 0 14.3356 -2.73079 19.4561 -8.19238
-c5.11979 -5.46094 7.85026 -11.9463 8.19141 -19.4561v-91.6475c0 -7.50977 -2.73047 -13.9951 -8.19141 -19.4561c-5.46159 -5.46159 -11.9469 -8.02181 -19.4561 -7.68066h-27.1367v-54.7832h145.92c9.89909 0 18.6032 -3.58398 26.1123 -10.752
-s11.0931 -15.8721 10.752 -26.1123v-54.7842h27.1357c7.85091 0 14.3363 -2.5599 19.4561 -7.67969c5.12044 -5.12044 7.85124 -11.6058 8.19238 -19.4561z" />
-    <glyph glyph-name="uniF159" unicode="&#xf159;" 
-d="M493.568 193.536c0 -2.73047 -0.853516 -5.11979 -2.56055 -7.16797l-110.08 -100.864c-3.07161 -2.73047 -6.31413 -3.41309 -9.72754 -2.04785c-3.75456 1.70638 -5.63184 4.60775 -5.63184 8.7041v64h-356.353c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957
-c-1.70638 1.70703 -2.55957 3.75521 -2.55957 6.14453v55.2959c0 2.38932 0.85319 4.43717 2.55957 6.14355c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h356.353v64c0 4.0957 1.87728 6.99707 5.63184 8.7041c3.75456 1.70638 6.99707 1.19434 9.72754 -1.53613
-l110.08 -100.353c1.70703 -1.70638 2.56055 -3.75423 2.56055 -6.14355z" />
-    <glyph glyph-name="uniF148" unicode="&#xf148;" 
-d="M172.032 293.798c0 -14.4564 -4.97949 -26.6641 -14.9385 -36.623s-22.1667 -15.0993 -36.623 -15.4209c-14.4564 -0.320964 -26.6641 4.81934 -36.623 15.4209s-14.9385 22.8092 -14.9385 36.623s4.97949 25.8607 14.9385 36.1406
-c9.95898 10.2806 22.1667 15.4209 36.623 15.4209c14.4564 0 26.6641 -5.1403 36.623 -15.4209c9.95898 -10.2799 14.9385 -22.3268 14.9385 -36.1406zM447.669 190.193v-120.471h-378.76v51.5615l85.7754 86.2568l43.3691 -42.8877l137.336 137.336zM473.208 379.572
-h-430.32c-2.2487 0 -4.17643 -0.80306 -5.7832 -2.40918c-1.60612 -1.60612 -2.56966 -3.69434 -2.89062 -6.26465v-326.716c0 -2.57031 0.963542 -4.65853 2.89062 -6.26465c1.92773 -1.60612 3.85547 -2.40918 5.7832 -2.40918h430.32
-c2.24935 0 4.33757 0.80306 6.26465 2.40918c1.92773 1.60612 2.73112 3.69434 2.41016 6.26465v326.716c0 2.24935 -0.803385 4.33757 -2.41016 6.26465c-1.60612 1.92773 -3.69434 2.73079 -6.26465 2.40918zM516.096 370.898v-326.716
-c0 -11.8867 -4.17611 -22.0062 -12.5283 -30.3584c-8.35286 -8.35286 -18.4727 -12.6898 -30.3594 -13.0107h-430.32c-11.5651 0 -21.6846 4.33691 -30.3584 13.0107s-12.8503 18.7933 -12.5293 30.3584v326.716c0 11.8867 4.17643 22.0065 12.5293 30.3594
-c8.35221 8.35221 18.4717 12.6891 30.3584 13.0107h430.32c11.8867 0 22.0065 -4.33691 30.3594 -13.0107c8.35221 -8.67383 12.5283 -18.7936 12.5283 -30.3594z" />
-    <glyph glyph-name="uniF103" unicode="&#xf103;" 
-d="M102.592 304h26.3203v-80h384v-48h-384v-80h-26.3203l-102.592 104z" />
-    <glyph glyph-name="uniF10D" unicode="&#xf10d;" 
-d="M0 368.64h512v-96.2559h-512v96.2559zM0 240.64h512v-96.2559h-512v96.2559zM0 112.64h512v-96.2559h-512v96.2559z" />
-    <glyph glyph-name="uniF155" unicode="&#xf155;" 
-d="M0 -63.4883v225.792l75.7764 -75.7754l103.424 102.912l73.7275 -73.7285l-102.912 -103.424l75.7764 -75.7764h-225.792zM259.072 269.312l102.912 103.425l-75.7764 75.7754h225.792v-225.792l-75.7764 75.7764l-103.424 -102.912z" />
-    <glyph glyph-name="uniF169" unicode="&#xf169;" 
-d="M228.864 393.728v-227.84h227.84c0 -125.439 -101.888 -227.84 -227.84 -227.84c-125.44 0 -227.328 102.4 -227.328 227.84c0 125.44 100.864 227.328 226.304 227.84h1.02441zM510.976 201.728l-245.76 -0.511719s-0.511719 245.76 0.511719 245.76
-c135.169 0 245.248 -110.079 245.248 -245.248z" />
-    <glyph glyph-name="uniF113" unicode="&#xf113;" 
-d="M256 292.864v-128c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-91.1357c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453v18.4316
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957h64v100.353c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70638 1.70703 3.75423 2.56055 6.14355 2.56055h18.4326c2.73047 0 4.94922 -0.853516 6.65625 -2.56055
-c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527zM374.784 192.512c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341146 -54.443 -7.33854 -78.3369 -20.9922
-c-23.8932 -13.653 -42.6663 -32.597 -56.3193 -56.832c-13.6536 -24.2344 -20.651 -50.1758 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5889 20.9922 -77.8232c14.3359 -24.235 33.109 -43.179 56.3193 -56.832c23.2109 -13.6536 49.3232 -20.651 78.3369 -20.9922
-c29.013 -0.341797 54.9541 6.6556 77.8232 20.9922c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5514 21.6745 49.4925 20.9922 77.8232zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721
-c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF177" unicode="&#xf177;" 
-d="M128 27.4287c0 -4.95247 -1.80957 -9.23828 -5.42871 -12.8574s-7.90495 -5.42871 -12.8574 -5.42871c-4.95182 0 -9.2373 1.80957 -12.8564 5.42871s-5.42871 7.90495 -5.42871 12.8574c0 4.95247 1.80957 9.23828 5.42871 12.8574
-c3.61914 3.61849 7.90462 5.42773 12.8564 5.42773c4.95247 0 9.23828 -1.80924 12.8574 -5.42773c3.61914 -3.61914 5.42871 -7.90495 5.42871 -12.8574zM312 147.429c-18.6667 7.42839 -35.1904 18.333 -49.5713 32.7139s-25.2858 30.9046 -32.7148 49.5713
-l-194.571 -194.571c-7.23763 -7.23763 -10.8564 -15.9043 -10.8564 -26c0 -10.2858 3.61882 -18.8571 10.8564 -25.7139l30.2861 -30.8574c7.42839 -7.04753 16.0951 -10.5713 26 -10.5713c10.0951 0 18.6663 3.52376 25.7139 10.5713zM493.143 271.714
-c0 2.85742 -0.80957 5.23861 -2.42871 7.14355c-1.61849 1.9043 -3.85645 2.85645 -6.71387 2.85645c-1.71419 0 -8.42839 -3.38086 -20.1426 -10.1426s-24.6191 -14.4759 -38.7148 -23.1426c-14.0951 -8.66667 -21.6188 -13.2858 -22.5713 -13.8574l-55.1426 30.5713v64
-l83.7139 48.2861c3.04753 2.09505 4.57129 4.76172 4.57129 8s-1.52376 5.90495 -4.57129 8c-8.38086 5.71419 -18.6188 10.1426 -30.7139 13.2852c-12.0951 3.14323 -23.6667 4.71484 -34.7148 4.71484c-35.2376 0 -65.3802 -12.5238 -90.4277 -37.5713
-c-25.0482 -25.0475 -37.5723 -55.1904 -37.5723 -90.4287s12.5241 -65.3812 37.5723 -90.4287c25.0475 -25.0475 55.1901 -37.5713 90.4277 -37.5713c26.8574 0 51.4766 7.95247 73.8574 23.8574c22.3809 15.9043 38.0475 36.6185 47 62.1426
-c4.38086 12.7617 6.57129 22.8568 6.57129 30.2852z" />
-    <glyph glyph-name="uniF112" unicode="&#xf112;" 
-d="M384 -64.6562h-288c-17.6797 0 -32 14.2881 -32 31.9365v385.552c0 17.6318 14.3203 31.9199 32 31.9199h80v-33.2637h-64c-8.83203 0 -16 -7.13672 -16 -15.9688v-352.271c0 -8.84766 7.16797 -15.9678 16 -15.9678h256c8.84766 0 16 7.12012 16 15.9678v352.271
-c0 8.83203 -7.15234 15.9688 -16 15.9688h-64v33.2637h80c17.6641 0 32 -14.3037 32 -31.9199v-385.552c0 -17.6484 -14.3359 -31.9365 -32 -31.9365zM176 255.696h176v-15.9688h-176v15.9688zM176 207.792h176v-15.9678h-176v15.9678zM176 159.872h176v-15.9678h-176
-v15.9678zM176 111.968h176v-15.9678h-176v15.9678zM352 0.223633h-176v15.9365h176v-15.9365zM176 64.0645h176v-15.9688h-176v15.9688zM128 256.016h16v-15.9678h-16v15.9678zM128 208.112h16v-15.9688h-16v15.9688zM128 160.224h16v-15.9678h-16v15.9678zM128 112.32h16
-v-15.9688h-16v15.9688zM144 0.52832h-16v15.9678h16v-15.9678zM128 64.4004h16v-15.9688h-16v15.9688zM336 334.544c8.84766 0 16 -7.15234 16 -15.9844v-30.9277h-224v30.9277c0 8.83203 7.15234 15.9844 16 15.9844h48s0.192383 22.7041 0.192383 48.6562
-c0 26.9434 20.7998 49.4717 47.8076 49.4717s48.5283 -23.6797 48.5283 -49.6318c0 -27.9521 -0.52832 -48.4961 -0.52832 -48.4961h48zM240 384.752c-8.84766 0 -16 -7.13574 -16 -15.9521c0 -8.83203 7.15234 -15.9678 16 -15.9678s16 7.13574 16 15.9678
-c0 8.81641 -7.15234 15.9521 -16 15.9521z" />
-    <glyph glyph-name="uniF153" unicode="&#xf153;" 
-d="M216.01 448.432v-137.54c31.6185 -4.3112 60.9375 -10.7786 87.957 -19.4023c27.0189 -8.62305 49.8701 -18.3958 68.5537 -29.3184c18.6836 -10.9225 35.6426 -22.7074 50.877 -35.3545c15.2337 -12.6478 27.5934 -25.7262 37.0791 -39.2354
-c9.48568 -13.5098 17.6777 -26.4447 24.5762 -38.8047s11.9287 -24.4323 15.0908 -36.2168c3.16146 -11.7852 5.74837 -21.7018 7.76074 -29.75c2.01172 -8.04818 2.87402 -14.8031 2.58691 -20.2646l0.430664 -7.33008c-1.72461 3.16211 -4.45508 7.33008 -8.19141 12.5039
-c-3.73698 5.17383 -13.3662 14.3717 -28.8877 27.5938c-15.5221 13.2227 -33.487 24.1455 -53.8945 32.7686c-20.4082 8.62305 -48.5775 16.0964 -84.5078 22.4199c-22.1328 3.44922 -45.415 5.17383 -69.8467 5.17383c-15.8092 0 -32.3372 -0.718424 -49.584 -2.15527
-v-136.246l-216.01 215.147z" />
-    <glyph glyph-name="uniF158" unicode="&#xf158;" 
-d="M436.8 -64l-102.399 102.4l-75.2002 -75.2002v225.6h225.6l-75.2002 -75.2002l102.4 -104zM27.2002 195.2l75.2002 75.2002l-102.4 102.399l75.2002 75.2002l104 -102.4l75.2002 75.2002v-225.6h-227.2z" />
-    <glyph glyph-name="uniF13F" unicode="&#xf13f;" 
-d="M365.568 174.08v36.8643c0 4.77865 -1.70671 9.04525 -5.12012 12.7998s-7.68001 5.46126 -12.7998 5.12012h-256c-5.12044 0 -9.55794 -1.70671 -13.3125 -5.12012s-5.46126 -7.68001 -5.12012 -12.7998v-36.8643c0 -4.77865 1.70671 -9.04525 5.12012 -12.7998
-s7.85091 -5.46126 13.3125 -5.12012h256c4.77865 0 9.04525 1.70671 12.7998 5.12012s5.46126 7.68001 5.12012 12.7998zM438.784 329.728v-274.432c0 -22.528 -8.02148 -41.8132 -24.0645 -57.8555c-16.0423 -16.043 -35.4984 -24.235 -58.3682 -24.5762h-273.92
-c-22.8691 0 -42.3249 8.19206 -58.3672 24.5762c-16.043 16.3835 -24.0645 35.6686 -24.0645 57.8555v274.432c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762h273.92c22.8698 0 42.3258 -8.19206 58.3682 -24.5762
-c16.043 -16.3841 24.0645 -35.6696 24.0645 -57.8564z" />
-    <glyph glyph-name="uniF111" unicode="&#xf111;" 
-d="M219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232
-c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232
-c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08
-c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08
-c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721
-c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF123" unicode="&#xf123;" 
-d="M512 110.08v-54.7842c0 -2.38932 -0.85319 -4.43717 -2.55957 -6.14355c-1.70703 -1.70703 -3.92578 -2.73112 -6.65625 -3.07227h-393.216v-54.7842c0 -2.38932 -0.853516 -4.43717 -2.56055 -6.14355c-1.70638 -1.70703 -3.92513 -2.73112 -6.65625 -3.07227
-c-2.04753 0 -4.26595 1.02409 -6.65527 3.07227l-91.1367 91.1357c-1.70638 1.70638 -2.55957 3.92513 -2.55957 6.65625c0 2.73047 0.85319 4.94889 2.55957 6.65527l91.6484 91.1367c1.70638 1.70638 3.75423 2.55957 6.14355 2.55957
-c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625v-54.7842h393.216c2.38932 0 4.60807 -0.85319 6.65625 -2.55957c2.04753 -1.70703 2.90072 -3.92578 2.55957 -6.65625zM512 265.728
-c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527l-91.6484 -91.6484c-1.70638 -1.70638 -3.75423 -2.55957 -6.14355 -2.55957c-2.73112 0 -4.94987 1.02376 -6.65625 3.07129c-1.70703 2.04818 -2.56055 4.09635 -2.56055 6.14453v54.7842h-393.216
-c-2.38932 0 -4.60807 1.02376 -6.65625 3.07129c-2.04753 2.04818 -2.90072 4.09635 -2.55957 6.14453v54.7842c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h393.216v54.7842c0 2.73047 0.853516 4.94889 2.56055 6.65527
-c1.70638 1.70703 3.92513 2.56055 6.65625 2.56055c2.04753 0 4.26595 -0.853516 6.65527 -2.56055l91.1367 -91.1357c1.70638 -1.70638 2.55957 -3.92513 2.55957 -6.65625z" />
-    <glyph glyph-name="uniF10F" unicode="&#xf10f;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM112.128 112.64l64 -64l79.8721 79.8721l79.8721 -79.8721l64 64l-79.8721 79.8721l79.8721 79.8721
-l-64 64l-79.8721 -79.8721l-79.8721 79.8721l-64 -64l79.8721 -79.8721z" />
-    <glyph glyph-name="uniF13E" unicode="&#xf13e;" 
-d="M108.8 150.4v83.1992h294.4v-83.1992h-294.4zM0 192c0 70.4004 25.5996 131.2 75.2002 180.8c49.5996 49.6006 110.399 76.7998 180.8 75.2002s131.2 -25.5996 180.8 -75.2002c51.2002 -48 75.2002 -108.8 75.2002 -180.8s-25.5996 -131.2 -75.2002 -180.8
-c-49.5996 -49.6006 -108.8 -73.6006 -180.8 -75.2002s-131.2 24 -180.8 75.2002c-49.6006 51.2002 -73.6006 110.399 -75.2002 180.8zM56 192c0 -56 19.2002 -102.4 59.2002 -140.8c40 -38.4004 86.3994 -59.2002 140.8 -59.2002s102.4 19.2002 140.8 59.2002
-c38.4004 40 59.2002 86.3994 59.2002 140.8s-19.2002 102.4 -59.2002 140.8c-40 38.4004 -86.3994 60.7998 -140.8 59.2002c-54.4004 0 -102.4 -19.2002 -140.8 -59.2002c-38.4004 -40 -59.2002 -84.7998 -59.2002 -140.8z" />
-    <glyph glyph-name="uniF12E" unicode="&#xf12e;" 
-d="M324.096 364.032c-23.8932 0 -44.2025 -8.36263 -60.9277 -25.0879c-16.7253 -16.7253 -25.2585 -36.6934 -25.5996 -59.9043c0 -4.77865 0.682617 -10.2399 2.04785 -16.3838l5.63184 -29.1846c-19.7975 -19.7969 -49.6641 -49.6634 -89.5996 -89.5996
-c-39.9362 -39.9362 -69.6325 -69.4616 -89.0889 -88.5762v-33.792h56.832v56.832h57.3447v57.3438h56.832v24.0645l40.96 40.4482l29.1836 -5.63281c6.14388 -1.02344 11.4346 -1.53516 15.8721 -1.53516c23.8932 0 44.2025 8.36263 60.9277 25.0879
-s24.9173 36.8639 24.5762 60.416c-0.341146 23.5521 -8.5332 43.6908 -24.5762 60.416c-16.0423 16.7253 -36.181 25.0879 -60.416 25.0879zM324.096 421.376c39.2533 0 72.8747 -13.9948 100.864 -41.9844c27.9896 -27.9889 41.8135 -61.61 41.4717 -100.863
-c-0.341146 -39.2533 -14.165 -72.8747 -41.4717 -100.864s-61.0986 -41.9844 -101.376 -41.9844c-9.55729 0 -18.2614 0.853516 -26.1123 2.56055l-2.55957 -2.56055v-57.3438h-57.3438v-56.832h-56.832v-57.8555h-171.521v114.688l174.08 174.08
-c-1.70638 7.85091 -2.55957 16.7256 -2.55957 26.624c0 39.2533 13.9945 72.7038 41.9834 100.352c27.9896 27.6484 61.7816 41.6432 101.376 41.9844zM294.912 279.04c0 18.7734 9.55729 28.1602 28.6719 28.1602s28.6719 -9.38672 28.6719 -28.1602
-c0 -19.4557 -9.55729 -29.1836 -28.6719 -29.1836s-28.6719 9.72786 -28.6719 29.1836z" />
-    <glyph glyph-name="uniF106" unicode="&#xf106;" 
-d="M466.432 364.032h-457.216v57.3438h457.216v-57.3438zM294.912 249.856h-285.696v57.3438h285.696v-57.3438zM466.432 78.3359h-457.216v57.3438h457.216v-57.3438zM352.256 -36.3516h-343.04v57.8555h343.04v-57.8555zM466.432 -7.16797
-c0 -8.19206 -2.73047 -15.0189 -8.19141 -20.4805c-5.46159 -5.46094 -12.1175 -8.36198 -19.9678 -8.70312c-7.85091 -0.341797 -14.6777 2.55924 -20.4805 8.70312c-5.80273 6.14453 -8.7041 12.9714 -8.7041 20.4805c0 7.50911 2.90137 14.165 8.7041 19.9678
-s12.6296 8.7041 20.4805 8.7041c7.50911 0 14.165 -2.90137 19.9678 -8.7041s8.5332 -12.4587 8.19141 -19.9678z" />
-    <glyph glyph-name="uniF135" unicode="&#xf135;" 
-d="M109.568 110.08v-17.9199c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957h-17.9199c-2.38932 0 -4.60775 0.85319 -6.65527 2.55957c-2.04818 1.70703 -2.90169 3.92578 -2.56055 6.65625v17.9199
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.9248 2.55957 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM109.568 183.296v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957h-17.9199c-2.38932 0 -4.60775 0.85319 -6.65527 2.55957c-2.04818 1.70703 -2.90169 3.75521 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.9248 2.90137 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM109.568 256.512v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.73014 -6.65625 -3.07129h-17.9199c-2.38932 0 -4.60775 1.02376 -6.65527 3.07129c-2.04818 2.04818 -2.90169 4.09635 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.9248 2.90137 6.65527 2.55957h17.9199c2.73112 0 4.94987 -0.85319 6.65625 -2.55957c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625zM438.784 110.08v-17.9199
-c0 -2.73047 -0.853516 -4.94922 -2.56055 -6.65625c-1.70638 -1.70638 -3.9248 -2.55957 -6.65527 -2.55957h-273.92c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.92578 -2.56055 6.65625v17.9199
-c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM438.784 183.296v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.9248 -2.55957 -6.65527 -2.55957h-273.92c-2.73112 0 -4.94987 0.85319 -6.65625 2.55957c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.92513 2.90137 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70703 2.56055 -3.92578 2.56055 -6.65625zM438.784 256.512v-18.4316
-c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.9248 -2.73014 -6.65527 -3.07129h-273.92c-2.73112 0 -4.94987 1.02376 -6.65625 3.07129c-1.70703 2.04818 -2.56055 4.09635 -2.56055 6.14453v18.4316
-c0 2.38932 0.853516 4.60807 2.56055 6.65625c1.70638 2.04818 3.92513 2.90137 6.65625 2.55957h273.92c2.73047 0 4.94889 -0.85319 6.65527 -2.55957c1.70703 -1.70638 2.56055 -3.92513 2.56055 -6.65625zM475.648 55.2959v237.568
-c0 2.73047 -1.02409 4.94889 -3.07227 6.65527c-2.04818 1.70703 -4.09635 2.56055 -6.14453 2.56055h-420.863c-2.38932 0 -4.4375 -0.853516 -6.14453 -2.56055c-1.70638 -1.70638 -2.73047 -3.9248 -3.07227 -6.65527v-237.568
-c0 -2.38932 1.02409 -4.43717 3.07227 -6.14355c2.04818 -1.70703 4.09635 -2.73112 6.14453 -3.07227h420.863c2.38932 0 4.4375 1.02409 6.14453 3.07227c1.70638 2.04753 2.73047 4.09538 3.07227 6.14355zM512 366.08v-310.784
-c0 -12.6296 -4.43717 -23.3815 -13.3115 -32.2559c-8.875 -8.875 -19.6273 -13.3125 -32.2568 -13.3125h-420.863c-12.2884 0 -23.0407 4.4375 -32.2568 13.3125c-9.21549 8.87435 -13.6527 19.6263 -13.3115 32.2559v310.784c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.4831 32.2568 13.8242h420.863c12.6296 0 23.3818 -4.60807 32.2568 -13.8242c8.87435 -9.21615 13.3115 -19.9681 13.3115 -32.2559z" />
-    <glyph glyph-name="uniF101" unicode="&#xf101;" 
-d="M512 -63.4883h-512v512h512v-512zM448 0.511719v384h-384v-384h384zM256 96.7676l-128 192h256z" />
-    <glyph glyph-name="uniF130" unicode="&#xf130;" 
-d="M237.568 -36.3516l-228.353 229.376l228.353 228.352l81.4072 -80.8955l-90.624 -90.624h238.08v-114.177h-238.08l90.624 -90.1113z" />
-    <glyph glyph-name="uniF143" unicode="&#xf143;" 
-d="M0 146.432l82.9443 82.9443l84.9912 -83.9678l260.097 261.12l83.9678 -83.9688l-344.064 -344.063l-82.9434 83.9678z" />
-    <glyph glyph-name="uniF14B" unicode="&#xf14b;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM112.128 151.552h102.912v-102.912h81.9199v102.912h102.912v81.9199h-102.912v102.912h-81.9199
-v-102.912h-102.912v-81.9199z" />
-    <glyph glyph-name="uniF104" unicode="&#xf104;" 
-d="M512.912 200l-102.592 -104h-26.3203v80h-384v48h384v80h26.3203z" />
-    <glyph glyph-name="uniF141" unicode="&#xf141;" 
-d="M415.232 -60.9277h-316.929c-52.7354 0 -95.2314 43.0078 -95.2314 95.2314v316.929c0 52.7354 42.4961 95.2314 95.2314 95.2314h316.929c52.2236 0 95.2314 -42.4961 95.2314 -95.2314v-316.929c0 -52.2236 -43.0078 -95.2314 -95.2314 -95.2314zM446.976 351.232
-c0 17.9199 -14.3359 31.7432 -31.7432 31.7432h-316.929c-17.9199 0 -31.7441 -14.3359 -31.7441 -31.7432v-316.929c0 -17.4072 13.8242 -31.7441 31.7441 -31.7441h316.929c17.4072 0 31.7432 14.3369 31.7432 31.7441v316.929zM351.744 97.792v-47.6162
-c0 -8.7041 -7.16797 -15.8721 -15.8721 -15.8721s-15.8721 7.16797 -15.8721 15.8721v47.6162c-17.4082 0 -31.7441 14.3359 -31.7441 31.7441v31.7441c0 17.4082 14.3359 31.7441 31.7441 31.7441v142.336c0 8.7041 7.16797 15.8721 15.8721 15.8721
-s15.8721 -7.16797 15.8721 -15.8721v-142.336c17.4082 0 31.7441 -14.3359 31.7441 -31.7441v-31.7441c0 -17.4082 -14.3359 -31.7441 -31.7441 -31.7441zM193.024 193.024v-142.849c0 -8.7041 -7.16797 -15.8721 -15.8721 -15.8721s-15.8721 7.16797 -15.8721 15.8721
-v142.849c-17.4082 0 -31.7441 14.3359 -31.7441 31.7432v31.7441c0 17.4082 14.3359 31.2324 31.7441 31.2324v47.6162c0 8.7041 7.16797 15.8721 15.8721 15.8721s15.8721 -7.16797 15.8721 -15.8721v-47.6162c17.9199 0 31.7432 -13.8242 31.7432 -31.2324v-31.7441
-c0 -17.9199 -13.8232 -31.7432 -31.7432 -31.7432z" />
-    <glyph glyph-name="uniF119" unicode="&#xf119;" 
-d="M288 -64h-64v48h64v-48zM128 400v48h48v-48h-48zM176 -64h-48v48h48v-48zM224 448h64v-48h-64v48zM432 400v48h80v-80h-48v32h-32zM48 160h-48v64h48v-64zM0 272v48h48v-48h-48zM48 64h-48v48h48v-48zM384 -16v-48h-48v48h48zM80 -16v-48h-80v80h48v-32h32zM464 16h48
-v-80h-80v48h32v32zM464 320h48v-48h-48v48zM48 368h-48v80h80v-48h-32v-32zM336 448h48v-48h-48v48zM464 224h48v-64h-48v64zM512 112v-48h-48v48h48zM364.8 302.4c12.7998 -14.4004 24 -33.6006 32 -51.2002c8 -17.6006 12.7998 -38.4004 12.7998 -59.2002
-c0 -22.4004 -4.7998 -41.5996 -12.7998 -60.7998s-17.5996 -35.2002 -32 -49.6006c-14.3994 -12.7998 -30.3994 -24 -49.5996 -32s-38.4004 -12.7998 -59.2002 -12.7998s-40 4.7998 -59.2002 12.7998s-35.2002 17.6006 -49.5996 32
-c-12.7998 14.4004 -24 30.4004 -32 49.6006s-12.7998 40 -12.7998 60.7998s4.7998 41.5996 12.7998 60.7998s17.5996 35.2002 32 49.6006c14.3994 12.7998 30.3994 24 49.5996 32s38.4004 12.7998 59.2002 12.7998s40 -4.7998 59.2002 -12.7998
-s35.2002 -17.6006 49.5996 -32zM147.2 192c0 -20.7998 6.39941 -41.5996 19.2002 -59.2002l150.399 150.4c-19.2002 11.2002 -38.3994 17.5996 -60.7998 17.5996c-19.2002 0 -38.4004 -4.7998 -54.4004 -14.3994c-17.5996 -9.60059 -30.3994 -22.4004 -40 -40
-c-9.59961 -16 -14.3994 -35.2002 -14.3994 -54.4004zM356.8 150.4c4.7998 12.7998 8 27.1992 8 41.5996c0 22.4004 -6.39941 41.5996 -17.5996 59.2002l-150.4 -150.4c17.6006 -11.2002 38.4004 -17.5996 59.2002 -17.5996c14.4004 0 28.7998 1.59961 41.5996 8
-c14.4004 6.39941 25.6006 14.3994 35.2002 24c11.2002 9.59961 17.6006 22.3994 24 35.2002z" />
-    <glyph glyph-name="uniF131" unicode="&#xf131;" 
-d="M329.216 220.16v-55.2959c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-100.352v-55.2959c0 -2.38932 -0.853516 -4.4375 -2.56055 -6.14453c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957
-c-2.38932 0 -4.77865 0.85319 -7.16797 2.55957l-91.1357 91.1367c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527c0 2.73112 0.85319 4.94987 2.55957 6.65625l91.6484 91.1357c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055
-c2.38932 0 4.4375 -0.853516 6.14453 -2.56055c1.70638 -1.70638 2.73047 -3.75423 3.07227 -6.14355v-55.2959h100.352c2.38932 0 4.60807 -0.853516 6.65625 -2.56055c2.04753 -1.70638 2.90072 -3.75423 2.55957 -6.14355zM374.784 192.512
-c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341146 -54.443 -7.33854 -78.3369 -20.9922c-23.8932 -13.653 -42.6663 -32.597 -56.3193 -56.832
-c-13.6536 -24.2344 -20.651 -50.1758 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5889 20.9922 -77.8232c14.3359 -24.235 33.109 -43.179 56.3193 -56.832c23.2109 -13.6536 49.3232 -20.651 78.3369 -20.9922c29.013 -0.341797 54.9541 6.6556 77.8232 20.9922
-c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5514 21.6745 49.4925 20.9922 77.8232zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF139" unicode="&#xf139;" 
-d="M146.286 448c2.47591 0 4.61849 -0.904622 6.42773 -2.71387c1.8099 -1.8099 2.71484 -3.9528 2.71484 -6.42871v-420.571c0 -3.8099 -1.61914 -6.47656 -4.85742 -8l-137.143 -73.1436c-1.33333 -0.761719 -2.76204 -1.14258 -4.28613 -1.14258
-c-2.47591 0 -4.61882 0.904622 -6.42871 2.71387c-1.80924 1.8099 -2.71387 3.9528 -2.71387 6.42871v420.571c0 3.8099 1.61914 6.47656 4.85742 8l137.143 73.1436c1.33333 0.761719 2.76204 1.14258 4.28613 1.14258zM502.857 448
-c2.47591 0 4.61882 -0.904622 6.42871 -2.71387c1.80924 -1.8099 2.71387 -3.9528 2.71387 -6.42871v-420.571c0 -3.8099 -1.61914 -6.47656 -4.85742 -8l-137.143 -73.1436c-1.33333 -0.761719 -2.76204 -1.14258 -4.28613 -1.14258
-c-2.47591 0 -4.61849 0.904622 -6.42773 2.71387c-1.8099 1.8099 -2.71484 3.9528 -2.71484 6.42871v420.571c0 3.8099 1.61914 6.47656 4.85742 8l137.143 73.1436c1.33333 0.761719 2.76204 1.14258 4.28613 1.14258zM182.857 448
-c1.52344 0 2.85677 -0.285807 4 -0.857422l146.285 -73.1426c3.42904 -1.90495 5.14355 -4.66699 5.14355 -8.28613v-420.571c0 -2.47591 -0.904948 -4.61882 -2.71484 -6.42871c-1.80924 -1.80924 -3.95215 -2.71387 -6.42871 -2.71387
-c-1.52344 0 -2.85677 0.285807 -4 0.857422l-146.285 73.1426c-3.42904 1.90495 -5.14355 4.66699 -5.14355 8.28613v420.571c0 2.47591 0.904948 4.61882 2.71484 6.42871c1.80924 1.80924 3.95215 2.71387 6.42871 2.71387z" />
-    <glyph glyph-name="uniF12C" unicode="&#xf12c;" 
-d="M292.352 55.2959v45.5684c0 2.73047 -0.85319 4.94889 -2.55957 6.65527c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-27.6484v146.432c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-91.1357
-c-2.73112 0 -4.94987 -0.85319 -6.65625 -2.55957c-1.70703 -1.70638 -2.56055 -3.92513 -2.56055 -6.65625v-45.5674c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.92513 -2.56055 6.65625 -2.56055h27.1357v-91.6475h-27.1357
-c-2.73112 0 -4.94987 -0.853516 -6.65625 -2.56055c-1.70703 -1.70638 -2.56055 -3.9248 -2.56055 -6.65527v-45.5684c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h128c2.38932 0 4.43717 0.85319 6.14355 2.55957
-c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM256 311.296v45.5684c0 2.73047 -0.85319 4.94889 -2.55957 6.65527c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-54.7842c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055
-c-1.70638 -1.70638 -2.55957 -3.9248 -2.55957 -6.65527v-45.5684c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h54.7842c2.73047 0 4.94922 0.85319 6.65625 2.55957
-c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953
-c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721
-s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF14A" unicode="&#xf14a;" 
-d="M0 120.32v144.384h183.808v183.808h144.385v-183.808h183.808v-144.384h-183.808v-183.809h-144.385v183.809h-183.808z" />
-    <glyph glyph-name="uniF150" unicode="&#xf150;" 
-d="M251.104 231.344l80.2725 80.2725l-40.416 40.3994l124.56 -0.735352l-0.0634766 -123.744l-41.4404 41.4395l-80.2559 -80.2715zM414.816 176.88l1.18359 -112.896c0 -17.6641 -14.3359 -32 -32 -32h-256c-17.6641 0 -32 14.3359 -32 32v256c0 17.6641 14.3359 32 32 32
-h112l32 -32l-143.328 -0.640625l-0.255859 -255.567l256.24 0.143555l-0.560547 144.112z" />
-    <glyph glyph-name="uniF114" unicode="&#xf114;" 
-d="M292.352 192.512c0 20.1387 -6.99707 37.376 -20.9912 51.7119c-13.9948 14.3359 -31.2321 21.5039 -51.7119 21.5039c-20.4805 0 -37.7181 -7.16797 -51.7129 -21.5039c-13.9941 -14.3359 -21.1621 -31.5732 -21.5039 -51.7119
-c-0.341146 -20.1387 6.82682 -37.376 21.5039 -51.7119c14.6777 -14.3359 31.9154 -21.5039 51.7129 -21.5039c19.7969 0 37.0342 7.16797 51.7119 21.5039c14.6771 14.3359 21.6742 31.5732 20.9912 51.7119zM438.784 223.744v-63.4883
-c0 -2.38932 -0.682617 -4.60807 -2.04785 -6.65625c-1.36523 -2.04753 -3.24284 -3.24219 -5.63281 -3.58398l-53.2471 -8.19141c-3.41341 -10.2402 -6.99772 -18.9443 -10.7529 -26.1123c6.48568 -9.21615 16.555 -22.3574 30.208 -39.4238
-c2.04818 -2.04818 3.07227 -4.26693 3.07227 -6.65625s-0.85319 -4.60807 -2.55957 -6.65625c-5.12044 -7.16797 -14.5072 -17.5785 -28.1602 -31.2314c-13.6536 -13.6536 -22.6989 -20.3096 -27.1357 -19.9678c-2.38932 0 -4.77865 0.85319 -7.16797 2.55957
-l-39.4248 30.7197c-8.5332 -4.43685 -17.237 -8.02083 -26.1113 -10.752c-3.07227 -25.9414 -5.80306 -43.6908 -8.19238 -53.248c-1.36523 -5.46094 -4.77865 -8.19141 -10.2402 -8.19141h-63.4873c-2.73112 0 -5.12044 0.85319 -7.16797 2.55957
-c-2.04818 1.70703 -3.07227 3.75521 -3.07227 6.14453l-8.19238 52.7354c-9.21549 3.07227 -17.7487 6.65625 -25.5996 10.752l-40.4482 -30.7197c-2.04818 -1.70638 -4.4375 -2.55957 -7.16797 -2.55957s-5.11979 1.02376 -7.16797 3.07129
-c-23.8932 21.8457 -39.5944 37.8883 -47.1035 48.1279c-1.36589 1.70703 -2.04883 3.92578 -2.04883 6.65625c0 2.04818 0.853516 4.09635 2.56055 6.14453c2.73047 4.0957 7.50911 10.4102 14.3359 18.9434s11.9469 15.36 15.3604 20.4805
-c-5.12044 9.55729 -9.0459 18.944 -11.7764 28.1602l-52.2236 7.67969c-2.38932 0.341146 -4.26693 1.53581 -5.63281 3.58398c-1.36523 2.04818 -2.21842 4.26693 -2.55957 6.65625v63.4873c0 2.38932 0.85319 4.60807 2.55957 6.65625
-c1.70703 2.04818 3.41374 3.24284 5.12012 3.58398l53.248 8.19238c2.73112 8.5332 6.486 17.237 11.2646 26.1113c-7.85091 10.9232 -18.0911 24.0648 -30.7207 39.4248c-2.04753 2.38932 -3.07129 4.77865 -3.07129 7.16797c0 1.70638 0.85319 3.75423 2.55957 6.14355
-c5.11979 6.82682 14.5065 17.0667 28.1602 30.7197c13.653 13.6536 22.6982 20.4805 27.1357 20.4805c2.38932 0 4.94922 -0.85319 7.67969 -2.55957l39.4248 -30.7207c8.19206 4.4375 16.7253 8.02148 25.5996 10.752c3.07227 25.9414 5.97363 43.6908 8.7041 53.248
-c1.02409 5.12044 4.4375 7.68066 10.2402 7.68066h63.4873c2.38932 0 4.60807 -0.682943 6.65625 -2.04883c2.04818 -1.36523 3.24284 -3.41309 3.58398 -6.14355l7.67969 -52.7363c9.55794 -3.07161 18.0915 -6.6556 25.6006 -10.752l40.96 30.7207
-c1.70638 1.70638 3.92513 2.55957 6.65625 2.55957c2.38932 0 4.77865 -0.85319 7.16797 -2.55957c24.5755 -22.8698 40.2767 -39.0833 47.1035 -48.6406c1.36523 -1.70638 2.04785 -3.92513 2.04785 -6.65625c0 -2.04753 -0.682617 -4.09538 -2.04785 -6.14355
-c-3.07161 -4.09635 -8.02083 -10.5817 -14.8477 -19.4561s-11.9469 -15.5303 -15.3604 -19.9678c4.77865 -9.55729 8.7041 -18.944 11.7764 -28.1602l52.2236 -7.67969c2.38932 -0.341797 4.4375 -1.53646 6.14453 -3.58398
-c1.70638 -2.04818 2.389 -4.26693 2.04785 -6.65625z" />
-    <glyph glyph-name="uniF10A" unicode="&#xf10a;" 
-d="M374.784 193.536c0 30.7201 -8.19206 58.7093 -24.5762 83.9678l-215.552 -215.04c25.9414 -17.0664 54.2721 -25.5996 84.9922 -25.5996c21.1621 0 41.3008 4.2666 60.416 12.7998c19.1146 8.5332 35.4984 19.6266 49.1514 33.2803
-c13.6536 13.653 24.7471 30.2077 33.2803 49.6641c8.5332 19.4557 12.6292 39.765 12.2881 60.9277zM89.5996 108.032l215.553 215.552c-25.6003 17.0664 -54.1016 25.5996 -85.5039 25.5996c-28.3307 0 -54.443 -6.8265 -78.3369 -20.4795
-c-23.8932 -13.6536 -42.6663 -32.7682 -56.3193 -57.3438c-13.6536 -24.5762 -20.651 -50.5176 -20.9922 -77.8242c0 -31.0612 8.5332 -59.5625 25.5996 -85.5039zM438.784 193.536c0 -30.0371 -5.80273 -58.7093 -17.4082 -86.0166
-c-11.6055 -27.3066 -27.1361 -50.6878 -46.5918 -70.1436c-19.4564 -19.4557 -42.8379 -35.1569 -70.1445 -47.1035c-27.3066 -11.9473 -55.637 -17.75 -84.9912 -17.4082c-29.3548 0.341146 -57.8564 6.14388 -85.5049 17.4082
-c-27.6478 11.2637 -51.029 26.9648 -70.1436 47.1035s-34.6452 43.5199 -46.5918 70.1436c-11.9466 26.6243 -17.7493 55.2965 -17.4082 86.0166s6.14388 59.2214 17.4082 85.5039c11.2637 26.2826 26.7943 49.6637 46.5918 70.1436
-c19.7975 20.4805 43.1787 36.0114 70.1436 46.5928c26.9655 10.5814 55.4671 16.3838 85.5049 17.4072c30.0371 1.02409 58.3675 -4.77832 84.9912 -17.4072c26.6243 -12.6296 50.0059 -28.1605 70.1445 -46.5928c20.1387 -18.4316 35.6693 -41.8128 46.5918 -70.1436
-c10.9225 -28.3307 16.7253 -56.832 17.4082 -85.5039z" />
-    <glyph glyph-name="uniF11F" unicode="&#xf11f;" 
-d="M320 183.296c0 -2.38932 -1.02409 -4.60807 -3.07227 -6.65625l-91.1357 -91.1357c-2.04818 -1.70638 -4.09603 -2.55957 -6.14355 -2.55957c-2.04818 0 -4.26693 0.85319 -6.65625 2.55957l-91.6484 91.1357c-2.73047 3.07227 -3.41309 6.48568 -2.04785 10.2402
-c1.70703 3.75456 4.6084 5.63184 8.7041 5.63184h54.7842v100.353c0 2.73047 0.85319 4.94889 2.55957 6.65527c1.70703 1.70703 3.92578 2.56055 6.65625 2.56055h54.7842c2.73047 0 4.94922 -0.853516 6.65625 -2.56055
-c1.70638 -1.70638 2.55957 -3.9248 2.55957 -6.65527v-100.353h54.7842c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF109" unicode="&#xf109;" 
-d="M27.834 38.4307v0c-6.66016 6.68164 -9.99023 14.7627 -9.99023 23.8193c33.7881 28.5498 59.0283 63.7803 76.166 105.691c17.1387 41.8906 25.707 86.1572 25.707 132.354c0 29.5039 8.56934 52.3682 25.707 69.5068c17.1387 17.6045 40.4697 27.5947 69.9951 31.4121
-c-1.44238 2.86328 -1.90918 6.19336 -1.90918 9.52344c0 7.14844 2.375 13.3203 7.61426 18.0928c4.77246 5.23926 10.4785 7.61426 17.626 7.61426c7.12695 0 13.3203 -2.375 18.0928 -7.61426c5.21777 -4.77246 7.61426 -10.9443 7.61426 -18.0928
-c0 -3.33008 -0.488281 -6.66016 -1.90918 -9.52344c29.5039 -3.81738 52.835 -13.8076 69.9736 -31.4121c16.6709 -17.1387 25.2402 -40.0029 25.2402 -69.5068c0 -46.1963 8.56934 -90.4629 25.707 -132.354c17.1377 -41.9111 42.3779 -77.1416 76.166 -105.691
-c0 -9.05664 -3.33008 -17.1377 -9.98926 -23.8193c-6.66016 -6.65918 -14.7627 -9.98926 -23.7988 -9.98926h-119.032c0 -19.0479 -6.66016 -34.7646 -19.9805 -48.084c-13.3418 -13.3203 -29.0586 -20.002 -48.084 -20.002c-18.5801 0 -34.7637 6.68164 -48.084 20.002
-c-13.3418 13.3193 -20.002 29.0361 -20.002 48.084h-119.032c-9.03613 0 -17.1377 3.33008 -23.7979 9.98926zM196.371 32.7256v0c-2.86328 0 -4.28418 -1.4209 -4.28418 -4.28418c0 -12.8535 4.75098 -23.7988 13.8086 -32.8555
-c9.03516 -9.03516 20.001 -13.8076 32.8545 -13.8076c2.8418 0 4.28418 1.44238 4.28418 4.28418c0 2.86328 -1.44238 4.28418 -4.28418 4.28418c-10.4775 0 -19.5352 3.81836 -26.6611 11.4326c-7.63574 7.14844 -11.4326 16.1836 -11.4326 26.6621
-c0 2.86328 -1.4209 4.28418 -4.28516 4.28418z" />
-    <glyph glyph-name="uniF11D" unicode="&#xf11d;" 
-d="M218.624 77.3115c1.36523 -3.41276 0.85319 -6.65527 -1.53613 -9.72754l-99.8398 -110.08c-2.04818 -1.70638 -4.26693 -2.55957 -6.65625 -2.55957c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957l-101.376 110.08c-2.73047 3.07227 -3.24219 6.31478 -1.53516 9.72754
-c1.70638 3.75521 4.43685 5.63281 8.19141 5.63281h64v356.352c0 2.73047 0.853516 4.94922 2.56055 6.65625c1.70638 1.70638 3.9248 2.55957 6.65527 2.55957h54.7842c2.73047 0 4.94922 -0.85319 6.65625 -2.55957c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625
-v-356.352h64c3.75521 0 6.486 -1.8776 8.19238 -5.63281z" />
-    <glyph glyph-name="uniF15B" unicode="&#xf15b;" 
-d="M329.216 192c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625l-91.6484 -91.1357c-1.70638 -1.70638 -3.92513 -2.55957 -6.65625 -2.55957c-2.38932 0 -4.43717 0.85319 -6.14355 2.55957s-2.55957 3.75423 -2.55957 6.14355v55.2969h-100.864
-c-2.38932 0 -4.4375 0.85319 -6.14453 2.55957c-1.70638 1.70638 -2.73014 3.75423 -3.07129 6.14355v55.2969c0 2.38932 1.02376 4.43717 3.07129 6.14355c2.04818 1.70638 4.09635 2.55957 6.14453 2.55957h100.864v55.2969c0 2.38932 0.85319 4.43717 2.55957 6.14355
-s3.75423 2.55957 6.14355 2.55957s4.77865 -0.85319 7.16797 -2.55957l91.1367 -91.1357c1.70638 -1.70703 2.55957 -3.92578 2.55957 -6.65625zM374.784 192c0 28.3307 -6.9974 54.2721 -20.9922 77.8242c-13.9948 23.5521 -32.7682 42.4961 -56.3203 56.832
-s-49.4932 21.3333 -77.8232 20.9922c-28.3307 -0.341797 -54.443 -7.33919 -78.3369 -20.9922c-23.8932 -13.6536 -42.6663 -32.5977 -56.3193 -56.832c-13.6536 -24.235 -20.651 -50.1764 -20.9922 -77.8242c-0.341146 -27.6478 6.65625 -53.5892 20.9922 -77.8242
-c14.3359 -24.2344 33.109 -43.1784 56.3193 -56.832c23.2109 -13.653 49.3232 -20.6504 78.3369 -20.9922c29.013 -0.341146 54.9541 6.65625 77.8232 20.9922c22.8698 14.3359 41.6432 33.2799 56.3203 56.832c14.6771 23.5521 21.6745 49.4935 20.9922 77.8242z
-M438.784 192c0 -39.9362 -9.72819 -76.6296 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7975 -70.4847 -29.6963 -110.079 -29.6963c-39.5951 0 -76.4593 9.89876 -110.593 29.6963
-c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4505 -28.6722 70.1439 -29.6963 110.08s8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963
-c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF154" unicode="&#xf154;" 
-d="M164.168 448.328v-59.6387l-104.53 -104.529l104.53 -104.202v-59.3105l-164.168 163.513zM283.771 448.328v-104.53c24.0299 -3.27669 46.3122 -8.19206 66.8467 -14.7461c20.5352 -6.55339 37.9023 -13.9808 52.1016 -22.2822
-c14.1992 -8.30078 27.0879 -17.2572 38.666 -26.8691s20.9717 -19.5518 28.1807 -29.8193c7.20898 -10.2669 13.4349 -20.0973 18.6777 -29.4912c5.24284 -9.39323 9.06576 -18.568 11.4688 -27.5244c2.40299 -8.95703 4.36914 -16.4938 5.89844 -22.6104
-s2.29395 -11.2503 2.29395 -15.4014v-5.57031c-1.3112 2.40299 -3.38672 5.57064 -6.22656 9.50293s-10.1579 10.9229 -21.9541 20.9717c-11.7969 10.0488 -25.4502 18.3499 -40.96 24.9033c-15.5104 6.99089 -37.028 12.6706 -64.5527 17.0391
-c-16.821 2.62174 -34.4066 3.93262 -52.7568 3.93262c-12.015 0 -24.5762 -0.546224 -37.6836 -1.63867v-103.547l-164.167 163.513z" />
-    <glyph glyph-name="uniF10E" unicode="&#xf10e;" 
-d="M334.848 192l177.152 -177.152l-78.8477 -78.8477l-177.152 177.152l-177.152 -177.152l-78.8477 78.8477l177.152 177.152l-177.152 177.152l78.8477 78.8477l177.152 -177.152l177.152 177.152l78.8477 -78.8477z" />
-    <glyph glyph-name="uniF16C" unicode="&#xf16c;" 
-d="M146.432 55.2959v54.7842c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-91.6475c-2.38932 0 -4.60807 -0.85319 -6.65625 -2.55957c-2.04818 -1.70703 -2.90169 -3.92578 -2.56055 -6.65625v-54.7842
-c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h91.6475c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM146.432 164.864v55.2959
-c0 2.38932 -0.85319 4.43717 -2.55957 6.14355c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-91.6475c-2.38932 0 -4.60807 -0.853516 -6.65625 -2.56055c-2.04818 -1.70638 -2.90169 -3.75423 -2.56055 -6.14355v-55.2959
-c0 -2.38932 0.853516 -4.4375 2.56055 -6.14453c1.70638 -1.70638 3.92513 -2.55957 6.65625 -2.55957h91.6475c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.75521 2.55957 6.14453zM292.352 55.2959v54.7842
-c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70638 1.70638 -3.75423 2.55957 -6.14355 2.55957h-91.6484c-2.73047 0 -4.94922 -0.85319 -6.65625 -2.55957c-1.70638 -1.70703 -2.55957 -3.92578 -2.55957 -6.65625v-54.7842
-c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h91.6484c2.38932 0 4.43717 0.85319 6.14355 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM146.432 274.944v54.7832
-c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70703 1.70703 -3.92578 2.56055 -6.65625 2.56055h-91.6475c-2.38932 0 -4.60807 -0.853516 -6.65625 -2.56055c-2.04818 -1.70638 -2.90169 -3.92513 -2.56055 -6.65625v-54.7832
-c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.92513 -2.56055 6.65625 -2.56055h91.6475c2.73047 0 4.94922 0.853516 6.65625 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625zM292.352 164.864v55.2959
-c0 2.38932 -0.85319 4.43717 -2.55957 6.14355c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-91.6484c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055c-1.70638 -1.70638 -2.55957 -3.75423 -2.55957 -6.14355v-55.2959
-c0 -2.38932 0.85319 -4.4375 2.55957 -6.14453c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h91.6484c2.38932 0 4.43717 0.85319 6.14355 2.55957c1.70638 1.70703 2.55957 3.75521 2.55957 6.14453zM438.784 55.2959v54.7842
-c0 2.73047 -0.853516 4.94922 -2.56055 6.65625c-1.70638 1.70638 -3.9248 2.55957 -6.65527 2.55957h-91.1367c-2.73047 0 -4.94889 -0.85319 -6.65527 -2.55957c-1.70703 -1.70703 -2.56055 -3.92578 -2.56055 -6.65625v-54.7842
-c0 -2.73047 0.853516 -4.94922 2.56055 -6.65625c1.70638 -1.70638 3.9248 -2.55957 6.65527 -2.55957h91.1367c2.73047 0 4.94889 0.85319 6.65527 2.55957c1.70703 1.70703 2.56055 3.92578 2.56055 6.65625zM292.352 274.944v54.7832
-c0 2.73112 -0.85319 4.94987 -2.55957 6.65625c-1.70638 1.70703 -3.75423 2.56055 -6.14355 2.56055h-91.6484c-2.73047 0 -4.94922 -0.853516 -6.65625 -2.56055c-1.70638 -1.70638 -2.55957 -3.92513 -2.55957 -6.65625v-54.7832
-c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h91.6484c2.38932 0 4.43717 0.853516 6.14355 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625zM438.784 164.864v55.2959
-c0 2.38932 -0.853516 4.43717 -2.56055 6.14355c-1.70638 1.70703 -3.9248 2.56055 -6.65527 2.56055h-91.1367c-2.73047 0 -4.94889 -0.853516 -6.65527 -2.56055c-1.70703 -1.70638 -2.56055 -3.75423 -2.56055 -6.14355v-55.2959
-c0 -2.38932 0.853516 -4.4375 2.56055 -6.14453c1.70638 -1.70638 3.9248 -2.55957 6.65527 -2.55957h91.1367c2.73047 0 4.94889 0.85319 6.65527 2.55957c1.70703 1.70703 2.56055 3.75521 2.56055 6.14453zM438.784 274.944v54.7832
-c0 2.73112 -0.853516 4.94987 -2.56055 6.65625c-1.70638 1.70703 -3.9248 2.56055 -6.65527 2.56055h-91.1367c-2.73047 0 -4.94889 -0.853516 -6.65527 -2.56055c-1.70703 -1.70638 -2.56055 -3.92513 -2.56055 -6.65625v-54.7832
-c0 -2.73112 0.853516 -4.94987 2.56055 -6.65625c1.70638 -1.70703 3.9248 -2.56055 6.65527 -2.56055h91.1367c2.73047 0 4.94889 0.853516 6.65527 2.56055c1.70703 1.70638 2.56055 3.92513 2.56055 6.65625zM475.648 366.08v-310.784
-c0 -12.6296 -4.60807 -23.3815 -13.8242 -32.2559c-9.21615 -8.875 -19.9681 -13.3125 -32.2559 -13.3125h-384c-12.2884 0 -23.0407 4.4375 -32.2568 13.3125c-9.21549 8.87435 -13.6527 19.6263 -13.3115 32.2559v310.784c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.4831 32.2568 13.8242h384c12.6289 0 23.3809 -4.60807 32.2559 -13.8242c8.87435 -9.21615 13.4824 -19.9681 13.8242 -32.2559z" />
-    <glyph glyph-name="uniF171" unicode="&#xf171;" 
-d="M292.352 100.864c0 -4.77865 -1.70638 -9.04525 -5.11914 -12.7998c-3.41341 -3.75521 -7.68034 -5.46191 -12.8008 -5.12012h-256c-5.11979 0 -9.38639 1.70671 -12.7998 5.12012c-3.41341 3.41276 -5.29069 7.67936 -5.63184 12.7998
-c-0.341146 5.11979 1.53613 9.55697 5.63184 13.3115l128 128c3.41341 3.41341 7.68001 5.12012 12.7998 5.12012c5.12044 0 9.38737 -1.70671 12.8008 -5.12012l128 -128c3.41276 -3.75456 5.11914 -8.19173 5.11914 -13.3115z" />
-    <glyph glyph-name="uniF116" unicode="&#xf116;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c71.3385 0 131.925 -25.2585 181.76 -75.7754l74.2402 52.7354v-238.08l-227.84 76.2881l67.0723 47.6162c-27.9896 22.1868 -59.7337 33.2803 -95.2324 33.2803
-c-41.9837 0 -77.8236 -14.848 -107.52 -44.5439c-29.6966 -29.696 -44.5449 -65.5361 -44.5449 -107.521c0 -41.9837 14.8483 -77.8236 44.5449 -107.52c29.696 -29.696 65.5358 -44.5439 107.52 -44.5439c27.9896 0 53.5895 6.8265 76.7998 20.4795
-c23.2109 13.6536 41.6429 32.2565 55.2959 55.8086l90.1123 -52.2246c-22.8691 -38.5703 -53.9303 -69.6315 -93.1836 -93.1836c-39.2539 -23.5521 -82.262 -35.1576 -129.024 -34.8164c-70.6562 0 -130.902 24.9173 -180.736 74.752
-c-49.8346 49.8346 -74.9225 110.251 -75.2637 181.248z" />
-    <glyph glyph-name="uniF16B" unicode="&#xf16b;" 
-d="M3.49219 294.4l101 102.399h25.0312v-78.7695h378.093v-47.2607h-378.093v-78.7695h-25.0312zM508.508 89.5996l-101.016 -102.399h-25.9082v78.7686h-378.092v47.2607h378.092v78.7705h25.9082z" />
-    <glyph glyph-name="uniF15E" unicode="&#xf15e;" 
-d="M109.568 9.72754h219.647v109.568h-219.647v-109.568zM365.568 9.72754h36.8633v256c0 2.73112 -1.02376 6.31543 -3.07129 10.7529c-2.04818 4.43685 -3.92578 7.84993 -5.63281 10.2393l-80.3838 79.8721c-1.70638 2.04818 -4.94889 4.09635 -9.72754 6.14453
-c-4.77865 2.04753 -8.53353 2.90072 -11.2646 2.55957v-118.784c0 -7.50911 -2.5599 -13.9945 -7.67969 -19.4561c-5.11979 -5.46094 -11.6051 -8.19141 -19.4561 -8.19141h-164.864c-7.50911 0 -13.8236 2.73047 -18.9434 8.19141
-c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v118.784h-36.8643v-365.568h36.8643v118.784c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.7754 8.19238 18.9434 8.19238h238.08c7.50977 0 13.9951 -2.73079 19.4561 -8.19238
-c5.46159 -5.46094 8.02181 -11.9463 7.68066 -19.4561v-118.784zM256 274.944v91.1357c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-54.7842c-2.38932 0 -4.60807 -0.85319 -6.65625 -2.55957
-c-2.04753 -1.70703 -2.90072 -3.92578 -2.55957 -6.65625v-91.1357c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h54.7842c2.38932 0 4.60807 0.853516 6.65625 2.56055
-c2.04753 1.70638 2.90072 3.92513 2.55957 6.65625zM438.784 265.728v-265.216c0 -7.50911 -2.56022 -13.9945 -7.68066 -19.4561c-5.11979 -5.46094 -11.6048 -8.19141 -19.4551 -8.19141h-384c-7.85091 0 -14.3363 2.73047 -19.4561 8.19141
-c-5.12044 5.46159 -7.85124 11.9469 -8.19238 19.4561v384c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.9463 8.19238 19.4561 8.19238h264.703c7.85091 0 16.3844 -2.04818 25.6006 -6.14453c9.21615 -4.0957 16.3841 -8.53288 21.5039 -13.3115
-l79.8721 -80.3838c5.46094 -5.12044 10.069 -12.2884 13.8242 -21.5039c3.75456 -9.21615 5.63184 -17.5791 5.63184 -25.0889z" />
-    <glyph glyph-name="uniF125" unicode="&#xf125;" 
-d="M238.08 364.032c23.2109 0 47.1042 -5.80273 71.6797 -17.4082c24.5762 -11.6055 45.7389 -25.6003 63.4883 -41.9844c17.7493 -16.3835 33.9626 -32.9382 48.6396 -49.6641c14.6777 -16.7253 25.6006 -30.8903 32.7686 -42.4951l11.7754 -17.4082
-c-3.07161 -4.77865 -7.16764 -11.0934 -12.2881 -18.9443c-5.11979 -7.85091 -15.8717 -21.6748 -32.2559 -41.4717c-16.3841 -19.7975 -32.9388 -37.3763 -49.6641 -52.7363s-37.3757 -29.3548 -61.9512 -41.9844c-24.5762 -12.6289 -48.6403 -18.7728 -72.1924 -18.4316
-c-23.5521 0.341146 -47.4453 6.14388 -71.6797 17.4082c-24.235 11.2637 -45.3978 25.7702 -63.4883 43.5195s-34.4746 34.8161 -49.1523 51.2002c-14.6771 16.3841 -25.5996 31.0615 -32.7676 44.0322l-11.7764 17.4082c2.73047 4.77865 6.65592 10.9225 11.7764 18.4316
-c5.11979 7.50911 15.8717 20.9919 32.2559 40.4482c16.3841 19.4557 33.1094 36.693 50.1758 51.7119c17.0671 15.0189 37.8883 28.5016 62.4639 40.4482c24.5762 11.9466 48.6403 17.9199 72.1924 17.9199zM238.08 78.3359c31.4023 0 58.3675 11.0934 80.8955 33.2803
-c22.528 22.1868 33.6214 49.152 33.2803 80.8955c-0.341146 31.7441 -11.4346 58.7096 -33.2803 80.8965c-21.8451 22.1868 -48.8102 33.4508 -80.8955 33.792c-32.0853 0.341146 -59.0508 -10.9229 -80.8965 -33.792c-21.8451 -22.8698 -33.109 -49.8353 -33.792 -80.8965
-c-0.682292 -31.0612 10.5817 -58.0264 33.792 -80.8955c23.2109 -22.8698 50.1764 -33.9632 80.8965 -33.2803zM180.736 192.512c0 38.2298 19.1146 57.3447 57.3438 57.3447c38.2292 0 57.1732 -19.1149 56.832 -57.3447
-c-0.341146 -38.2292 -19.2852 -57.1732 -56.832 -56.832c-37.5469 0.341797 -56.6615 19.2858 -57.3438 56.832z" />
-    <glyph glyph-name="uniF10B" unicode="&#xf10b;" 
-d="M479.232 3.07227c-49.1523 -2.56055 -141.824 -10.752 -192 -36.8643c-2.56055 -15.3604 -15.3604 -27.1357 -31.2324 -27.1357s-28.1602 11.7754 -30.7197 27.1357c-50.1768 26.1123 -143.36 34.8164 -192 36.8643c-17.4082 0 -31.7441 14.3359 -31.7441 31.7441
-v381.951c0 17.4082 14.3359 31.7441 31.7441 31.7441c1.02344 0 2.04785 -0.511719 3.07129 -0.511719c219.137 -5.63184 219.648 -62.9756 219.648 -62.9756s1.02441 57.3438 219.648 62.9756c1.53516 0 2.04785 0.511719 3.58398 0.511719
-c17.4072 0 31.7432 -14.3359 31.7432 -31.7441v-381.951c0 -17.4082 -14.3359 -31.7441 -31.7432 -31.7441zM224.256 348.672c-40.96 20.9922 -109.056 29.6963 -159.231 33.2803v-316.928c85.5039 -4.6084 133.632 -17.4082 159.231 -30.208v313.855zM446.976 381.952
-c-50.1758 -3.58398 -117.76 -12.2881 -158.72 -33.2803v-313.855c25.6006 12.7998 73.7285 25.5996 158.72 30.208v316.928zM415.232 321.024v-63.4883s-95.2324 0 -95.2324 -31.7441v63.4883s0 31.7441 95.2324 31.7441zM415.232 194.048v-64s-95.2324 0 -95.2324 -31.7441
-v64s0 31.7441 95.2324 31.7441zM192.512 289.28v-63.4883c0 31.7441 -95.2314 31.7441 -95.2314 31.7441v63.4883c95.2314 0 95.2314 -31.7441 95.2314 -31.7441zM192.512 162.304v-64c0 31.7441 -95.2314 31.7441 -95.2314 31.7441v64
-c95.2314 0 95.2314 -31.7441 95.2314 -31.7441z" />
-    <glyph glyph-name="uniF16A" unicode="&#xf16a;" 
-d="M509.952 193.024c0 -10.752 -1.02441 -20.9922 -2.04785 -31.7441c-0.512695 -2.56055 -1.02441 -5.12012 -1.02441 -7.68066c-1.53613 -8.70312 -3.07227 -16.8955 -5.63184 -25.5996c-0.511719 -1.53613 -0.511719 -3.07227 -1.02441 -4.6084
-c-6.14355 -20.9912 -14.8477 -40.96 -25.5996 -59.3916c-22.0156 -36.8643 -52.7363 -67.584 -89.5996 -89.5996c-18.4326 -10.752 -38.4004 -19.4561 -59.3926 -25.6006c-1.53613 -0.511719 -3.07227 -0.511719 -4.60742 -1.02344
-c-8.19238 -2.04883 -16.8965 -4.09668 -25.6006 -5.12012c-2.55957 -0.512695 -5.12012 -1.02441 -7.67969 -1.53613c-10.2402 -1.02441 -20.9922 -2.04785 -31.7441 -2.04785v0v0c-10.752 0 -20.9922 1.02344 -31.7441 2.04785
-c-2.55957 0.511719 -4.60742 1.02344 -7.16797 1.02344c-8.7041 1.53613 -17.4082 3.58398 -26.1123 5.63281c-1.02344 0.511719 -2.55957 0.511719 -4.0957 1.02344c-20.9922 6.14453 -40.96 14.8486 -59.3916 25.6006c-37.376 22.0156 -68.0967 52.7354 -90.1123 89.5996
-c-10.752 18.4316 -19.4561 38.4004 -25.5996 59.3916c0 1.53613 -0.512695 3.07227 -1.02441 4.6084c-2.04785 8.7041 -4.0957 16.8965 -5.12012 25.5996c-0.511719 2.56055 -1.02344 5.12012 -1.02344 7.68066c-1.53613 10.752 -2.56055 20.9922 -2.56055 31.7441v0v0
-c0 10.752 1.02441 21.5039 2.04785 31.7432c0.512695 2.56055 1.02441 5.12012 1.53613 7.68066c1.02441 8.7041 3.07227 16.8955 5.12012 25.5996c0.511719 1.53613 0.511719 3.07227 1.02441 4.6084c6.14355 20.9922 14.8477 40.96 25.5996 59.3916
-c22.0156 36.8643 52.7363 67.584 90.1123 89.6006c17.9199 10.752 38.3994 19.4551 59.3916 25.5996c1.02441 0.511719 2.56055 0.511719 4.0957 1.02441c8.7041 2.04785 16.8965 4.0957 25.6006 5.11914c2.55957 0.512695 5.12012 1.02441 7.67969 1.53613
-c10.752 1.02441 20.9922 2.04785 31.7441 2.04785v0v0c10.752 0 21.5039 -1.02344 31.7441 -2.04785c2.55957 -0.511719 5.12012 -1.02344 7.67969 -1.02344c8.7041 -1.53613 16.8965 -3.58398 25.6006 -5.63184c1.53516 -0.512695 3.07129 -0.512695 4.60742 -1.02441
-c20.9922 -6.14453 40.96 -14.8477 59.3926 -25.5996c36.8633 -22.0166 67.584 -52.7363 89.5996 -89.6006c10.752 -18.4316 19.4561 -38.3994 25.5996 -59.3916c0.512695 -1.53613 0.512695 -3.07227 1.02441 -4.6084c2.04785 -8.19141 4.0957 -16.8955 5.12012 -25.5996
-c0.511719 -2.56055 1.02344 -5.12012 1.53613 -7.68066c1.02344 -10.2393 2.04785 -20.9912 2.04785 -31.7432v0v0zM108.544 250.88l-47.1035 47.1045c-16.8965 -31.2324 -27.6484 -66.5605 -27.6484 -104.96c0 -38.4004 10.752 -73.7285 27.6484 -104.96l47.1035 47.1035
-c-7.16797 17.9199 -11.2637 37.376 -11.2637 57.8564c0 20.4795 4.0957 39.9355 11.2637 57.8555zM256 -29.1836c38.4004 0 73.7275 10.2393 104.96 27.6475l-47.1035 47.1045c-17.9209 -7.16797 -37.376 -11.2646 -57.8564 -11.2646s-39.9355 4.09668 -57.8564 11.2646
-l-47.1035 -47.1045c31.2324 -17.4082 66.5596 -27.6475 104.96 -27.6475zM256 415.232c-38.4004 0 -73.7275 -10.752 -104.96 -27.6484l47.1035 -47.1035c17.9209 7.16797 37.376 11.2637 57.8564 11.2637s39.9355 -4.0957 57.8564 -11.2637l47.1035 47.1035
-c-31.2324 16.8965 -66.5596 27.6484 -104.96 27.6484zM378.368 225.28v0c-11.7764 44.0312 -46.0801 78.3359 -90.1123 90.1113v0v0c-4.0957 1.02441 -8.19141 2.04883 -12.7998 2.56055c-6.14453 1.02344 -12.7998 2.04785 -19.4561 2.04785
-s-13.3115 -1.02441 -19.4561 -2.04785c-4.6084 -0.511719 -8.7041 -1.53613 -12.7998 -2.56055v0v0c-44.0322 -11.7754 -78.3359 -46.0801 -90.1123 -90.1113v0v0c-1.02344 -4.09668 -2.04785 -8.19238 -2.55957 -12.7998
-c-1.02441 -6.14453 -2.04785 -12.8008 -2.04785 -19.4561c0 -6.65625 1.02344 -13.3125 2.04785 -19.4561c0.511719 -4.6084 1.53613 -8.7041 2.55957 -12.8008v0v0c11.7764 -44.0312 46.0801 -78.3359 90.1123 -90.1113v0v0
-c4.0957 -1.02441 8.19141 -2.04785 12.7998 -2.56055c6.14453 -1.02344 12.7998 -2.04785 19.4561 -2.04785s13.3115 1.02441 19.4561 2.04785c4.6084 0.512695 8.7041 1.53613 13.3115 2.56055v0v0c43.5205 11.7754 77.8242 46.0801 89.6006 90.1113v0v0
-c1.02344 4.09668 2.04785 8.19238 2.55957 12.8008c1.02441 6.14355 2.04785 12.7998 2.04785 19.4561c0 6.65527 -1.02344 13.3115 -2.04785 19.4561c-0.511719 4.60742 -1.53613 8.70312 -2.55957 12.7998v0zM450.56 297.984l-47.1035 -47.1045
-c7.16797 -17.9199 11.2637 -37.376 11.2637 -57.8555c0 -20.4805 -4.0957 -39.9365 -11.2637 -57.8564l47.1035 -47.1035c17.4082 31.2314 27.6484 66.5596 27.6484 104.96c0 38.3994 -10.2402 73.7275 -27.6484 104.96z" />
-    <glyph glyph-name="uniF12D" unicode="&#xf12d;" 
-d="M94.208 395.264c15.3604 10.752 39.4238 15.8721 72.1924 15.8721h39.4238v-39.9355h-20.9922c-10.2402 0 -19.4561 -0.511719 -26.1123 -1.53613c-6.65527 -1.02441 -11.7754 -3.07227 -15.8721 -5.63184c-3.58398 -3.07227 -6.14355 -6.65625 -7.67969 -11.2646
-c-1.53613 -4.60742 -2.55957 -10.2393 -2.55957 -17.4072c0 -13.8242 0.511719 -27.1367 1.53516 -40.4482c0.512695 -13.3125 1.02441 -27.6484 1.02441 -43.0078c0 -19.4561 -4.0957 -33.792 -11.7764 -42.4961c-7.67969 -8.7041 -20.9912 -14.3359 -39.4238 -17.4082
-v-2.04785c18.4326 -3.07227 31.2324 -9.21582 39.4238 -17.9199c8.19238 -8.7041 11.7764 -22.5283 11.7764 -41.9844c0 -15.8721 -0.511719 -30.208 -1.02441 -43.0078c-1.02344 -13.3125 -1.53516 -26.624 -1.53516 -40.4482
-c0 -7.16797 1.02344 -13.3115 2.55957 -17.9199c1.53613 -4.60742 4.0957 -8.19141 7.67969 -10.752c4.09668 -2.55957 9.2168 -4.6084 15.8721 -5.63184c7.16797 -1.02441 15.8721 -1.53613 26.1123 -1.53613h20.9922v-39.9355h-39.4238
-c-32.7686 0 -56.832 5.11914 -72.1924 15.3594c-15.3604 10.752 -23.04 29.6963 -23.04 57.3438c0 9.2168 0.511719 17.4082 1.02441 24.5762c0.511719 7.16797 1.02344 13.8242 1.53516 20.4805c1.02441 6.65625 1.53613 13.3115 2.04883 19.9678
-c0.511719 6.65625 0.511719 14.3359 0.511719 22.5283c0 4.0957 -1.02441 8.7041 -3.07227 13.3115c-2.04785 4.09668 -5.63184 8.19238 -11.2637 11.7764c-5.12012 3.58398 -12.2881 6.14355 -21.5039 8.7041c-9.21582 2.55957 -20.4805 3.58398 -34.3047 4.0957v44.0322
-c13.8242 0 25.0889 1.53613 34.3047 3.58398c8.7041 2.55957 16.3838 5.12012 21.5039 8.7041c5.63184 3.58398 9.21582 7.67969 11.2637 12.2881c2.04785 4.0957 3.07227 8.7041 3.07227 13.3115c0 7.67969 0 14.8477 -0.511719 22.0166
-c-0.512695 6.65527 -1.02441 13.3115 -2.04883 19.9678c-0.511719 6.65527 -1.02344 13.8242 -1.53516 20.9922c-0.512695 7.67969 -1.02441 15.3594 -1.02441 24.5752c0 27.6484 7.67969 46.5928 23.04 56.832zM478.208 216.576
-c8.7041 -2.04785 20.4805 -3.58398 34.3037 -3.58398v-44.0322c-13.8232 -0.511719 -25.0879 -2.04785 -34.3037 -4.0957s-16.3838 -5.12012 -22.0156 -8.7041c-5.12012 -3.58398 -9.2168 -7.67969 -11.2646 -11.7764
-c-2.04785 -4.60742 -3.07129 -9.21582 -3.07129 -13.3115c0 -8.19238 0.511719 -15.8721 1.02344 -22.5283s1.02441 -13.3115 2.04785 -19.9678c0.512695 -6.65625 1.53613 -13.3125 2.04785 -20.4805c0.512695 -7.16797 0.512695 -15.3594 0.512695 -24.5762
-c0 -27.6475 -7.68066 -46.5918 -23.04 -57.3438c-15.3604 -10.2402 -39.4238 -15.3594 -72.1924 -15.3594h-39.4238v39.9355h20.9922c10.752 0 19.4561 0.511719 26.1113 1.53613c6.65625 1.02344 11.7764 2.55957 15.3604 5.63184
-c4.0957 2.56055 6.65625 6.14453 8.19238 10.752c1.53613 4.6084 2.04785 10.752 2.04785 17.9199c0 13.8242 0 27.1357 -1.02441 40.4482c-0.511719 12.7998 -1.02344 27.1357 -1.02344 43.0078c0 19.4561 4.0957 33.2803 11.7754 41.9844
-c8.19238 8.7041 20.9922 14.8477 39.4248 17.9199v2.04785c-18.4326 3.07227 -31.2324 8.7041 -39.4248 17.4082c-7.67969 8.7041 -11.7754 23.04 -11.7754 42.4961c0 15.3594 0 29.6953 1.02344 43.0078c1.02441 13.3115 1.02441 26.624 1.02441 40.4482
-c0 7.16797 -0.511719 12.7998 -2.04785 17.4072c-1.53613 4.6084 -4.09668 8.19238 -8.19238 11.2646c-3.58398 2.55957 -8.7041 4.60742 -15.3604 5.63184c-6.65527 1.02441 -15.3594 1.53613 -26.1113 1.53613h-20.9922v39.9355h39.4238
-c32.7686 0 56.832 -5.12012 72.1924 -15.8721c15.3594 -10.2393 23.04 -29.1836 23.04 -56.832c0 -9.21582 0 -16.8955 -0.512695 -24.5752c-0.511719 -7.16797 -1.53516 -14.3369 -2.04785 -20.9922c-1.02344 -6.65625 -1.53613 -13.3125 -2.04785 -19.9678
-c-0.511719 -7.16895 -1.02344 -14.3369 -1.02344 -22.0166c0 -4.60742 1.02344 -9.21582 3.07129 -13.3115c2.04785 -4.6084 6.14453 -8.7041 11.2646 -12.2881c5.63184 -3.58398 12.7998 -6.14453 22.0156 -8.7041z" />
-    <glyph glyph-name="uniF152" unicode="&#xf152;" 
-d="M192 96.7676h32.2559v-64h-32.2559v64zM256 96.7676h32.2559v-64h-32.2559v64zM320 96.7676h32.2559v-64h-32.2559v64zM416.256 144.384l95.7441 -79.8721l-95.7441 -79.8721h-32.2559v159.744h32.2559zM512 400.384v-159.744h-159.744v159.744h159.744zM463.872 288.768
-v64h-64v-64h64zM0 -15.3604v159.744h160.256v-159.744h-160.256zM48.1279 96.7676v-64h64v64h-64zM288.256 352.768h31.7441v-64h-31.7441v64zM224.256 352.768h31.7441v-64h-31.7441v64zM160.256 352.768h31.7441v-64h-31.7441v64zM128 240.64h-32.2559l-95.7441 79.8721
-l95.7441 79.8721h32.2559v-159.744z" />
-    <glyph glyph-name="uniF13B" unicode="&#xf13b;" 
-d="M475.648 265.728c9.89844 0 18.4316 -3.58398 25.5996 -10.752s10.752 -15.8717 10.752 -26.1113c0 -10.2402 -3.58398 -18.7738 -10.752 -25.6006c-7.16797 -6.82617 -15.7012 -10.4102 -25.5996 -10.752v-109.567c0 -9.89909 -3.75488 -18.4326 -11.2646 -25.6006
-c-7.50911 -7.16797 -16.0423 -10.9225 -25.5996 -11.2637c-79.5306 66.2188 -156.843 102.4 -231.937 108.544c-10.9225 -3.41341 -19.6263 -9.55729 -26.1113 -18.4316c-6.48568 -8.875 -9.38704 -18.6032 -8.7041 -29.1846
-c0.682292 -10.5814 4.43685 -19.2852 11.2637 -26.1113c-3.75456 -6.48568 -5.97331 -12.8005 -6.65625 -18.9443c-0.682292 -6.14388 0.000651042 -11.6051 2.04883 -16.3838c2.04753 -4.77865 5.11947 -10.0693 9.21582 -15.8721
-c4.0957 -5.80273 8.70345 -10.5814 13.8232 -14.3359c5.12044 -3.75521 11.0941 -8.53385 17.9209 -14.3359c-5.80273 -10.9232 -16.555 -18.7741 -32.2568 -23.5527c-15.7012 -4.77865 -31.7438 -5.97331 -48.1279 -3.58398
-c-16.3835 2.38932 -28.8421 7.68001 -37.376 15.8721c-1.36523 4.4375 -4.2666 12.8001 -8.7041 25.0879c-4.43685 12.2884 -7.50879 21.334 -9.21582 27.1367c-1.70638 5.80273 -3.75423 14.3359 -6.14355 25.5996c-2.38932 11.2643 -3.92546 20.8216 -4.6084 28.6719
-c-0.682292 7.85091 -0.34082 17.2376 1.02441 28.1602c1.36523 10.9225 3.41309 21.5039 6.14355 31.7441h-34.8154c-12.2884 0 -23.0407 4.43717 -32.2568 13.3115c-9.21549 8.875 -13.6527 19.627 -13.3115 32.2559v54.7842c0 12.6296 4.43717 23.3815 13.3115 32.2559
-c8.875 8.875 19.6273 13.3125 32.2568 13.3125h137.216c82.944 0 168.277 36.6934 256 110.08c9.89844 0 18.4316 -3.75456 25.5996 -11.2637c7.16797 -7.50977 10.9229 -16.0433 11.2646 -25.6006v-109.568zM438.784 93.1836v272.385
-c-75.0938 -57.3444 -148.139 -89.9417 -219.136 -97.792v-77.3125c71.6797 -7.85026 144.725 -40.277 219.136 -97.2803z" />
-    <glyph glyph-name="uniF147" unicode="&#xf147;" 
-d="M192 2.04785l-189.952 -63.4883l62.9766 190.465l317.439 317.439l126.977 -126.976zM65.0244 2.04785l95.2314 31.7441l-63.4883 63.4883zM128.512 129.024l63.4883 -63.4883l190.464 190.464l-63.4883 63.4883z" />
-    <glyph glyph-name="uniF115" unicode="&#xf115;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v256h-384v-256h384zM448 320.512v64h-384v-64h384zM224.256 32.7676v95.7441h-64l95.7441 96.2559l96.2559 -96.2559h-64v-95.7441h-64z" />
-    <glyph glyph-name="uniF15A" unicode="&#xf15a;" 
-d="M237.568 421.376l228.863 -228.352l-228.863 -229.376l-80.3848 81.9199l89.6006 90.1113h-237.568v114.688h237.568l-89.6006 90.1123z" />
-    <glyph glyph-name="uniF15F" unicode="&#xf15f;" 
-d="M495.616 19.9678c18.9434 -18.9434 18.9434 -49.1514 0 -67.584c-18.4326 -18.9434 -48.6406 -18.9434 -67.584 0l-111.616 111.616c-31.7441 -19.4561 -68.0957 -31.2324 -108.032 -31.2324c-114.176 0 -206.848 92.6729 -206.848 206.849
-s92.6719 206.848 206.848 206.848s206.849 -92.6719 206.849 -206.848c0 -39.4238 -11.7764 -76.2881 -31.2324 -108.032zM208.384 96.7676c78.8486 0 142.849 64 142.849 142.849c0 79.3594 -64 143.359 -142.849 143.359c-79.3594 0 -143.359 -64 -143.359 -143.359
-c0 -78.8486 64 -142.849 143.359 -142.849z" />
-    <glyph glyph-name="uniF134" unicode="&#xf134;" 
-d="M416.256 100.864c0 7.85026 -2.73047 14.3356 -8.19141 19.4561l-59.3926 59.3916c-5.46094 5.46159 -11.9463 8.19238 -19.4561 8.19238c-8.19206 0 -15.0186 -3.07194 -20.4795 -9.21582c0.341146 -0.341797 2.04785 -2.0485 5.12012 -5.12012
-c3.07161 -3.07227 5.11947 -5.12044 6.14355 -6.14453s2.56022 -2.90137 4.6084 -5.63184c2.04753 -2.73047 3.24219 -5.11979 3.58398 -7.16797c0.341146 -2.04818 0.682292 -4.60807 1.02344 -7.67969c0 -7.85091 -2.73047 -14.3363 -8.19141 -19.4561
-c-5.46159 -5.12044 -11.9469 -7.85124 -19.4561 -8.19238c-2.73112 0 -5.29134 0.341471 -7.68066 1.02441c-2.38932 0.682292 -4.77865 1.87695 -7.16797 3.58398c-2.38932 1.70638 -4.2666 3.24219 -5.63184 4.60742s-3.41309 3.41341 -6.14355 6.14453
-c-2.73112 2.73047 -4.43783 4.43717 -5.12012 5.12012c-6.48568 -5.80273 -9.72852 -12.6296 -9.72852 -20.4805s2.73079 -14.3363 8.19238 -19.4561l58.8799 -59.3916c5.11979 -5.12044 11.6051 -7.68066 19.4561 -7.68066c7.50911 0 13.9945 2.56022 19.4561 7.68066
-l41.9844 41.4717c5.46094 5.46159 8.19141 11.9469 8.19141 19.4561v-0.511719zM215.04 302.592c0 7.50977 -2.5599 13.9951 -7.67969 19.4561l-58.8799 58.8799c-5.46159 5.46159 -11.9469 8.19238 -19.4561 8.19238c-7.50977 0 -13.9951 -2.5599 -19.4561 -7.67969
-l-41.9844 -41.9844c-5.46159 -5.11979 -8.19238 -11.4346 -8.19238 -18.9443c0 -7.50911 2.73079 -13.9945 8.19238 -19.4561l59.3916 -59.3916c5.12044 -5.11979 11.6058 -7.67969 19.4561 -7.67969c7.85091 0 14.6777 2.90137 20.4805 8.7041
-c-0.682943 0.682292 -2.56022 2.55957 -5.63184 5.63184c-3.07227 3.07161 -5.12044 5.11947 -6.14453 6.14355s-2.38932 2.73079 -4.0957 5.12012s-2.90104 4.77865 -3.58398 7.16797s-1.02441 5.12012 -1.02441 8.19238c0 7.50911 2.56022 13.9945 7.68066 19.4561
-c5.11979 5.46094 11.6051 8.02083 19.4561 7.67969c3.07161 0 5.80208 -0.341471 8.19141 -1.02441c2.38932 -0.682292 4.77865 -1.87695 7.16797 -3.58398c2.38932 -1.70638 4.09603 -3.07161 5.12012 -4.0957s3.07227 -3.07194 6.14453 -6.14355
-c3.07161 -3.07227 4.94889 -4.94987 5.63184 -5.63281c6.14388 5.80273 9.21582 12.8001 9.21582 20.9922zM471.04 100.864c0 -22.528 -8.19206 -41.8135 -24.5762 -57.8564l-41.9834 -41.4717c-15.7018 -16.043 -34.9873 -24.0645 -57.8564 -24.0645
-c-23.2109 0 -42.667 8.19206 -58.3682 24.5762l-58.8799 58.8799c-15.7012 16.043 -23.5518 35.499 -23.5518 58.3682c0 23.2109 8.36263 43.0085 25.0879 59.3926l-25.0879 25.0879c-16.3841 -16.7253 -36.1816 -25.0879 -59.3926 -25.0879
-c-22.8691 0 -42.3249 8.02116 -58.3672 24.0635l-59.3926 59.3916c-16.0423 16.043 -24.0635 35.499 -24.0635 58.3682c0 22.8698 8.02116 42.1553 24.0635 57.8564l41.9844 41.9834c16.0423 15.7018 35.4984 23.5527 58.3682 23.5527
-c22.8691 0 42.3249 -8.02148 58.3672 -24.0645l58.8809 -59.3916c15.7012 -15.7012 23.5518 -34.9867 23.5518 -57.8564c0 -23.5521 -8.36263 -43.5199 -25.0879 -59.9033l25.0879 -25.0889c16.3841 16.7259 36.1813 25.0889 59.3916 25.0889
-c22.8691 0 42.3252 -8.02148 58.3682 -24.0645l59.3916 -59.3916c16.043 -16.043 24.0645 -35.499 24.0645 -58.3682z" />
-    <glyph glyph-name="uniF140" unicode="&#xf140;" 
-d="M329.216 220.16v-18.4326c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-237.568c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v18.4326
-c0 2.38932 0.853516 4.43717 2.56055 6.14355c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055h237.568c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.75423 2.55957 -6.14355zM365.568 92.1602v237.567
-c0 12.6296 -4.4375 23.3818 -13.3125 32.2568c-8.87435 8.87435 -19.6263 13.3115 -32.2559 13.3115h-237.568c-12.6289 0 -23.3809 -4.43717 -32.2559 -13.3115c-8.87435 -8.875 -13.4824 -19.6273 -13.8242 -32.2568v-237.567
-c0 -12.6296 4.60807 -23.5524 13.8242 -32.7686c9.21615 -9.21549 19.9681 -13.6527 32.2559 -13.3115h237.568c12.6296 0 23.3815 4.43717 32.2559 13.3115c8.875 8.875 13.3125 19.7979 13.3125 32.7686zM402.432 329.728v-237.567
-c0 -22.8691 -8.02116 -42.3252 -24.0635 -58.3682c-16.043 -16.043 -35.499 -24.0645 -58.3682 -24.0645h-237.568c-22.8691 0 -42.3249 8.02148 -58.3672 24.0645c-16.043 16.043 -24.0645 35.499 -24.0645 58.3682v237.567c0 22.528 8.02148 41.8135 24.0645 57.8564
-c16.0423 16.043 35.498 24.235 58.3672 24.5762h237.568c22.528 0 41.984 -8.19206 58.3682 -24.5762s24.4053 -35.6696 24.0635 -57.8564z" />
-    <glyph glyph-name="uniF11C" unicode="&#xf11c;" 
-d="M292.352 192.512c0 -20.1387 -6.99707 -37.376 -20.9912 -51.7119c-13.9948 -14.3359 -31.2321 -21.5039 -51.7119 -21.5039c-20.4805 0 -37.7181 7.16797 -51.7129 21.5039c-13.9941 14.3359 -21.1621 31.5732 -21.5039 51.7119
-c-0.341146 20.1387 6.82682 37.376 21.5039 51.7119c14.6777 14.3359 31.9154 21.5039 51.7129 21.5039c19.7969 0 37.0342 -7.16797 51.7119 -21.5039c14.6771 -14.3359 21.6742 -31.5732 20.9912 -51.7119zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF16E" unicode="&#xf16e;" 
-d="M218.624 307.712c-1.70638 -3.75456 -4.43717 -5.63184 -8.19238 -5.63184h-64v-356.353c0 -2.73047 -0.85319 -4.94889 -2.55957 -6.65527c-1.70703 -1.70703 -3.92578 -2.56055 -6.65625 -2.56055h-54.7842c-2.73047 0 -4.94889 0.853516 -6.65527 2.56055
-c-1.70703 1.70638 -2.56055 3.9248 -2.56055 6.65527v356.353h-64c-4.0957 0 -6.82617 1.87728 -8.19141 5.63184c-1.36589 3.75456 -0.854167 6.9974 1.53516 9.72852l99.8408 110.079c1.70638 1.70703 3.9248 2.56055 6.65527 2.56055
-c2.38932 0 4.60807 -0.853516 6.65625 -2.56055l101.376 -110.079c2.38932 -3.07227 2.90137 -6.3151 1.53613 -9.72852z" />
-    <glyph glyph-name="uniF13D" unicode="&#xf13d;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM109.056 150.528h293.889v83.9678h-293.889v-83.9678z" />
-    <glyph glyph-name="uniF165" unicode="&#xf165;" 
-d="M398.464 0h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944zM358.848 122.672
-c3.56836 -3.56836 5.34473 -7.87207 5.34473 -12.96s-1.77637 -9.3916 -5.34473 -12.96c-3.56738 -3.56836 -7.87207 -5.34375 -12.9434 -5.34375c-5.08789 0 -9.4082 1.77539 -12.9766 5.34375l-42.2881 42.6562c-13.1836 -7.87207 -26.9121 -11.792 -41.1357 -11.792
-c-21.5996 0 -40.1279 7.66406 -55.6318 23.0234c-15.4883 15.376 -23.2324 33.9844 -23.2324 55.8242c0 21.584 7.68066 40.0479 23.04 55.4238c15.3604 15.3604 33.9688 23.04 55.8086 23.04c21.8555 0 40.4473 -7.67969 55.8232 -23.04
-c15.3447 -15.376 23.0244 -33.8398 23.0244 -55.4238c0 -13.7119 -4.06348 -27.4238 -12.1924 -41.1357zM210.848 168c10.8008 -10.6562 23.6807 -16 38.6719 -16c14.9766 0 27.8242 5.34375 38.4805 16c10.6562 10.6719 16 23.4883 16 38.4805
-c0 14.9912 -5.34375 27.8076 -16 38.4795s-23.5039 16 -38.4805 16c-14.9912 0 -27.8711 -5.32812 -38.6719 -16c-10.7998 -10.6719 -16.1914 -23.4883 -16.1914 -38.4795c0.015625 -14.9922 5.3916 -27.8086 16.1914 -38.4805z" />
-    <glyph glyph-name="uniF117" unicode="&#xf117;" 
-d="M512 -6.65625c0 -30.208 -24.0645 -54.7842 -54.2725 -54.7842h-400.896c-30.208 0 -54.7842 24.5762 -54.7842 54.7842v400.384c0 30.208 24.5762 54.7842 54.7842 54.7842h400.896c30.208 0 54.2725 -24.5762 54.2725 -54.7842v-400.384zM464.384 398.848
-c0 1.02441 -0.511719 2.04883 -1.53613 2.04883h-411.136c-1.02344 0 -1.53613 -1.02441 -1.53613 -2.04883v-410.624c0 -1.02344 0.512695 -2.04785 1.53613 -2.04785h411.136c1.02441 0 1.53613 1.02441 1.53613 2.04785v410.624zM100.864 76.7998l-38.9121 27.6484
-l96.2559 134.655l61.4404 -61.4395l65.5352 114.688l65.0244 -80.8955l61.4404 98.8164l40.96 -25.0889l-97.792 -156.159l-62.9766 78.3359l-61.4395 -108.032l-66.0488 66.0479z" />
-    <glyph glyph-name="uniF157" unicode="&#xf157;" 
-d="M0 10.752l102.912 103.424l-75.7764 74.752h225.792v-225.792l-74.752 75.7764l-102.912 -102.912zM259.072 195.072v225.792l74.752 -75.7764l103.424 102.912l74.752 -74.752l-102.912 -103.424l75.7764 -74.752h-225.792z" />
-    <glyph glyph-name="uniF14D" unicode="&#xf14d;" 
-d="M365.568 174.08v36.8643c0 4.77865 -1.70671 9.04525 -5.12012 12.7998s-7.68001 5.46126 -12.7998 5.12012h-91.6484v91.6475c0 5.12044 -1.87728 9.38704 -5.63184 12.7998c-3.75456 3.41341 -8.02116 5.29102 -12.7998 5.63281h-36.3525
-c-5.11979 0 -9.38639 -1.8776 -12.7998 -5.63281c-3.41341 -3.75456 -5.29069 -8.02116 -5.63184 -12.7998v-91.6475h-91.1357c-5.12044 0 -9.55794 -1.70671 -13.3125 -5.12012s-5.46126 -7.68001 -5.12012 -12.7998v-36.8643
-c0 -4.77865 1.70671 -9.04525 5.12012 -12.7998s7.85091 -5.46126 13.3125 -5.12012h91.1357v-91.6484c0 -4.77865 1.87728 -9.04525 5.63184 -12.7998s8.02116 -5.63184 12.7998 -5.63184h36.3525c5.11979 0 9.38639 1.87728 12.7998 5.63184
-s5.29069 8.02116 5.63184 12.7998v91.6484h91.6484c4.77865 0 9.04525 1.70671 12.7998 5.12012s5.46126 7.68001 5.12012 12.7998zM438.784 329.728v-274.432c0 -22.528 -8.02148 -41.8132 -24.0645 -57.8555c-16.0423 -16.043 -35.4984 -24.235 -58.3682 -24.5762h-273.92
-c-22.8691 0 -42.3249 8.19206 -58.3672 24.5762c-16.043 16.3835 -24.0645 35.6686 -24.0645 57.8555v274.432c0 22.528 8.02148 41.8135 24.0645 57.8564c16.0423 16.043 35.498 24.235 58.3672 24.5762h273.92c22.8698 0 42.3258 -8.19206 58.3682 -24.5762
-c16.043 -16.3841 24.0645 -35.6696 24.0645 -57.8564z" />
-    <glyph glyph-name="uniF13C" unicode="&#xf13c;" 
-d="M0 120.32v144.384h512v-144.384h-512z" />
-    <glyph glyph-name="uniF15D" unicode="&#xf15d;" 
-d="M0 12.2881l180.224 180.224l-180.224 180.225l75.7764 75.7754l180.224 -179.712l75.7764 -76.2881l-256 -256z" />
-    <glyph glyph-name="uniF161" unicode="&#xf161;" 
-d="M252.384 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.752v121.904h121.904v-24.3838h-0.0166016zM398.672 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7686v121.904h121.904v-24.3838zM398.464 16h-284.944
-c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 352
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF136" unicode="&#xf136;" 
-d="M91.6484 228.864h145.92v55.2959c0 20.1387 -7.16797 37.376 -21.5039 51.7119c-14.3366 14.3359 -31.5742 21.3333 -51.7129 20.9922c-20.1387 -0.341797 -37.376 -7.33919 -51.7119 -20.9922c-14.3359 -13.6536 -21.333 -30.891 -20.9912 -51.7119v-55.2959z
-M329.216 201.728v-164.863c0 -7.50977 -2.73047 -13.8245 -8.19141 -18.9443c-5.46159 -5.11979 -11.9469 -7.85059 -19.4561 -8.19238h-273.92c-7.85091 0 -14.3363 2.73079 -19.4561 8.19238c-5.12044 5.46159 -7.85124 11.7764 -8.19238 18.9443v164.863
-c0 7.50977 2.73079 13.9951 8.19238 19.4561c5.46094 5.46159 11.9463 8.02181 19.4561 7.68066h8.70312v55.2959c0 34.8158 12.6296 64.8532 37.8887 90.1123c25.2585 25.2585 55.2956 37.8877 90.1113 37.8877c34.8164 0 65.0244 -12.6292 90.624 -37.8877
-c25.6003 -25.2591 38.0589 -55.2965 37.376 -90.1123v-55.2959h9.2168c7.85026 0 14.3356 -2.56022 19.4561 -7.68066c5.11979 -5.11979 7.85026 -11.6051 8.19141 -19.4561z" />
-    <glyph glyph-name="uniF166" unicode="&#xf166;" 
-d="M252.384 228.576h-73.1357v-24.3838h73.1357v-73.1367h-121.888v24.3682h73.1357v24.3838h-73.1357v73.1523h121.904v-24.3838h-0.0166016zM398.672 228.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7686v121.904h121.904v-24.3838zM398.464 0
-h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF127" unicode="&#xf127;" 
-d="M484.571 338.286c7.61914 0 14.0954 -2.66667 19.4287 -8s8 -11.8096 8 -19.4287v-347.429c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-274.285c-7.61914 0 -14.0954 2.66667 -19.4287 8s-8 11.8096 -8 19.4287v82.2852h-155.429
-c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v192c0 7.61914 1.90462 16.0003 5.71387 25.1436c3.8099 9.14258 8.38151 16.3805 13.7148 21.7139l116.571 116.571c5.33333 5.33333 12.5713 9.90495 21.7139 13.7148
-c9.14323 3.80924 17.5244 5.71387 25.1436 5.71387h118.856c7.61914 0 14.0954 -2.66667 19.4287 -8s8 -11.8096 8 -19.4287v-93.7139c12.9525 7.61914 25.1429 11.4287 36.5713 11.4287h118.857zM329.143 277.429l-85.4287 -85.4287h85.4287v85.4287zM146.286 387.143
-l-85.4287 -85.4287h85.4287v85.4287zM202.286 202.286l90.2852 90.2852v118.857h-109.714v-118.857c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8096 -8 -19.4287 -8h-118.857v-182.856h146.286v73.1426c0 7.61914 1.90462 16 5.71387 25.1426
-c3.8099 9.14323 8.38151 16.3815 13.7148 21.7148zM475.429 -27.4287v329.143h-109.715v-118.856c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-118.857v-182.857h256z" />
-    <glyph glyph-name="uniF167" unicode="&#xf167;" 
-d="M243.248 131.04h-121.904v121.92h48.752v-97.5361h24.3848v97.5361h48.7676v-121.92zM389.536 228.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.752v121.904h121.903v-24.3838h-0.015625zM398.464 0h-284.944
-c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 336
-c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF156" unicode="&#xf156;" 
-d="M286.4 -64l75.1992 75.2002l-102.399 104l73.5996 73.5996l104 -102.399l75.2002 75.1992v-225.6h-225.6zM179.2 195.2l-104 104l-75.2002 -76.7998v225.6h225.6l-75.1992 -75.2002l102.399 -104z" />
-    <glyph glyph-name="uniF142" unicode="&#xf142;" 
-d="M25.5996 320v31.7441c0 52.7363 85.5039 95.2314 190.465 95.2314c104.96 0 190.976 -42.4951 190.976 -95.2314v-31.7441c0 -36.3516 -39.4238 -67.584 -98.3037 -83.4561c-2.04785 -0.511719 -4.09668 -1.02441 -6.14453 -1.53613
-c-25.5996 -6.65625 -55.2959 -10.752 -86.5273 -10.752c-104.961 0 -190.465 43.0078 -190.465 95.7441zM384 235.008c14.8477 11.7764 23.04 26.624 23.04 43.0078v-51.1992c-7.16797 3.58398 -14.8477 6.14355 -23.04 8.19141zM205.824 2.04785
-c14.3359 -25.5996 35.8398 -46.5918 61.4395 -60.416c-16.3838 -2.55957 -33.2793 -3.58398 -51.1992 -3.58398c-104.961 0 -190.465 42.4961 -190.465 95.2324v53.7598c0 -50.6885 79.8721 -82.9443 180.225 -84.9922zM191.488 34.3037
-c-93.6963 6.14453 -165.889 46.0801 -165.889 94.7207v53.7598c0 -47.6162 69.1201 -78.8486 159.744 -84.4805c-0.511719 -5.63184 -1.02344 -11.2637 -1.02344 -16.8955c0 -16.3838 2.55957 -32.2559 7.16797 -47.1045zM192 129.536
-c-93.6963 6.14355 -166.4 46.0801 -166.4 94.7197v53.7598c0 -52.7354 85.5039 -85.5039 190.465 -85.5039c5.11914 0 9.72754 0 14.3359 0.512695c-17.4082 -17.9209 -30.7207 -39.4248 -38.4004 -63.4883zM486.912 81.4082c0 -79.3604 -64.5117 -143.36 -143.36 -143.36
-c-78.8477 0 -143.359 64 -143.359 143.36c0 79.3594 64.5117 142.848 143.359 142.848c78.8486 0 143.36 -64 143.36 -142.848zM438.784 97.2803h-79.3604v79.3594h-31.7441v-79.3594h-79.3594v-31.7441h79.3594v-79.8721h31.7441v79.8721h79.3604v31.7441z" />
-    <glyph glyph-name="uniF128" unicode="&#xf128;" 
-d="M455.714 363.714c3.23828 -7.80924 1.90495 -14.4759 -4 -20l-140.856 -140.856v-212c0 -8 -3.71452 -13.6191 -11.1436 -16.8574c-2.47591 -0.952474 -4.85677 -1.42871 -7.14258 -1.42871c-5.14258 0 -9.42839 1.80957 -12.8574 5.42871l-73.1426 73.1426
-c-3.61914 3.61914 -5.42871 7.90495 -5.42871 12.8574v138.857l-140.856 140.856c-5.90495 5.52409 -7.23828 12.1908 -4 20c3.23763 7.42904 8.85645 11.1436 16.8564 11.1436h365.715c8 0 13.6188 -3.71452 16.8564 -11.1436z" />
-    <glyph glyph-name="uniF11B" unicode="&#xf11b;" 
-d="M335.36 447.488l158.72 -158.721v-253.951h-95.2324v-95.2324h-380.928v412.672h95.2324v95.2324h222.208zM335.36 3.07227v31.7441h-222.208v253.951h-31.7441v-285.695h253.952zM430.592 98.3037v158.721h-126.976v126.976h-126.977v-285.696h253.952z" />
-    <glyph glyph-name="uniF105" unicode="&#xf105;" 
-d="M0 -63.4883v205.824h205.824l-81.9199 -81.9199c36.8639 -36.5228 80.8958 -54.7842 132.096 -54.7842c42.6667 0 80.5547 12.8001 113.664 38.4004c33.1094 25.5996 55.2959 58.3675 66.5596 98.3037h70.6562c-11.9466 -59.0508 -41.472 -108.203 -88.5762 -147.456
-c-47.1035 -39.2533 -101.205 -58.7093 -162.304 -58.3682c-70.6562 0 -130.902 24.9173 -180.736 74.752zM5.12012 242.688c11.9466 59.3919 41.472 108.544 88.5762 147.455c47.1035 38.9121 101.205 58.3682 162.304 58.3682c70.6562 0 131.072 -24.9173 181.248 -74.752
-l74.752 74.752v-205.823h-205.824l81.9199 81.9199c-36.8639 36.5221 -80.8958 54.7832 -132.096 54.7832c-42.6667 0 -80.5547 -12.7998 -113.664 -38.3994c-33.1094 -25.6003 -55.2959 -58.3682 -66.5596 -98.3037h-70.6562z" />
-    <glyph glyph-name="uniF160" unicode="&#xf160;" 
-d="M288 -64h-64v48h64v-48zM128 400v48h48v-48h-48zM176 -64h-48v48h48v-48zM224 448h64v-48h-64v48zM432 400v48h80v-80h-48v32h-32zM48 160h-48v64h48v-64zM0 272v48h48v-48h-48zM48 64h-48v48h48v-48zM384 -16v-48h-48v48h48zM80 -16v-48h-80v80h48v-32h32zM464 16h48
-v-80h-80v48h32v32zM464 320h48v-48h-48v48zM48 368h-48v80h80v-48h-32v-32zM336 448h48v-48h-48v48zM464 224h48v-64h-48v64zM512 112v-48h-48v48h48zM147.2 81.5996c-28.7998 30.4004 -44.7998 67.2002 -44.7998 108.801c0 43.1992 14.3994 78.3994 44.7998 108.8
-c30.3994 30.3994 67.2002 44.7998 108.8 44.7998s76.7998 -14.4004 108.8 -44.7998c30.4004 -30.4004 44.7998 -65.6006 44.7998 -108.8c0 -43.2002 -16 -80 -44.7998 -108.801c-30.3994 -30.3994 -65.5996 -44.7998 -108.8 -44.7998s-80 16 -108.8 44.7998zM190.4 204.8
-l-32 -32l64 -64l32 32l99.1992 99.2002l-32 32l-99.1992 -100.8z" />
-    <glyph glyph-name="uniF11A" unicode="&#xf11a;" 
-d="M287.744 447.488l159.231 -159.232v-350.72h-381.951v509.952h222.72zM128.512 1.53613h254.977v254.464h-127.488v127.488h-127.488v-381.952z" />
-    <glyph glyph-name="uniF14C" unicode="&#xf14c;" 
-d="M0 192c0 70.4004 25.5996 131.2 75.2002 180.8c49.5996 49.6006 110.399 76.7998 180.8 75.2002s131.2 -25.5996 180.8 -75.2002c51.2002 -48 75.2002 -108.8 75.2002 -180.8s-25.5996 -131.2 -75.2002 -180.8c-49.5996 -49.6006 -108.8 -73.6006 -180.8 -75.2002
-s-131.2 24 -180.8 75.2002c-49.6006 51.2002 -73.6006 110.399 -75.2002 180.8zM56 192c0 -56 19.2002 -102.4 59.2002 -140.8c40 -38.4004 86.3994 -59.2002 140.8 -59.2002s102.4 19.2002 140.8 59.2002c38.4004 40 59.2002 86.3994 59.2002 140.8
-s-19.2002 102.4 -59.2002 140.8c-40 38.4004 -86.3994 60.7998 -140.8 59.2002c-54.4004 0 -102.4 -19.2002 -140.8 -59.2002c-38.4004 -40 -59.2002 -84.7998 -59.2002 -140.8zM112 152v81.5996h104v102.4h81.5996v-104h102.4v-81.5996h-104v-102.4h-81.5996v104h-102.4z
-" />
-    <glyph glyph-name="uniF172" unicode="&#xf172;" 
-d="M0 102.4l256 256l256 -256l-75.7764 -75.7764l-180.224 179.712l-180.224 -179.712z" />
-    <glyph glyph-name="uniF151" unicode="&#xf151;" 
-d="M492.544 -62.4639h-474.624c0 61.4395 71.6797 112.64 169.472 129.536v25.0879c-40.4473 23.5518 -67.584 67.0723 -67.584 116.736v3.58398c-19.9678 7.16797 -33.792 25.5996 -33.792 47.6152c0 22.0166 13.8242 40.4482 33.792 47.1045v3.58398
-c0 74.752 60.416 135.68 135.681 135.68c75.2637 0 135.68 -60.9277 135.68 -135.68v-3.58398c19.4561 -6.65625 33.792 -25.0879 33.792 -47.1045c0 -22.0156 -14.3359 -40.4473 -33.792 -47.6152v-3.58398c0 -49.6641 -27.6484 -93.1846 -68.0957 -116.736v-25.0879
-c97.792 -16.8965 169.472 -68.0967 169.472 -129.536z" />
-    <glyph glyph-name="uniF14F" unicode="&#xf14f;" 
-d="M240 177.184l0.0644531 123.761l41.4395 -41.4561l80.2559 80.2715l42.6562 -42.6396l-80.2725 -80.2725l40.4004 -40.3994zM414.816 176.896l1.18359 -112.896c0 -17.6641 -14.3359 -32 -32 -32h-256c-17.6641 0 -32 14.3359 -32 32v256c0 17.6641 14.3359 32 32 32h112
-l32 -32l-143.328 -0.624023l-0.255859 -255.584l256.24 0.143555l-0.560547 144.112z" />
-    <glyph glyph-name="uniF149" unicode="&#xf149;" 
-d="M395.424 183.136l-379.424 -210.863c-4.38411 -2.47526 -8.14421 -2.76335 -11.2803 -0.864258c-3.13607 1.89844 -4.70931 5.3278 -4.71973 10.2881v420.576c0 4.94922 1.57324 8.37826 4.71973 10.2871c3.14714 1.90951 6.90723 1.62174 11.2803 -0.863281
-l379.424 -210.864c4.38411 -2.47461 6.57617 -5.42936 6.57617 -8.86426c0 -3.43424 -2.19206 -6.389 -6.57617 -8.86426v0.0322266z" />
-    <glyph glyph-name="uniF174" unicode="&#xf174;" 
-d="M410.624 170.496c49.6641 -27.6484 89.0879 -76.7998 98.8164 -134.656c0 -52.7363 -42.4961 -95.2314 -95.2324 -95.2314h-44.0322c18.9443 16.3838 32.7686 38.3994 39.4238 63.4873h4.6084c17.4082 0 31.7441 13.8242 31.7441 31.7441
-c-8.19238 31.7441 -29.6963 57.8564 -57.8564 75.2637c-14.8477 25.6006 -34.8154 48.6406 -58.8799 67.585c3.58398 6.14355 6.65625 12.7998 9.21582 19.4551c25.6006 8.19238 44.0322 31.7441 44.0322 59.9043v63.4883c0 28.1602 -18.4316 51.7119 -44.0322 59.9043
-c-10.2393 25.0879 -27.1357 47.1035 -48.1279 63.4873c9.21582 2.04785 18.9443 3.58398 28.6719 3.58398c70.1445 0 126.977 -56.832 126.977 -126.976v-63.4883c0 -34.3037 -13.8242 -65.0234 -35.3281 -87.5518zM287.232 -59.3916h-190.465
-c-52.7354 0 -95.2314 42.4951 -95.2314 95.2314v0c9.72754 58.3682 48.6396 107.008 98.8154 134.656c-22.0156 22.5283 -35.3271 53.248 -35.3271 87.5518v63.4883c0 70.1436 56.832 126.976 126.976 126.976s126.976 -56.832 126.976 -126.976v-63.4883
-c0 -33.792 -13.8232 -64.5117 -35.3271 -87.5518c49.6631 -27.6484 89.0879 -76.2881 98.8154 -134.656v0c0 -52.7363 -42.4961 -95.2314 -95.2314 -95.2314zM255.488 258.048v63.4883c0 34.8154 -28.6719 63.4883 -63.4883 63.4883
-c-35.3281 0 -63.4883 -28.6729 -63.4883 -63.4883v-63.4883c0 -35.3281 28.1602 -63.4883 63.4883 -63.4883c34.8164 0 63.4883 28.1602 63.4883 63.4883zM318.976 35.8398c-14.3359 54.7842 -68.0957 95.2324 -126.976 95.2324v0v0
-c-59.3916 0 -113.152 -40.4482 -126.976 -95.2324v0c0 -17.9199 13.8232 -31.7441 31.7432 -31.7441h190.465c17.4072 0 31.7432 13.8242 31.7432 31.7441v0z" />
-    <glyph glyph-name="uniF175" unicode="&#xf175;" 
-d="M109.714 91.4287v-54.8574c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8574c0 7.61914 2.66667 14.0954 8 19.4287
-c5.33333 5.33333 11.8096 8 19.4287 8h54.8574c7.61849 0 14.0944 -2.66667 19.4277 -8s8 -11.8096 8 -19.4287zM109.714 237.714v-54.8564c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8
-c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8564c0 7.61914 2.66667 14.0954 8 19.4287c5.33333 5.33333 11.8096 8 19.4287 8h54.8574c7.61849 0 14.0944 -2.66667 19.4277 -8c5.33333 -5.33333 8 -11.8096 8 -19.4287zM109.714 384v-54.8574
-c0 -7.61914 -2.66667 -14.0954 -8 -19.4287s-11.8092 -8 -19.4277 -8h-54.8574c-7.61914 0 -14.0954 2.66667 -19.4287 8c-5.33333 5.33333 -8 11.8096 -8 19.4287v54.8574c0 7.61914 2.66667 14.0954 8 19.4287c5.33333 5.33333 11.8096 8 19.4287 8h54.8574
-c7.61849 0 14.0944 -2.66667 19.4277 -8s8 -11.8096 8 -19.4287z" />
-    <glyph glyph-name="uniF132" unicode="&#xf132;" 
-d="M182.784 320.512v-256c0 -4.77865 -1.70671 -9.04525 -5.12012 -12.7998s-7.85091 -5.63184 -13.3125 -5.63184c-5.46094 0 -9.72754 1.87728 -12.7998 5.63184l-128 128c-3.41341 3.75456 -5.12012 8.02116 -5.12012 12.7998s1.70671 9.04525 5.12012 12.7998l128 128
-c3.75456 3.75521 8.02116 5.63281 12.7998 5.63281s9.21615 -1.8776 13.3125 -5.63281c4.0957 -3.75456 5.80241 -8.02116 5.12012 -12.7998z" />
-    <glyph glyph-name="uniF173" unicode="&#xf173;" 
-d="M331.776 -62.4639h-191.488c-52.7363 0 -95.2324 42.4961 -95.2324 95.7441v0c9.72852 58.3682 49.1523 107.52 98.8164 135.168c-21.5039 22.5273 -35.3281 53.7598 -35.3281 87.5518v64c0 70.1436 56.832 127.488 127.488 127.488s127.487 -57.3447 127.487 -127.488
-v-64c0 -33.792 -13.8232 -65.0244 -35.3271 -87.5518c49.6641 -27.6484 89.0879 -76.7998 98.8154 -135.168v0c0 -53.248 -42.4961 -95.7441 -95.2314 -95.7441zM299.52 256v64c0 34.8164 -28.1592 63.4883 -63.4873 63.4883s-63.4883 -28.6719 -63.4883 -63.4883v-64
-c0 -34.8164 28.1602 -63.4883 63.4883 -63.4883s63.4873 28.6719 63.4873 63.4883zM363.52 33.2803c-14.3359 54.7842 -68.0957 95.2314 -127.487 95.2314v0v0c-59.3926 0 -113.152 -40.4473 -127.488 -95.2314v0c0 -17.9199 14.3359 -32.2559 31.7441 -32.2559h190.976
-c17.9199 0 32.2559 14.3359 32.2559 32.2559v0z" />
-    <glyph glyph-name="uniF10C" unicode="&#xf10c;" 
-d="M399.872 448.512v-512l-143.872 131.072l-143.872 -131.072v512h287.744zM335.872 256.512v32.2559h-64v64h-31.7441v-64h-64v-32.2559h64v-64h31.7441v64h64z" />
-    <glyph glyph-name="uniF163" unicode="&#xf163;" 
-d="M211.248 171.44h48.7676v-24.3848h-97.5195v121.904h48.752v-97.5195zM406.304 244.576h-73.1357v-24.3838h48.7676v-24.3682h-48.7676v-48.7686h-48.7676v121.904h121.903v-24.3838zM398.464 16h-284.944c-62.5918 0 -113.52 50.9443 -113.52 113.536v140.944
-c0 62.5918 50.9277 113.52 113.52 113.52h284.944c62.5918 0 113.536 -50.9277 113.536 -113.52v-140.944c0 -62.5918 -50.9443 -113.536 -113.536 -113.536zM113.52 352c-44.9434 0 -81.5195 -36.5762 -81.5195 -81.5195v-140.944
-c0 -44.96 36.5762 -81.5361 81.5195 -81.5361h284.944c44.96 0 81.5361 36.5762 81.5361 81.5361v140.944c0 44.9434 -36.5762 81.5195 -81.5361 81.5195h-284.944z" />
-    <glyph glyph-name="uniF170" unicode="&#xf170;" 
-d="M319.488 198.144c-1.70703 -3.75456 -4.6084 -5.63184 -8.7041 -5.63184h-54.7842v-100.352c0 -2.73047 -0.85319 -4.94922 -2.55957 -6.65625c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-54.7842c-2.73047 0 -4.94922 0.85319 -6.65625 2.55957
-c-1.70638 1.70703 -2.55957 3.92578 -2.55957 6.65625v100.352h-54.7842c-2.73047 0 -4.94922 0.853516 -6.65625 2.56055c-1.70638 1.70638 -2.55957 3.9248 -2.55957 6.65527c0 2.38932 1.02409 4.60807 3.07227 6.65625l91.1357 91.1357
-c2.04818 1.70703 4.26693 2.56055 6.65625 2.56055s4.43717 -0.853516 6.14355 -2.56055l91.6484 -91.1357c2.73047 -3.07161 3.41309 -6.48503 2.04785 -10.2402zM219.648 348.16c-28.3307 0 -54.443 -6.9974 -78.3369 -20.9922
-c-23.8932 -13.9948 -42.6663 -32.9388 -56.3193 -56.832c-13.6536 -23.8932 -20.651 -49.8346 -20.9922 -77.8242c-0.341146 -27.9889 6.65625 -53.93 20.9922 -77.8232c14.3359 -23.8939 33.109 -42.8379 56.3193 -56.832
-c23.2109 -13.9948 49.3232 -20.9922 78.3369 -20.9922c29.013 0 54.9541 6.9974 77.8232 20.9922c22.8698 13.9941 41.6432 32.9382 56.3203 56.832c14.6771 23.8932 21.6745 49.8343 20.9922 77.8232c-0.682943 27.9896 -7.68034 53.931 -20.9922 77.8242
-c-13.3118 23.8932 -32.0853 42.8372 -56.3203 56.832c-24.2344 13.9948 -50.1755 20.9922 -77.8232 20.9922zM438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721
-c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08
-c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF124" unicode="&#xf124;" 
-d="M0 448.512h512v-512h-512v512zM448 0.511719v256h-384v-256h384zM448 320.512v64h-384v-64h384zM352.256 128.512l-96.2559 -95.7441l-95.7441 95.7441h64v96.2559h64v-96.2559h64z" />
-    <glyph glyph-name="uniF118" unicode="&#xf118;" 
-d="M250.368 -60.9277c-104.96 0 -190.464 42.4961 -190.464 95.2314v0v53.7607c0 -52.7363 85.5039 -85.5049 190.464 -85.5049c105.472 0 190.976 32.7686 190.976 85.5049v-53.7607c0 -52.7354 -85.5039 -95.2314 -190.976 -95.2314zM250.368 34.3037
-c-104.96 0 -190.464 42.4961 -190.464 95.2324v53.7598c0 -52.7363 85.5039 -85.5039 190.464 -85.5039c105.472 0 190.976 32.7676 190.976 85.5039v-53.7598c0 -52.7363 -85.5039 -95.2324 -190.976 -95.2324zM250.368 129.536
-c-104.96 0 -190.464 43.0078 -190.464 95.7441v53.248c0 -52.7363 85.5039 -85.5039 190.464 -85.5039c105.472 0 190.976 32.7676 190.976 85.5039v-53.248c0 -52.7363 -85.5039 -95.7441 -190.976 -95.7441zM250.368 225.28c-104.96 0 -190.464 42.4961 -190.464 95.2314
-v31.7441c0 52.7363 85.5039 95.2324 190.464 95.2324s190.976 -42.4961 190.976 -95.2324v-31.7441c0 -52.7354 -85.5039 -95.2314 -190.976 -95.2314z" />
-    <glyph glyph-name="uniF110" unicode="&#xf110;" 
-d="M0 192.512c0 70.6562 25.0879 131.072 75.2637 181.248c50.1764 50.1764 110.422 75.0938 180.736 74.752c70.3145 -0.341146 130.73 -25.2585 181.248 -74.752s75.4349 -109.91 74.752 -181.248c-0.682943 -71.3385 -25.6003 -131.755 -74.752 -181.248
-c-49.1523 -49.4928 -109.568 -74.4102 -181.248 -74.752c-71.6797 -0.341146 -131.925 24.5762 -180.736 74.752c-48.8105 50.1764 -73.8984 110.592 -75.2637 181.248zM55.8076 192.512c0 -55.2956 19.627 -102.399 58.8809 -141.312
-c39.2533 -38.9121 86.3571 -58.5387 141.312 -58.8799c54.9544 -0.341797 102.058 19.2848 141.312 58.8799c39.2539 39.5944 58.8809 86.6982 58.8809 141.312s-19.627 101.717 -58.8809 141.312c-39.2533 39.5944 -86.3571 59.221 -141.312 58.8799
-c-54.9544 -0.341146 -102.058 -19.9678 -141.312 -58.8799c-39.2539 -38.9121 -58.8809 -86.0163 -58.8809 -141.312zM130.048 122.368l70.1445 70.1436l-70.1445 70.1445l55.8086 55.8076l70.1436 -70.1436l70.1436 70.1436l55.8086 -55.8076l-70.1445 -70.1445
-l70.1445 -70.1436l-55.8086 -55.8086l-70.1436 70.1445l-70.1436 -70.1445z" />
-    <glyph glyph-name="uniF13A" unicode="&#xf13a;" 
-d="M577.143 444.857c5.33333 -3.8099 8 -8.85775 8 -15.1436v-402.285c0 -3.8099 -1.04753 -7.23861 -3.14258 -10.2861c-2.09505 -3.04753 -4.8571 -5.23796 -8.28613 -6.57129l-182.856 -73.1426c-4.57161 -2.09505 -9.14323 -2.09505 -13.7148 0l-176 70.2852
-l-176 -70.2852c-1.9043 -0.952474 -4.18978 -1.42871 -6.85645 -1.42871c-3.61914 0 -7.04785 1.04753 -10.2861 3.14258c-5.33333 3.8099 -8 8.85775 -8 15.1436v402.285c0 3.8099 1.04753 7.23861 3.14258 10.2861c2.0957 3.04753 4.85775 5.23796 8.28613 6.57129
-l182.857 73.1426c4.57096 2.09505 9.14225 2.09505 13.7139 0l176 -70.2852l176 70.2852c6.09505 2.47656 11.8092 1.90527 17.1426 -1.71387zM210.286 406.286v-362.857l164.571 -65.7148v362.857zM36.5713 344.286v-362.857l155.429 62v362.857zM548.571 39.7139v362.857
-l-155.429 -62v-362.857z" />
-    <glyph glyph-name="uniF176" unicode="&#xf176;" 
-d="M505.712 357.712c3.75977 -12 6.25586 -24.4961 6.25586 -37.7119c0 -70.6562 -57.248 -128 -128 -128c-19.6318 0 -38.1279 4.84766 -54.7842 12.7842l-256.367 -256.288c-7.63281 -7.74414 -18.3203 -12.4961 -30.1279 -12.4961
-c-23.6328 0 -42.6885 19.1201 -42.6885 42.624c0 11.8721 4.81641 22.4961 12.4961 30.2559l256.32 256.24c-8 16.7197 -12.8164 35.168 -12.8164 54.8799c0 70.6562 57.3115 128 127.968 128c12.8799 0 25.0078 -2.46387 36.752 -6l-79.376 -79.3438v-85.3125h84z" />
-    <glyph glyph-name="uniF12B" unicode="&#xf12b;" 
-d="M256 55.2959v54.7842c0 2.73047 -0.85319 4.94922 -2.55957 6.65625c-1.70703 1.70638 -3.92578 2.55957 -6.65625 2.55957h-54.7842c-2.73047 0 -4.94922 -0.85319 -6.65625 -2.55957c-1.70638 -1.70703 -2.55957 -3.92578 -2.55957 -6.65625v-54.7842
-c0 -2.73047 0.85319 -4.94922 2.55957 -6.65625c1.70703 -1.70638 3.92578 -2.55957 6.65625 -2.55957h54.7842c2.73047 0 4.94922 0.85319 6.65625 2.55957c1.70638 1.70703 2.55957 3.92578 2.55957 6.65625zM329.216 247.296
-c0 16.7253 -5.29069 32.2559 -15.8721 46.5918s-23.7227 25.4294 -39.4238 33.2803s-31.9144 11.7764 -48.6396 11.7764c-46.4212 0 -81.7493 -20.3096 -105.984 -60.9287c-3.07161 -4.77865 -2.389 -8.87467 2.04785 -12.2881l37.8887 -28.1592
-c1.36523 -1.36589 3.07161 -2.04883 5.11914 -2.04883c3.07227 0 5.46159 1.19466 7.16797 3.58398c10.2402 12.9707 18.4323 21.6748 24.5762 26.1123c6.48568 4.77865 14.6777 7.16797 24.5762 7.16797c9.21615 0 17.4082 -2.5599 24.5762 -7.67969
-s10.752 -10.752 10.752 -16.8965c0 -7.16797 -1.87728 -12.9704 -5.63184 -17.4072c-3.75456 -4.4375 -10.2399 -8.70443 -19.4561 -12.8008c-11.9466 -5.46094 -23.04 -13.6527 -33.2803 -24.5752c-10.2396 -10.9232 -15.1888 -22.8701 -14.8477 -35.8408v-10.2393
-c0 -2.73112 0.85319 -4.94987 2.55957 -6.65625c1.70703 -1.70703 3.92578 -2.56055 6.65625 -2.56055h54.7842c2.73047 0 4.94922 0.853516 6.65625 2.56055c1.70638 1.70638 2.55957 3.92513 2.55957 6.65625c0 3.41341 2.04785 8.02116 6.14355 13.8232
-c4.09635 5.80273 9.21647 10.5814 15.3604 14.3359c6.14388 3.41341 10.9225 6.14421 14.3359 8.19238s7.68001 5.29102 12.7998 9.72852c5.12044 4.43685 9.38737 9.0446 12.8008 13.8232c3.41276 4.77865 6.14323 10.5814 8.19141 17.4082s3.24284 14.5068 3.58398 23.04z
-M438.784 192.512c0 -39.9355 -9.72819 -76.6289 -29.1846 -110.08c-19.4557 -33.4505 -46.0798 -60.0745 -79.8721 -79.8721c-33.7917 -19.7969 -70.4847 -29.6953 -110.079 -29.6953c-39.5951 0 -76.4593 9.89844 -110.593 29.6953
-c-34.1328 19.7975 -60.5859 46.4215 -79.3594 79.8721c-18.7734 33.4512 -28.6722 70.1445 -29.6963 110.08c-1.02409 39.9362 8.87467 76.6296 29.6963 110.08c20.821 33.4505 47.2741 60.0745 79.3594 79.8721s68.9495 29.6963 110.593 29.6963
-c41.6426 0 78.3356 -9.89876 110.079 -29.6963c31.7441 -19.7975 58.3682 -46.4215 79.8721 -79.8721c21.5046 -33.4505 31.2327 -70.1439 29.1846 -110.08z" />
-    <glyph glyph-name="uniF12F" unicode="&#xf12f;" 
-d="M512 220.16v-55.2959c0 -2.38932 -0.85319 -4.4375 -2.55957 -6.14453c-1.70703 -1.70638 -3.92578 -2.55957 -6.65625 -2.55957h-356.353v-64c0 -4.09635 -1.87728 -6.99772 -5.63184 -8.7041s-6.99707 -1.19434 -9.72754 1.53613l-110.08 100.352
-c-1.70703 1.70703 -2.56055 3.75521 -2.56055 6.14453c0 2.73047 0.853516 5.11979 2.56055 7.16797l110.08 100.863c3.07161 2.73112 6.31413 3.41406 9.72754 2.04883c3.75456 -1.70703 5.63184 -4.6084 5.63184 -8.7041v-64h356.353
-c2.73047 0 4.94922 -0.853516 6.65625 -2.56055c1.70638 -1.70638 2.55957 -3.75423 2.55957 -6.14355z" />
-  </font>
-</defs></svg>
diff --git a/assets/fonts/fauxtonicon5.ttf b/assets/fonts/fauxtonicon5.ttf
deleted file mode 100644
index 9a382e9..0000000
--- a/assets/fonts/fauxtonicon5.ttf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fauxtonicon5.woff b/assets/fonts/fauxtonicon5.woff
deleted file mode 100644
index 104a3d7..0000000
--- a/assets/fonts/fauxtonicon5.woff
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.eot b/assets/fonts/fontawesome-webfont.eot
deleted file mode 100755
index 0662cb9..0000000
--- a/assets/fonts/fontawesome-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.svg b/assets/fonts/fontawesome-webfont.svg
deleted file mode 100755
index 2edb4ec..0000000
--- a/assets/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
-<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
-<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
-<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
-<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
-<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
-<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
-<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
-<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
-<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
-<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
-<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
-<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
-<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
-<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
-<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
-<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
-<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
-<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
-<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
-<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
-<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
-<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
-<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
-<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
-<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
-<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
-<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
-<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
-<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
-<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
-<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
-<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
-<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
-<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
-<glyph unicode="&#xf116;" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf117;" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
-<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
-<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
-<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
-<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
-<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
-<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
-<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
-<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
-<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
-<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
-<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
-<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
-<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
-<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
-<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
-<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
-<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
-<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
-<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
-<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
-<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
-<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
-<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
-<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
-<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
-<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
-<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
-<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
-<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
-<glyph unicode="&#xf158;" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
-<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
-<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
-<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
-<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
-<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
-<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
-<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
-<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
-<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
-<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
-<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
-<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
-<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
-<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
-<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
-<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
-<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
-<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
-<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
-<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
-<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
-<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
-<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
-<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
-<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
-<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
-<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
-<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
-<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
-<glyph unicode="&#xf18b;" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
-<glyph unicode="&#xf18c;" horiz-adv-x="1792" />
-<glyph unicode="&#xf18d;" horiz-adv-x="1792" />
-<glyph unicode="&#xf18e;" horiz-adv-x="1792" />
-<glyph unicode="&#xf500;" horiz-adv-x="1792" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/assets/fonts/fontawesome-webfont.ttf b/assets/fonts/fontawesome-webfont.ttf
deleted file mode 100755
index d365924..0000000
--- a/assets/fonts/fontawesome-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontawesome-webfont.woff b/assets/fonts/fontawesome-webfont.woff
deleted file mode 100755
index b9bd17e..0000000
--- a/assets/fonts/fontawesome-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/fontcustom.yml b/assets/fonts/fontcustom.yml
deleted file mode 100644
index 619adf8..0000000
--- a/assets/fonts/fontcustom.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-# --------------------------------------------------------------------------- #
-# Project Info
-#   Defaults shown. Learn more about these options by running
-#   `fontcustom help` or visiting <http://fontcustom.com>.
-# --------------------------------------------------------------------------- #
-
-font_name: fauxtonicon5
-css_selector: .fonticon-{{glyph}}
-preprocessor_path: "../fonts/"
-autowidth: false
-no_hash: true
-force: false
-debug: true
-quiet: false
-
-
-# --------------------------------------------------------------------------- #
-# Input Paths
-# --------------------------------------------------------------------------- #
-
-input:
-  vectors: /Applications/MAMP/htdocs/couchdb-fauxton/assets/icons         # required
-  templates: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts/templates
-
-
-# --------------------------------------------------------------------------- #
-# Output Paths
-# --------------------------------------------------------------------------- #
-
-output:
-  fonts: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts                              # required
-  # css: PUT_YOUR_PATH_HERE/couchdb-fauxton/assets/less
-  preview: /Applications/MAMP/htdocs/couchdb-fauxton/assets/fonts/styleguide
-  icons.less: /Applications/MAMP/htdocs/couchdb-fauxton/assets/less
-  #my-custom-template.yml: path/to/template/output
-
-
-# --------------------------------------------------------------------------- #
-# Templates
-#   Included in Font Custom: preview, css, scss, scss-rails
-#   Custom templates should be saved in the INPUT[:templates] directory and
-#   referenced by their baserame.
-# --------------------------------------------------------------------------- #
-
-templates:
- # - css
- - preview
- - icons.less
-
-# FYI... KNOWN ISSUE: https://github.com/FontCustom/fontcustom/issues/172.
-# TEMP SOLUTION W/ PATH FIX: https://github.com/skirchmeier/fontcustom/tree/master
diff --git a/assets/fonts/styleguide/fauxtonicon5-preview.html b/assets/fonts/styleguide/fauxtonicon5-preview.html
deleted file mode 100644
index 17a3d63..0000000
--- a/assets/fonts/styleguide/fauxtonicon5-preview.html
+++ /dev/null
@@ -1,2003 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>fauxtonicon5 glyphs preview</title>
-
-    <style>
-      /* Page Styles */
-
-      * {
-        -moz-box-sizing: border-box;
-        -webkit-box-sizing: border-box;
-        box-sizing: border-box;
-        margin: 0;
-        padding: 0;
-      }
-
-      body {
-        background: #fff;
-        color: #444;
-        font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
-      }
-
-      a,
-      a:visited {
-        color: #888;
-        text-decoration: underline;
-      }
-      a:hover,
-      a:focus { color: #000; }
-
-      header {
-        border-bottom: 2px solid #ddd;
-        margin-bottom: 20px;
-        overflow: hidden;
-        padding: 20px 0;
-      }
-
-      header h1 {
-        color: #888;
-        float: left;
-        font-size: 36px;
-        font-weight: 300;
-      }
-
-      header a {
-        float: right;
-        font-size: 14px;
-      }
-
-      .container {
-        margin: 0 auto;
-        max-width: 1200px;
-        min-width: 960px;
-        padding: 0 40px;
-        width: 90%;
-      }
-
-      .glyph {
-        border-bottom: 1px dotted #ccc;
-        padding: 10px 0 20px;
-        margin-bottom: 20px;
-      }
-
-      .preview-glyphs { vertical-align: bottom; }
-
-      .preview-scale {
-        color: #888;
-        font-size: 12px;
-        margin-top: 5px;
-      }
-
-      .step {
-        display: inline-block;
-        line-height: 1;
-        position: relative;
-        width: 10%;
-      }
-
-      .step .letters,
-      .step i {
-        -webkit-transition: opacity .3s;
-        -moz-transition: opacity .3s;
-        -ms-transition: opacity .3s;
-        -o-transition: opacity .3s;
-        transition: opacity .3s;
-      }
-
-      .step:hover .letters { opacity: 1; }
-      .step:hover i { opacity: .3; }
-
-      .letters {
-        opacity: .3;
-        position: absolute;
-      }
-
-      .characters-off .letters { display: none; }
-      .characters-off .step:hover i { opacity: 1; }
-
-      
-      .size-12 { font-size: 12px; }
-      
-      .size-14 { font-size: 14px; }
-      
-      .size-16 { font-size: 16px; }
-      
-      .size-18 { font-size: 18px; }
-      
-      .size-21 { font-size: 21px; }
-      
-      .size-24 { font-size: 24px; }
-      
-      .size-36 { font-size: 36px; }
-      
-      .size-48 { font-size: 48px; }
-      
-      .size-60 { font-size: 60px; }
-      
-      .size-72 { font-size: 72px; }
-      
-
-      .usage { margin-top: 10px; }
-
-      .usage input {
-        font-family: monospace;
-        margin-right: 3px;
-        padding: 2px 5px;
-        text-align: center;
-      }
-
-      .usage .point { width: 150px; }
-
-      .usage .class { width: 250px; }
-
-      footer {
-        color: #888;
-        font-size: 12px;
-        padding: 20px 0;
-      }
-
-      /* Icon Font: fauxtonicon5 */
-
-      @font-face {
-  font-family: "fauxtonicon5";
-  src: url("../fauxtonicon5.eot");
-  src: url("../fauxtonicon5.eot?#iefix") format("embedded-opentype"),
-       url("../fauxtonicon5.woff") format("woff"),
-       url("../fauxtonicon5.ttf") format("truetype"),
-       url("../fauxtonicon5.svg#fauxtonicon5") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "fauxtonicon5";
-    src: url("../fauxtonicon5.svg#fauxtonicon5") format("svg");
-  }
-}
-
-      [data-icon]:before { content: attr(data-icon); }
-
-      [data-icon]:before,
-      .fonticon-activetasks:before,
-.fonticon-arrow-box-down:before,
-.fonticon-arrow-box-up:before,
-.fonticon-arrow_left:before,
-.fonticon-arrow_right:before,
-.fonticon-arrows-cw:before,
-.fonticon-article:before,
-.fonticon-attention-alt:before,
-.fonticon-attention-circled:before,
-.fonticon-bell:before,
-.fonticon-block:before,
-.fonticon-bookmark:before,
-.fonticon-bookmark-ribbon-wplus:before,
-.fonticon-burger:before,
-.fonticon-cancel:before,
-.fonticon-cancel-circled:before,
-.fonticon-cancel-circled2:before,
-.fonticon-circle-empty:before,
-.fonticon-clipboard:before,
-.fonticon-clock:before,
-.fonticon-cog:before,
-.fonticon-collapse:before,
-.fonticon-cw:before,
-.fonticon-dashboard:before,
-.fonticon-database:before,
-.fonticon-deselect-all:before,
-.fonticon-document:before,
-.fonticon-documents:before,
-.fonticon-dot-circled:before,
-.fonticon-down:before,
-.fonticon-down-1:before,
-.fonticon-down-circled:before,
-.fonticon-down-dir:before,
-.fonticon-down-open:before,
-.fonticon-drop-down-dots:before,
-.fonticon-exchange:before,
-.fonticon-expand:before,
-.fonticon-eye:before,
-.fonticon-file-code-o:before,
-.fonticon-files-o:before,
-.fonticon-filter:before,
-.fonticon-gears:before,
-.fonticon-help:before,
-.fonticon-help-circled:before,
-.fonticon-info-circled:before,
-.fonticon-json:before,
-.fonticon-key:before,
-.fonticon-left:before,
-.fonticon-left-1:before,
-.fonticon-left-circled:before,
-.fonticon-left-dir:before,
-.fonticon-left-open:before,
-.fonticon-link:before,
-.fonticon-list-alt:before,
-.fonticon-lock:before,
-.fonticon-mail:before,
-.fonticon-mail-alt:before,
-.fonticon-map:before,
-.fonticon-map2:before,
-.fonticon-megaphone:before,
-.fonticon-minus:before,
-.fonticon-minus-circled:before,
-.fonticon-minus-circled2:before,
-.fonticon-minus-squared:before,
-.fonticon-minus-squared-alt:before,
-.fonticon-mixer:before,
-.fonticon-new-database:before,
-.fonticon-ok:before,
-.fonticon-ok-circled:before,
-.fonticon-ok-circled-2:before,
-.fonticon-paperclip:before,
-.fonticon-pencil:before,
-.fonticon-picture:before,
-.fonticon-play:before,
-.fonticon-plus:before,
-.fonticon-plus-circled:before,
-.fonticon-plus-circled2:before,
-.fonticon-plus-squared:before,
-.fonticon-plus-squared-alt:before,
-.fonticon-popin:before,
-.fonticon-popout:before,
-.fonticon-profile:before,
-.fonticon-replicate:before,
-.fonticon-reply:before,
-.fonticon-reply-all:before,
-.fonticon-resize-full:before,
-.fonticon-resize-full-reverse:before,
-.fonticon-resize-small:before,
-.fonticon-resize-small-reverse:before,
-.fonticon-right:before,
-.fonticon-right-1:before,
-.fonticon-right-circled:before,
-.fonticon-right-dir:before,
-.fonticon-right-open:before,
-.fonticon-save:before,
-.fonticon-search:before,
-.fonticon-select-all:before,
-.fonticon-sidenav-filter-function:before,
-.fonticon-sidenav-info:before,
-.fonticon-sidenav-list-function:before,
-.fonticon-sidenav-map-reduce:before,
-.fonticon-sidenav-search:before,
-.fonticon-sidenav-show-function:before,
-.fonticon-sidenav-update-function:before,
-.fonticon-sitemap:before,
-.fonticon-stats:before,
-.fonticon-support:before,
-.fonticon-swap-arrows:before,
-.fonticon-table:before,
-.fonticon-trash:before,
-.fonticon-up:before,
-.fonticon-up-1:before,
-.fonticon-up-circled:before,
-.fonticon-up-dir:before,
-.fonticon-up-open:before,
-.fonticon-user:before,
-.fonticon-users:before,
-.fonticon-vertical-ellipsis:before,
-.fonticon-wrench:before,
-.fonticon-wrench2:before {
-        display: inline-block;
-  font-family: "fauxtonicon5";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-      }
-
-      .fonticon-activetasks:before { content: "\f100"; }
-.fonticon-arrow-box-down:before { content: "\f101"; }
-.fonticon-arrow-box-up:before { content: "\f102"; }
-.fonticon-arrow_left:before { content: "\f103"; }
-.fonticon-arrow_right:before { content: "\f104"; }
-.fonticon-arrows-cw:before { content: "\f105"; }
-.fonticon-article:before { content: "\f106"; }
-.fonticon-attention-alt:before { content: "\f107"; }
-.fonticon-attention-circled:before { content: "\f108"; }
-.fonticon-bell:before { content: "\f109"; }
-.fonticon-block:before { content: "\f10a"; }
-.fonticon-bookmark:before { content: "\f10b"; }
-.fonticon-bookmark-ribbon-wplus:before { content: "\f10c"; }
-.fonticon-burger:before { content: "\f10d"; }
-.fonticon-cancel:before { content: "\f10e"; }
-.fonticon-cancel-circled:before { content: "\f10f"; }
-.fonticon-cancel-circled2:before { content: "\f110"; }
-.fonticon-circle-empty:before { content: "\f111"; }
-.fonticon-clipboard:before { content: "\f112"; }
-.fonticon-clock:before { content: "\f113"; }
-.fonticon-cog:before { content: "\f114"; }
-.fonticon-collapse:before { content: "\f115"; }
-.fonticon-cw:before { content: "\f116"; }
-.fonticon-dashboard:before { content: "\f117"; }
-.fonticon-database:before { content: "\f118"; }
-.fonticon-deselect-all:before { content: "\f119"; }
-.fonticon-document:before { content: "\f11a"; }
-.fonticon-documents:before { content: "\f11b"; }
-.fonticon-dot-circled:before { content: "\f11c"; }
-.fonticon-down:before { content: "\f11d"; }
-.fonticon-down-1:before { content: "\f11e"; }
-.fonticon-down-circled:before { content: "\f11f"; }
-.fonticon-down-dir:before { content: "\f120"; }
-.fonticon-down-open:before { content: "\f121"; }
-.fonticon-drop-down-dots:before { content: "\f122"; }
-.fonticon-exchange:before { content: "\f123"; }
-.fonticon-expand:before { content: "\f124"; }
-.fonticon-eye:before { content: "\f125"; }
-.fonticon-file-code-o:before { content: "\f126"; }
-.fonticon-files-o:before { content: "\f127"; }
-.fonticon-filter:before { content: "\f128"; }
-.fonticon-gears:before { content: "\f129"; }
-.fonticon-help:before { content: "\f12a"; }
-.fonticon-help-circled:before { content: "\f12b"; }
-.fonticon-info-circled:before { content: "\f12c"; }
-.fonticon-json:before { content: "\f12d"; }
-.fonticon-key:before { content: "\f12e"; }
-.fonticon-left:before { content: "\f12f"; }
-.fonticon-left-1:before { content: "\f130"; }
-.fonticon-left-circled:before { content: "\f131"; }
-.fonticon-left-dir:before { content: "\f132"; }
-.fonticon-left-open:before { content: "\f133"; }
-.fonticon-link:before { content: "\f134"; }
-.fonticon-list-alt:before { content: "\f135"; }
-.fonticon-lock:before { content: "\f136"; }
-.fonticon-mail:before { content: "\f137"; }
-.fonticon-mail-alt:before { content: "\f138"; }
-.fonticon-map:before { content: "\f139"; }
-.fonticon-map2:before { content: "\f13a"; }
-.fonticon-megaphone:before { content: "\f13b"; }
-.fonticon-minus:before { content: "\f13c"; }
-.fonticon-minus-circled:before { content: "\f13d"; }
-.fonticon-minus-circled2:before { content: "\f13e"; }
-.fonticon-minus-squared:before { content: "\f13f"; }
-.fonticon-minus-squared-alt:before { content: "\f140"; }
-.fonticon-mixer:before { content: "\f141"; }
-.fonticon-new-database:before { content: "\f142"; }
-.fonticon-ok:before { content: "\f143"; }
-.fonticon-ok-circled:before { content: "\f144"; }
-.fonticon-ok-circled-2:before { content: "\f145"; }
-.fonticon-paperclip:before { content: "\f146"; }
-.fonticon-pencil:before { content: "\f147"; }
-.fonticon-picture:before { content: "\f148"; }
-.fonticon-play:before { content: "\f149"; }
-.fonticon-plus:before { content: "\f14a"; }
-.fonticon-plus-circled:before { content: "\f14b"; }
-.fonticon-plus-circled2:before { content: "\f14c"; }
-.fonticon-plus-squared:before { content: "\f14d"; }
-.fonticon-plus-squared-alt:before { content: "\f14e"; }
-.fonticon-popin:before { content: "\f14f"; }
-.fonticon-popout:before { content: "\f150"; }
-.fonticon-profile:before { content: "\f151"; }
-.fonticon-replicate:before { content: "\f152"; }
-.fonticon-reply:before { content: "\f153"; }
-.fonticon-reply-all:before { content: "\f154"; }
-.fonticon-resize-full:before { content: "\f155"; }
-.fonticon-resize-full-reverse:before { content: "\f156"; }
-.fonticon-resize-small:before { content: "\f157"; }
-.fonticon-resize-small-reverse:before { content: "\f158"; }
-.fonticon-right:before { content: "\f159"; }
-.fonticon-right-1:before { content: "\f15a"; }
-.fonticon-right-circled:before { content: "\f15b"; }
-.fonticon-right-dir:before { content: "\f15c"; }
-.fonticon-right-open:before { content: "\f15d"; }
-.fonticon-save:before { content: "\f15e"; }
-.fonticon-search:before { content: "\f15f"; }
-.fonticon-select-all:before { content: "\f160"; }
-.fonticon-sidenav-filter-function:before { content: "\f161"; }
-.fonticon-sidenav-info:before { content: "\f162"; }
-.fonticon-sidenav-list-function:before { content: "\f163"; }
-.fonticon-sidenav-map-reduce:before { content: "\f164"; }
-.fonticon-sidenav-search:before { content: "\f165"; }
-.fonticon-sidenav-show-function:before { content: "\f166"; }
-.fonticon-sidenav-update-function:before { content: "\f167"; }
-.fonticon-sitemap:before { content: "\f168"; }
-.fonticon-stats:before { content: "\f169"; }
-.fonticon-support:before { content: "\f16a"; }
-.fonticon-swap-arrows:before { content: "\f16b"; }
-.fonticon-table:before { content: "\f16c"; }
-.fonticon-trash:before { content: "\f16d"; }
-.fonticon-up:before { content: "\f16e"; }
-.fonticon-up-1:before { content: "\f16f"; }
-.fonticon-up-circled:before { content: "\f170"; }
-.fonticon-up-dir:before { content: "\f171"; }
-.fonticon-up-open:before { content: "\f172"; }
-.fonticon-user:before { content: "\f173"; }
-.fonticon-users:before { content: "\f174"; }
-.fonticon-vertical-ellipsis:before { content: "\f175"; }
-.fonticon-wrench:before { content: "\f176"; }
-.fonticon-wrench2:before { content: "\f177"; }
-    </style>
-
-    <!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
-
-    <script>
-      function toggleCharacters() {
-        var body = document.getElementsByTagName('body')[0];
-        body.className = body.className === 'characters-off' ? '' : 'characters-off';
-      }
-    </script>
-  </head>
-
-  <body class="characters-off">
-    <div id="page" class="container">
-      <header>
-        <h1>fauxtonicon5 contains 120 glyphs:</h1>
-        <a onclick="toggleCharacters(); return false;" href="#">Toggle Preview Characters</a>
-      </header>
-
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-activetasks" class="fonticon-activetasks"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-activetasks" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf100;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow-box-down" class="fonticon-arrow-box-down"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow-box-down" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf101;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow-box-up" class="fonticon-arrow-box-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow-box-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf102;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow_left" class="fonticon-arrow_left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow_left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf103;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrow_right" class="fonticon-arrow_right"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrow_right" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf104;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-arrows-cw" class="fonticon-arrows-cw"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-arrows-cw" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf105;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-article" class="fonticon-article"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-article" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf106;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-attention-alt" class="fonticon-attention-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-attention-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf107;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-attention-circled" class="fonticon-attention-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-attention-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf108;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bell" class="fonticon-bell"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bell" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf109;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-block" class="fonticon-block"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-block" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bookmark" class="fonticon-bookmark"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bookmark" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-bookmark-ribbon-wplus" class="fonticon-bookmark-ribbon-wplus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-bookmark-ribbon-wplus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-burger" class="fonticon-burger"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-burger" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel" class="fonticon-cancel"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel-circled" class="fonticon-cancel-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cancel-circled2" class="fonticon-cancel-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cancel-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf110;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-circle-empty" class="fonticon-circle-empty"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-circle-empty" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf111;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-clipboard" class="fonticon-clipboard"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-clipboard" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf112;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-clock" class="fonticon-clock"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-clock" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf113;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cog" class="fonticon-cog"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cog" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf114;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-collapse" class="fonticon-collapse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-collapse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf115;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-cw" class="fonticon-cw"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-cw" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf116;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-dashboard" class="fonticon-dashboard"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-dashboard" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf117;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-database" class="fonticon-database"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-database" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf118;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-deselect-all" class="fonticon-deselect-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-deselect-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf119;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-document" class="fonticon-document"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-document" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-documents" class="fonticon-documents"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-documents" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-dot-circled" class="fonticon-dot-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-dot-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down" class="fonticon-down"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-1" class="fonticon-down-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-circled" class="fonticon-down-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-dir" class="fonticon-down-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf120;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-down-open" class="fonticon-down-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-down-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf121;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-drop-down-dots" class="fonticon-drop-down-dots"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-drop-down-dots" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf122;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-exchange" class="fonticon-exchange"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-exchange" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf123;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-expand" class="fonticon-expand"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-expand" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf124;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-eye" class="fonticon-eye"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-eye" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf125;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-file-code-o" class="fonticon-file-code-o"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-file-code-o" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf126;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-files-o" class="fonticon-files-o"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-files-o" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf127;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-filter" class="fonticon-filter"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-filter" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf128;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-gears" class="fonticon-gears"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-gears" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf129;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-help" class="fonticon-help"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-help" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-help-circled" class="fonticon-help-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-help-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-info-circled" class="fonticon-info-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-info-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-json" class="fonticon-json"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-json" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-key" class="fonticon-key"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-key" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left" class="fonticon-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-1" class="fonticon-left-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf130;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-circled" class="fonticon-left-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf131;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-dir" class="fonticon-left-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf132;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-left-open" class="fonticon-left-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-left-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf133;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-link" class="fonticon-link"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-link" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf134;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-list-alt" class="fonticon-list-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-list-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf135;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-lock" class="fonticon-lock"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-lock" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf136;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mail" class="fonticon-mail"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mail" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf137;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mail-alt" class="fonticon-mail-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mail-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf138;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-map" class="fonticon-map"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-map" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf139;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-map2" class="fonticon-map2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-map2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-megaphone" class="fonticon-megaphone"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-megaphone" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus" class="fonticon-minus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-circled" class="fonticon-minus-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-circled2" class="fonticon-minus-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-squared" class="fonticon-minus-squared"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-squared" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-minus-squared-alt" class="fonticon-minus-squared-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-minus-squared-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf140;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-mixer" class="fonticon-mixer"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-mixer" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf141;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-new-database" class="fonticon-new-database"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-new-database" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf142;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok" class="fonticon-ok"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf143;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok-circled" class="fonticon-ok-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf144;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-ok-circled-2" class="fonticon-ok-circled-2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-ok-circled-2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf145;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-paperclip" class="fonticon-paperclip"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-paperclip" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf146;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-pencil" class="fonticon-pencil"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-pencil" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf147;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-picture" class="fonticon-picture"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-picture" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf148;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-play" class="fonticon-play"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-play" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf149;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus" class="fonticon-plus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-circled" class="fonticon-plus-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-circled2" class="fonticon-plus-circled2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-circled2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-squared" class="fonticon-plus-squared"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-squared" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-plus-squared-alt" class="fonticon-plus-squared-alt"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-plus-squared-alt" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-popin" class="fonticon-popin"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-popin" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-popout" class="fonticon-popout"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-popout" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf150;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-profile" class="fonticon-profile"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-profile" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf151;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-replicate" class="fonticon-replicate"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-replicate" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf152;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-reply" class="fonticon-reply"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-reply" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf153;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-reply-all" class="fonticon-reply-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-reply-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf154;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-full" class="fonticon-resize-full"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-full" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf155;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-full-reverse" class="fonticon-resize-full-reverse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-full-reverse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf156;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-small" class="fonticon-resize-small"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-small" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf157;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-resize-small-reverse" class="fonticon-resize-small-reverse"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-resize-small-reverse" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf158;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right" class="fonticon-right"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf159;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-1" class="fonticon-right-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-circled" class="fonticon-right-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-dir" class="fonticon-right-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-right-open" class="fonticon-right-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-right-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-save" class="fonticon-save"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-save" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-search" class="fonticon-search"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-search" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-select-all" class="fonticon-select-all"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-select-all" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf160;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-filter-function" class="fonticon-sidenav-filter-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-filter-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf161;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-info" class="fonticon-sidenav-info"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-info" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf162;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-list-function" class="fonticon-sidenav-list-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-list-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf163;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-map-reduce" class="fonticon-sidenav-map-reduce"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-map-reduce" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf164;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-search" class="fonticon-sidenav-search"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-search" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf165;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-show-function" class="fonticon-sidenav-show-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-show-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf166;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sidenav-update-function" class="fonticon-sidenav-update-function"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sidenav-update-function" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf167;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-sitemap" class="fonticon-sitemap"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-sitemap" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf168;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-stats" class="fonticon-stats"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-stats" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf169;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-support" class="fonticon-support"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-support" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-swap-arrows" class="fonticon-swap-arrows"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-swap-arrows" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-table" class="fonticon-table"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-table" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-trash" class="fonticon-trash"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-trash" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up" class="fonticon-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-1" class="fonticon-up-1"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-1" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-circled" class="fonticon-up-circled"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-circled" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf170;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-dir" class="fonticon-up-dir"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-dir" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf171;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-up-open" class="fonticon-up-open"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-up-open" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf172;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-user" class="fonticon-user"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-user" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf173;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-users" class="fonticon-users"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-users" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf174;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-vertical-ellipsis" class="fonticon-vertical-ellipsis"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-vertical-ellipsis" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf175;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-wrench" class="fonticon-wrench"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-wrench" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf176;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="fonticon-wrench2" class="fonticon-wrench2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".fonticon-wrench2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf177;" />
-        </div>
-      </div>
-      
-
-      <footer>
-        Made with love using <a href="http://fontcustom.com">Font Custom</a>.
-      </footer>
-    </div>
-  </body>
-</html>
diff --git a/assets/fonts/templates/icons.less b/assets/fonts/templates/icons.less
deleted file mode 100644
index 95aa953..0000000
--- a/assets/fonts/templates/icons.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-*	Icon Font: <%= font_name %>
-*/
-
-/*  Licensed 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.
- */
-
-/* had to add a custom template to the generator to get this to compile to append the proper path and specify  "url" instead of "font-url":
-https://github.com/seanbarclay/fontcustom/blob/1c3ad3d2633d3a8add39e8827115394e9ec02d88/lib/fontcustom/generator/template.rb
-*/
-@fauxtonFont: "<%=font_name%>";
-<%= glyph_vars %>
-
-<%= font_face(:LESS) %>
-
-[data-icon]:before { content: attr(data-icon); }
-
-[data-icon]:before,
-<%= glyph_selectors %> {
-<%= glyph_properties %>
-}
-
-<%= glyphs_less %>
diff --git a/assets/icons/activetasks.svg b/assets/icons/activetasks.svg
deleted file mode 100755
index 5683da6..0000000
--- a/assets/icons/activetasks.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M18.272 25.12h11.456v-2.304h-11.456v2.304zM11.424 15.968h18.304v-2.272h-18.304v2.272zM22.848 6.816h6.88v-2.272h-6.88v2.272zM32 21.696v4.544q0 0.48-0.352 0.8t-0.8 0.352h-29.696q-0.48 0-0.8-0.352t-0.352-0.8v-4.544q0-0.48 0.352-0.832t0.8-0.32h29.696q0.48 0 0.8 0.32t0.352 0.832zM32 12.544v4.576q0 0.448-0.352 0.8t-0.8 0.32h-29.696q-0.48 0-0.8-0.32t-0.352-0.8v-4.576q0-0.48 0.352-0.8t0.8-0.352h29.696q0.48 0 0.8 0.352t0.352 0.8zM32 3.392v4.576q0 0.48-0.352 0.8t-0.8 0.352h-29.696q-0.48 0-0.8-0.352t-0.352-0.8v-4.576q0-0.448 0.352-0.8t0.8-0.352h29.696q0.48 0 0.8 0.352t0.352 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow-box-down.svg b/assets/icons/arrow-box-down.svg
deleted file mode 100755
index 8da5fc3..0000000
--- a/assets/icons/arrow-box-down.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 31.968v-32h-32v32h32zM28 27.968h-24v-24h24v24zM16 21.952l-8-12h16l-8 12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow-box-up.svg b/assets/icons/arrow-box-up.svg
deleted file mode 100755
index 7995927..0000000
--- a/assets/icons/arrow-box-up.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-24h24v24zM24 21.952h-16l8-12 8 12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/arrow_left.svg b/assets/icons/arrow_left.svg
deleted file mode 100644
index 08c48f4..0000000
--- a/assets/icons/arrow_left.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<polygon points="6.412,9 8.057,9 8.057,14 32.057,14 32.057,17 8.057,17 8.057,22 6.412,22 0,15.5 "/>
-</svg>
diff --git a/assets/icons/arrow_right.svg b/assets/icons/arrow_right.svg
deleted file mode 100644
index c0c6198..0000000
--- a/assets/icons/arrow_right.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<polygon points="32.057,15.5 25.645,22 24,22 24,17 0,17 0,14 24,14 24,9 25.645,9 "/>
-</svg>
diff --git a/assets/icons/arrows-cw.svg b/assets/icons/arrows-cw.svg
deleted file mode 100755
index e3f190b..0000000
--- a/assets/icons/arrows-cw.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 31.968v-12.864h12.864l-5.12 5.12q3.456 3.424 8.256 3.424 4 0 7.104-2.4t4.16-6.144h4.416q-1.12 5.536-5.536 9.216t-10.144 3.648q-6.624 0-11.296-4.672zM0.32 12.832q1.12-5.568 5.536-9.216t10.144-3.648q6.624 0 11.328 4.672l4.672-4.672v12.864h-12.864l5.12-5.12q-3.456-3.424-8.256-3.424-4 0-7.104 2.4t-4.16 6.144h-4.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/article.svg b/assets/icons/article.svg
deleted file mode 100755
index 9ab58a1..0000000
--- a/assets/icons/article.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M29.152 5.248h-28.576v-3.584h28.576v3.584zM18.432 12.384h-17.856v-3.584h17.856v3.584zM29.152 23.104h-28.576v-3.584h28.576v3.584zM22.016 30.272h-21.44v-3.616h21.44v3.616zM29.152 28.448q0 0.768-0.512 1.28t-1.248 0.544-1.28-0.544-0.544-1.28 0.544-1.248 1.28-0.544q0.704 0 1.248 0.544t0.512 1.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/attention-alt.svg b/assets/icons/attention-alt.svg
deleted file mode 100755
index 0675391..0000000
--- a/assets/icons/attention-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M9.152 22.24v4q0 0.48-0.352 0.8t-0.8 0.352h-4.576q-0.448 0-0.8-0.352t-0.352-0.8v-4q0-0.448 0.352-0.8t0.8-0.32h4.576q0.48 0 0.8 0.32t0.352 0.8zM9.664 3.392l-0.48 13.728q-0.032 0.448-0.384 0.8t-0.8 0.32h-4.576q-0.448 0-0.8-0.32t-0.384-0.8l-0.48-13.728q-0.032-0.448 0.288-0.8t0.8-0.352h5.728q0.448 0 0.8 0.352t0.288 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/attention-circled.svg b/assets/icons/attention-circled.svg
deleted file mode 100755
index ea0567d..0000000
--- a/assets/icons/attention-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M13.728 2.24q3.712 0 6.88 1.856t4.992 4.992 1.824 6.88-1.824 6.88-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856zM16 24.512v-3.392q0-0.256-0.16-0.416t-0.384-0.16h-3.424q-0.256 0-0.416 0.16t-0.192 0.416v3.392q0 0.256 0.192 0.416t0.416 0.192h3.424q0.224 0 0.384-0.192t0.16-0.416zM15.968 18.368l0.32-11.072q0-0.224-0.192-0.32-0.16-0.16-0.416-0.16h-3.936q-0.256 0-0.416 0.16-0.192 0.096-0.192 0.32l0.32 11.072q0 0.192 0.16 0.32t0.448 0.128h3.296q0.256 0 0.416-0.128t0.192-0.32z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bell.svg b/assets/icons/bell.svg
deleted file mode 100644
index 86353e1..0000000
--- a/assets/icons/bell.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="18px" height="20px" viewBox="0 0 18 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
-    <!-- Generator: Sketch 3.3.3 (12081) - http://www.bohemiancoding.com/sketch -->
-    <title>Fill 180 Copy</title>
-    <desc>Created with Sketch.</desc>
-    <defs></defs>
-    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
-        <g id="Notifications-(Cloudant)-V2" sketch:type="MSArtboardGroup" transform="translate(-1304.000000, -65.000000)" fill="#C0C0C0">
-            <g id="Group" sketch:type="MSLayerGroup" transform="translate(1278.000000, 42.000000)">
-                <path d="M27.0872514,38.9987862 C27.3474103,39.2589451 27.6639095,39.3890246 28.016864,39.3890246 L32.6665839,39.3890246 C32.6665839,40.1330461 32.9267429,40.7469881 33.4478893,41.267306 C33.9682073,41.7876239 34.600377,42.0486114 35.3261707,42.0486114 C36.0693637,42.0486114 36.6833057,41.7876239 37.2044521,41.267306 C37.7247701,40.7469881 37.984929,40.1330461 37.984929,39.3890246 L42.634649,39.3890246 C42.9876035,39.3890246 43.3041026,39.2589451 43.5642616,38.9987862 C43.8244205,38.7377987 43.9545,38.4221281 43.9545,38.0683451 C42.634649,36.9531414 41.6486962,35.5769502 40.9792426,33.9397715 C40.309789,32.3034214 39.9750622,30.5742757 39.9750622,28.7697337 C39.9750622,27.617246 39.6403354,26.7240889 38.9891094,26.0546352 C38.3196558,25.3669539 37.4082709,24.9767155 36.2557833,24.8275798 C36.3112949,24.715728 36.3303512,24.5856485 36.3303512,24.455569 C36.3303512,24.1763538 36.2367271,23.9352511 36.0329083,23.7488315 C35.8464887,23.5441841 35.6045574,23.4513886 35.3261707,23.4513886 C35.0469556,23.4513886 34.8240805,23.5441841 34.6376609,23.7488315 C34.4330136,23.9352511 34.340218,24.1763538 34.340218,24.455569 C34.340218,24.5856485 34.3584457,24.715728 34.4147859,24.8275798 C33.2614697,24.9767155 32.3500848,25.3669539 31.6806312,26.0546352 C31.0111776,26.7240889 30.6764508,27.617246 30.6764508,28.7697337 C30.6764508,30.5742757 30.341724,32.3034214 29.6722703,33.9397715 C29.0028167,35.5769502 28.016864,36.9531414 26.697013,38.0683451 C26.697013,38.4221281 26.8270924,38.7377987 27.0872514,38.9987862 L27.0872514,38.9987862 Z M33.6707644,39.2216612 C33.7826162,39.2216612 33.8381278,39.2771728 33.8381278,39.3890246 C33.8381278,39.7983193 33.986435,40.1512738 34.2847064,40.430489 C34.563093,40.7279319 34.9168761,40.8770676 35.3261707,40.8770676 C35.437194,40.8770676 35.4935341,40.9325792 35.4935341,41.044431 C35.4935341,41.1554542 35.437194,41.2117944 35.3261707,41.2117944 C34.8240805,41.2117944 34.3957296,41.0253747 34.0427751,40.6724202 C33.6889921,40.3186372 33.503401,39.8911148 33.503401,39.3890246 C33.503401,39.2771728 33.5589126,39.2216612 33.6707644,39.2216612 L33.6707644,39.2216612 Z" id="Fill-180-Copy" sketch:type="MSShapeGroup"></path>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/assets/icons/block.svg b/assets/icons/block.svg
deleted file mode 100755
index ae3d84f..0000000
--- a/assets/icons/block.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M23.424 15.904q0-2.88-1.536-5.248l-13.472 13.44q2.432 1.6 5.312 1.6 1.984 0 3.776-0.8t3.072-2.080 2.080-3.104 0.768-3.808zM5.6 21.248l13.472-13.472q-2.4-1.6-5.344-1.6-2.656 0-4.896 1.28t-3.52 3.584-1.312 4.864q0 2.912 1.6 5.344zM27.424 15.904q0 2.816-1.088 5.376t-2.912 4.384-4.384 2.944-5.312 1.088-5.344-1.088-4.384-2.944-2.912-4.384-1.088-5.376 1.088-5.344 2.912-4.384 4.384-2.912 5.344-1.088 5.312 1.088 4.384 2.912 2.912 4.384 1.088 5.344z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bookmark-ribbon-wplus.svg b/assets/icons/bookmark-ribbon-wplus.svg
deleted file mode 100755
index c4f6b31..0000000
--- a/assets/icons/bookmark-ribbon-wplus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M24.992-0.032h-17.984v32l8.992-8.192 8.992 8.192v-32zM20.992 11.968h-4v4h-1.984v-4h-4v-2.016h4v-4h1.984v4h4v2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/bookmark.svg b/assets/icons/bookmark.svg
deleted file mode 100755
index d27d25b..0000000
--- a/assets/icons/bookmark.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.952 27.808c-3.072 0.16-8.864 0.672-12 2.304-0.16 0.96-0.96 1.696-1.952 1.696-0.992 0-1.76-0.736-1.92-1.696-3.136-1.632-8.96-2.176-12-2.304-1.088 0-1.984-0.896-1.984-1.984v-23.872c0-1.088 0.896-1.984 1.984-1.984 0.064 0 0.128 0.032 0.192 0.032 13.696 0.352 13.728 3.936 13.728 3.936s0.064-3.584 13.728-3.936c0.096 0 0.128-0.032 0.224-0.032 1.088 0 1.984 0.896 1.984 1.984v23.872c0 1.088-0.896 1.984-1.984 1.984zM14.016 6.208c-2.56-1.312-6.816-1.856-9.952-2.080v19.808c5.344 0.288 8.352 1.088 9.952 1.888v-19.616zM27.936 4.128c-3.136 0.224-7.36 0.768-9.92 2.080v19.616c1.6-0.8 4.608-1.6 9.92-1.888v-19.808zM25.952 7.936v3.968c0 0-5.952 0-5.952 1.984v-3.968c0 0 0-1.984 5.952-1.984zM25.952 15.872v4c0 0-5.952 0-5.952 1.984v-4c0 0 0-1.984 5.952-1.984zM12.032 9.92v3.968c0-1.984-5.952-1.984-5.952-1.984v-3.968c5.952 0 5.952 1.984 5.952 1.984zM12.032 17.856v4c0-1.984-5.952-1.984-5.952-1.984v-4c5.952 0 5.952 1.984 5.952 1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/burger.svg b/assets/icons/burger.svg
deleted file mode 100755
index 91351b6..0000000
--- a/assets/icons/burger.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 4.96h32v6.016h-32v-6.016zM0 12.96h32v6.016h-32v-6.016zM0 20.96h32v6.016h-32v-6.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel-circled.svg b/assets/icons/cancel-circled.svg
deleted file mode 100755
index 19de5b7..0000000
--- a/assets/icons/cancel-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM7.008 20.96l4 4 4.992-4.992 4.992 4.992 4-4-4.992-4.992 4.992-4.992-4-4-4.992 4.992-4.992-4.992-4 4 4.992 4.992z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel-circled2.svg b/assets/icons/cancel-circled2.svg
deleted file mode 100755
index be09a72..0000000
--- a/assets/icons/cancel-circled2.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM3.488 15.968q0 5.184 3.68 8.832t8.832 3.68 8.832-3.68 3.68-8.832-3.68-8.832-8.832-3.68-8.832 3.68-3.68 8.832zM8.128 20.352l4.384-4.384-4.384-4.384 3.488-3.488 4.384 4.384 4.384-4.384 3.488 3.488-4.384 4.384 4.384 4.384-3.488 3.488-4.384-4.384-4.384 4.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cancel.svg b/assets/icons/cancel.svg
deleted file mode 100755
index 56cd8a2..0000000
--- a/assets/icons/cancel.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.928 16l11.072 11.072-4.928 4.928-11.072-11.072-11.072 11.072-4.928-4.928 11.072-11.072-11.072-11.072 4.928-4.928 11.072 11.072 11.072-11.072 4.928 4.928z" fill="#000000" />
-</svg>
diff --git a/assets/icons/circle-empty.svg b/assets/icons/circle-empty.svg
deleted file mode 100755
index 08379ab..0000000
--- a/assets/icons/circle-empty.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/clipboard.svg b/assets/icons/clipboard.svg
deleted file mode 100755
index ca97e89..0000000
--- a/assets/icons/clipboard.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M24 32.041h-18c-1.105 0-2-0.893-2-1.996v-24.097c0-1.102 0.895-1.995 2-1.995h5v2.079h-4c-0.552 0-1 0.446-1 0.998v22.017c0 0.553 0.448 0.998 1 0.998h16c0.553 0 1-0.445 1-0.998v-22.017c0-0.552-0.447-0.998-1-0.998h-4v-2.079h5c1.104 0 2 0.894 2 1.995v24.097c0 1.103-0.896 1.996-2 1.996zM11 12.019h11v0.998h-11v-0.998zM11 15.013h11v0.998h-11v-0.998zM11 18.008h11v0.998h-11v-0.998zM11 21.002h11v0.998h-11v-0.998zM22 27.986h-11v-0.996h11v0.996zM11 23.996h11v0.998h-11v-0.998zM8 11.999h1v0.998h-1v-0.998zM8 14.993h1v0.998h-1v-0.998zM8 17.986h1v0.998h-1v-0.998zM8 20.98h1v0.998h-1v-0.998zM9 27.967h-1v-0.998h1v0.998zM8 23.975h1v0.998h-1v-0.998zM21 7.091c0.553 0 1 0.447 1 0.999 0 0.551 0 1.933 0 1.933h-14c0 0 0-1.382 0-1.933 0-0.552 0.447-0.999 1-0.999h3c0 0 0.012-1.419 0.012-3.041 0-1.684 1.3-3.092 2.988-3.092s3.033 1.48 3.033 3.102c0 1.747-0.033 3.031-0.033 3.031h3zM15 3.953c-0.553 0-1 0.446-1 0.997 0 0.552 0.447 0.998 1 0.998s1-0.446 1-0.998c0-0.551-0.447-0.997-1-0.997z" fill="#000000" />
-</svg>
diff --git a/assets/icons/clock.svg b/assets/icons/clock.svg
deleted file mode 100755
index 150cfed..0000000
--- a/assets/icons/clock.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M16 9.696v8q0 0.224-0.16 0.384t-0.416 0.16h-5.696q-0.256 0-0.416-0.16t-0.16-0.384v-1.152q0-0.256 0.16-0.416t0.416-0.16h4v-6.272q0-0.256 0.16-0.416t0.384-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM23.424 15.968q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cog.svg b/assets/icons/cog.svg
deleted file mode 100755
index c33f549..0000000
--- a/assets/icons/cog.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 15.968q0-1.888-1.312-3.232t-3.232-1.344-3.232 1.344-1.344 3.232 1.344 3.232 3.232 1.344 3.232-1.344 1.312-3.232zM27.424 14.016v3.968q0 0.224-0.128 0.416t-0.352 0.224l-3.328 0.512q-0.32 0.96-0.672 1.632 0.608 0.864 1.888 2.464 0.192 0.192 0.192 0.416t-0.16 0.416q-0.48 0.672-1.76 1.952t-1.696 1.248q-0.224 0-0.448-0.16l-2.464-1.92q-0.8 0.416-1.632 0.672-0.288 2.432-0.512 3.328-0.128 0.512-0.64 0.512h-3.968q-0.256 0-0.448-0.16t-0.192-0.384l-0.512-3.296q-0.864-0.288-1.6-0.672l-2.528 1.92q-0.192 0.16-0.448 0.16t-0.448-0.192q-2.24-2.048-2.944-3.008-0.128-0.16-0.128-0.416 0-0.192 0.16-0.384 0.256-0.384 0.896-1.184t0.96-1.28q-0.48-0.896-0.736-1.76l-3.264-0.48q-0.224-0.032-0.352-0.224t-0.16-0.416v-3.968q0-0.224 0.16-0.416t0.32-0.224l3.328-0.512q0.256-0.8 0.704-1.632-0.736-1.024-1.92-2.464-0.192-0.224-0.192-0.448 0-0.16 0.16-0.384 0.48-0.64 1.76-1.92t1.696-1.28q0.224 0 0.48 0.16l2.464 1.92q0.768-0.416 1.6-0.672 0.288-2.432 0.544-3.328 0.096-0.48 0.64-0.48h3.968q0.224 0 0.416 0.128t0.224 0.384l0.48 3.296q0.896 0.288 1.6 0.672l2.56-1.92q0.16-0.16 0.416-0.16 0.224 0 0.448 0.16 2.304 2.144 2.944 3.040 0.128 0.16 0.128 0.416 0 0.192-0.128 0.384-0.288 0.384-0.928 1.216t-0.96 1.248q0.448 0.896 0.736 1.76l3.264 0.48q0.224 0.032 0.384 0.224t0.128 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/collapse.svg b/assets/icons/collapse.svg
deleted file mode 100755
index 1f1ff7b..0000000
--- a/assets/icons/collapse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-16h24v16zM28 7.968h-24v-4h24v4zM14.016 25.952h4v-5.984h4l-6.016-6.016-5.984 6.016h4v5.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/cw.svg b/assets/icons/cw.svg
deleted file mode 100755
index 6ee3077..0000000
--- a/assets/icons/cw.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672q6.688 0 11.36 4.736l4.64-3.296v14.88l-14.24-4.768 4.192-2.976q-2.624-2.080-5.952-2.080-3.936 0-6.72 2.784t-2.784 6.72 2.784 6.72 6.72 2.784q2.624 0 4.8-1.28t3.456-3.488l5.632 3.264q-2.144 3.616-5.824 5.824t-8.064 2.176q-6.624 0-11.296-4.672t-4.704-11.328z" fill="#000000" />
-</svg>
diff --git a/assets/icons/dashboard.svg b/assets/icons/dashboard.svg
deleted file mode 100755
index b1ca985..0000000
--- a/assets/icons/dashboard.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 28.416c0 1.888-1.504 3.424-3.392 3.424h-25.056c-1.888 0-3.424-1.536-3.424-3.424v-25.024c0-1.888 1.536-3.424 3.424-3.424h25.056c1.888 0 3.392 1.536 3.392 3.424v25.024zM29.024 3.072c0-0.064-0.032-0.128-0.096-0.128h-25.696c-0.064 0-0.096 0.064-0.096 0.128v25.664c0 0.064 0.032 0.128 0.096 0.128h25.696c0.064 0 0.096-0.064 0.096-0.128v-25.664zM6.304 23.2l-2.432-1.728 6.016-8.416 3.84 3.84 4.096-7.168 4.064 5.056 3.84-6.176 2.56 1.568-6.112 9.76-3.936-4.896-3.84 6.752-4.128-4.128-3.968 5.536z" fill="#000000" />
-</svg>
diff --git a/assets/icons/database.svg b/assets/icons/database.svg
deleted file mode 100755
index ccee72e..0000000
--- a/assets/icons/database.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15.648 31.808c-6.56 0-11.904-2.656-11.904-5.952v0-3.36c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.36c0 3.296-5.344 5.952-11.936 5.952zM15.648 25.856c-6.56 0-11.904-2.656-11.904-5.952v-3.36c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.36c0 3.296-5.344 5.952-11.936 5.952zM15.648 19.904c-6.56 0-11.904-2.688-11.904-5.984v-3.328c0 3.296 5.344 5.344 11.904 5.344 6.592 0 11.936-2.048 11.936-5.344v3.328c0 3.296-5.344 5.984-11.936 5.984zM15.648 13.92c-6.56 0-11.904-2.656-11.904-5.952v-1.984c0-3.296 5.344-5.952 11.904-5.952s11.936 2.656 11.936 5.952v1.984c0 3.296-5.344 5.952-11.936 5.952z" fill="#000000" />
-</svg>
diff --git a/assets/icons/deselect-all.svg b/assets/icons/deselect-all.svg
deleted file mode 100644
index c25b446..0000000
--- a/assets/icons/deselect-all.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<path d="M18,32h-4v-3h4V32z M8,3h3V0H8V3z M11,32v-3H8v3H11z M14,0v3h4V0H14z M27,3h2v2h3V0h-5V3z M3,18v-4H0v4H3z M0,11h3V8H0V11z
-	 M3,24v-3H0v3H3z M24,29h-3v3h3V29z M5,29H3v-2H0v5h5V29z M29,27v2h-2v3h5v-5H29z M29,8v3h3V8H29z M3,5V3h2V0H0v5H3z M21,0v3h3V0H21
-	z M29,14v4h3v-4H29z M32,21h-3v3h3V21z M22.8,9.1c-0.9-0.9-1.9-1.5-3.1-2c-1.2-0.5-2.4-0.8-3.7-0.8c-1.3,0-2.5,0.3-3.7,0.8
-	c-1.2,0.5-2.2,1.2-3.1,2c-0.9,0.9-1.5,1.9-2,3.1S6.4,14.7,6.4,16c0,1.3,0.3,2.6,0.8,3.8c0.5,1.2,1.2,2.2,2,3.1
-	c0.9,0.9,1.9,1.5,3.1,2c1.2,0.5,2.4,0.8,3.7,0.8c1.3,0,2.5-0.3,3.7-0.8c1.2-0.5,2.2-1.2,3.1-2c0.9-0.9,1.5-1.9,2-3.1
-	c0.5-1.2,0.8-2.4,0.8-3.8c0-1.3-0.3-2.6-0.8-3.7S23.6,10,22.8,9.1z M9.2,16c0-1.2,0.3-2.4,0.9-3.4c0.6-1.1,1.4-1.9,2.5-2.5
-	c1-0.6,2.2-0.9,3.4-0.9c1.4,0,2.6,0.4,3.8,1.1l-9.4,9.4C9.6,18.6,9.2,17.3,9.2,16z M22.3,18.6c-0.4,0.8-0.8,1.6-1.5,2.2
-	c-0.6,0.6-1.3,1.1-2.2,1.5c-0.8,0.4-1.7,0.5-2.6,0.5c-1.3,0-2.6-0.4-3.7-1.1l9.4-9.4c0.7,1.1,1.1,2.3,1.1,3.7
-	C22.8,16.9,22.6,17.8,22.3,18.6z"/>
-</svg>
diff --git a/assets/icons/document.svg b/assets/icons/document.svg
deleted file mode 100755
index 126879d..0000000
--- a/assets/icons/document.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M17.984 0.032h-13.92v31.872h23.872v-21.92l-9.952-9.952zM8.032 27.904v-23.872h7.968v7.968h7.968v15.904h-15.936z" fill="#000000" />
-</svg>
diff --git a/assets/icons/documents.svg b/assets/icons/documents.svg
deleted file mode 100755
index 9f4504b..0000000
--- a/assets/icons/documents.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.96 0.032h-13.888v5.952h-5.952v25.792h23.808v-5.952h5.952v-15.872l-9.92-9.92zM20.96 27.808h-15.872v-17.856h1.984v15.872h13.888v1.984zM26.912 21.856h-15.872v-17.856h7.936v7.936h7.936v9.92z" fill="#000000" />
-</svg>
diff --git a/assets/icons/dot-circled.svg b/assets/icons/dot-circled.svg
deleted file mode 100755
index 797ceb6..0000000
--- a/assets/icons/dot-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 15.968q0 1.888-1.312 3.232t-3.232 1.344-3.232-1.344-1.344-3.232 1.344-3.232 3.232-1.344 3.232 1.344 1.312 3.232zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-1.svg b/assets/icons/down-1.svg
deleted file mode 100755
index a52f5e8..0000000
--- a/assets/icons/down-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M29.152 15.936l-14.304 14.336-14.272-14.336 5.056-5.056 5.664 5.632v-14.848h7.136v14.848l5.632-5.6z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-circled.svg b/assets/icons/down-circled.svg
deleted file mode 100755
index 036674a..0000000
--- a/assets/icons/down-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20 16.544q0 0.224-0.192 0.416l-5.696 5.696q-0.192 0.16-0.384 0.16t-0.416-0.16l-5.728-5.696q-0.256-0.288-0.128-0.64 0.16-0.352 0.544-0.352h3.424v-6.272q0-0.256 0.16-0.416t0.416-0.16h3.424q0.256 0 0.416 0.16t0.16 0.416v6.272h3.424q0.256 0 0.416 0.16t0.16 0.416zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-dir.svg b/assets/icons/down-dir.svg
deleted file mode 100755
index dd8a769..0000000
--- a/assets/icons/down-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M18.272 12.544q0 0.448-0.32 0.8l-8 8q-0.352 0.352-0.8 0.352t-0.8-0.352l-8-8q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h16q0.448 0 0.8 0.352t0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down-open.svg b/assets/icons/down-open.svg
deleted file mode 100755
index 0f5a932..0000000
--- a/assets/icons/down-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 10.336l4.736-4.736 11.264 11.232 11.264-11.232 4.736 4.736-16 16-4.736-4.736z" fill="#000000" />
-</svg>
diff --git a/assets/icons/down.svg b/assets/icons/down.svg
deleted file mode 100755
index 634a471..0000000
--- a/assets/icons/down.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="32" viewBox="0 0 14 32">
-<g>
-</g>
-	<path d="M13.664 23.168q0.128 0.32-0.096 0.608l-6.24 6.88q-0.192 0.16-0.416 0.16-0.256 0-0.416-0.16l-6.336-6.88q-0.256-0.288-0.096-0.608 0.16-0.352 0.512-0.352h4v-22.272q0-0.256 0.16-0.416t0.416-0.16h3.424q0.256 0 0.416 0.16t0.16 0.416v22.272h4q0.352 0 0.512 0.352z" fill="#000000" />
-</svg>
diff --git a/assets/icons/drop-down-dots.svg b/assets/icons/drop-down-dots.svg
deleted file mode 100755
index 1a1d202..0000000
--- a/assets/icons/drop-down-dots.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 1.952h8v8h-8v-8zM12 11.968h8v8h-8v-8zM12 21.952h8v8.032h-8v-8.032z" fill="#000000" />
-</svg>
diff --git a/assets/icons/exchange.svg b/assets/icons/exchange.svg
deleted file mode 100755
index 1bde3c3..0000000
--- a/assets/icons/exchange.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 21.12v3.424q0 0.224-0.16 0.384t-0.416 0.192h-24.576v3.424q0 0.224-0.16 0.384t-0.416 0.192q-0.192 0-0.416-0.192l-5.696-5.696q-0.16-0.16-0.16-0.416t0.16-0.416l5.728-5.696q0.16-0.16 0.384-0.16 0.256 0 0.416 0.16t0.16 0.416v3.424h24.576q0.224 0 0.416 0.16t0.16 0.416zM32 11.392q0 0.256-0.16 0.416l-5.728 5.728q-0.16 0.16-0.384 0.16-0.256 0-0.416-0.192t-0.16-0.384v-3.424h-24.576q-0.224 0-0.416-0.192t-0.16-0.384v-3.424q0-0.256 0.16-0.416t0.416-0.16h24.576v-3.424q0-0.256 0.16-0.416t0.416-0.16q0.192 0 0.416 0.16l5.696 5.696q0.16 0.16 0.16 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/expand.svg b/assets/icons/expand.svg
deleted file mode 100755
index 9d47d8c..0000000
--- a/assets/icons/expand.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0-0.032v32h32v-32h-32zM28 27.968h-24v-16h24v16zM28 7.968h-24v-4h24v4zM22.016 19.968h-4v-6.016h-4v6.016h-4l5.984 5.984 6.016-5.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/eye.svg b/assets/icons/eye.svg
deleted file mode 100755
index d5ef732..0000000
--- a/assets/icons/eye.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.88 5.248q2.176 0 4.48 1.088t3.968 2.624 3.040 3.104 2.048 2.656l0.736 1.088q-0.288 0.448-0.768 1.184t-2.016 2.592-3.104 3.296-3.872 2.624-4.512 1.152-4.48-1.088-3.968-2.72-3.072-3.2-2.048-2.752l-0.736-1.088q0.256-0.448 0.736-1.152t2.016-2.528 3.136-3.232 3.904-2.528 4.512-1.12zM14.88 23.104q2.944 0 5.056-2.080t2.080-5.056-2.080-5.056-5.056-2.112-5.056 2.112-2.112 5.056 2.112 5.056 5.056 2.080zM11.296 15.968q0-3.584 3.584-3.584t3.552 3.584-3.552 3.552-3.584-3.552z" fill="#000000" />
-</svg>
diff --git a/assets/icons/file-code-o.svg b/assets/icons/file-code-o.svg
deleted file mode 100644
index 5b50cb2..0000000
--- a/assets/icons/file-code-o.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1596 380q28 28 48 76t20 88v1152q0 40-28 68t-68 28h-1344q-40 0-68-28t-28-68v-1600q0-40 28-68t68-28h896q40 0 88 20t76 48zm-444-244v376h376q-10-29-22-41l-313-313q-12-12-41-22zm384 1528v-1024h-416q-40 0-68-28t-28-68v-416h-768v1536h1280zm-928-896q8-11 21-12.5t24 6.5l51 38q11 8 12.5 21t-6.5 24l-182 243 182 243q8 11 6.5 24t-12.5 21l-51 38q-11 8-24 6.5t-21-12.5l-226-301q-14-19 0-38zm802 301q14 19 0 38l-226 301q-8 11-21 12.5t-24-6.5l-51-38q-11-8-12.5-21t6.5-24l182-243-182-243q-8-11-6.5-24t12.5-21l51-38q11-8 24-6.5t21 12.5zm-620 461q-13-2-20.5-13t-5.5-24l138-831q2-13 13-20.5t24-5.5l63 10q13 2 20.5 13t5.5 24l-138 831q-2 13-13 20.5t-24 5.5z"/></svg>
diff --git a/assets/icons/files-o.svg b/assets/icons/files-o.svg
deleted file mode 100644
index 5d2767d..0000000
--- a/assets/icons/files-o.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1696 384q40 0 68 28t28 68v1216q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-288h-544q-40 0-68-28t-28-68v-672q0-40 20-88t48-76l408-408q28-28 76-48t88-20h416q40 0 68 28t28 68v328q68-40 128-40h416zm-544 213l-299 299h299v-299zm-640-384l-299 299h299v-299zm196 647l316-316v-416h-384v416q0 40-28 68t-68 28h-416v640h512v-256q0-40 20-88t48-76zm956 804v-1152h-384v416q0 40-28 68t-68 28h-416v640h896z"/></svg>
diff --git a/assets/icons/filter.svg b/assets/icons/filter.svg
deleted file mode 100644
index f979c94..0000000
--- a/assets/icons/filter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1595 295q17 41-14 70l-493 493v742q0 42-39 59-13 5-25 5-27 0-45-19l-256-256q-19-19-19-45v-486l-493-493q-31-29-14-70 17-39 59-39h1280q42 0 59 39z"/></svg>
diff --git a/assets/icons/gears.svg b/assets/icons/gears.svg
deleted file mode 100755
index 74890d0..0000000
--- a/assets/icons/gears.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
-<g>
-</g>
-	<path d="M16 16q0-1.893-1.339-3.232t-3.232-1.339-3.232 1.339-1.339 3.232 1.339 3.232 3.232 1.339 3.232-1.339 1.339-3.232zM29.714 25.143q0-0.929-0.679-1.607t-1.607-0.679-1.607 0.679-0.679 1.607q0 0.946 0.67 1.616t1.616 0.67 1.616-0.67 0.67-1.616zM29.714 6.857q0-0.929-0.679-1.607t-1.607-0.679-1.607 0.679-0.679 1.607q0 0.946 0.67 1.616t1.616 0.67 1.616-0.67 0.67-1.616zM22.857 14.375v3.304q0 0.179-0.125 0.348t-0.286 0.188l-2.768 0.429q-0.196 0.625-0.571 1.357 0.607 0.857 1.607 2.054 0.125 0.179 0.125 0.357 0 0.214-0.125 0.339-0.411 0.536-1.473 1.598t-1.402 1.063q-0.196 0-0.375-0.125l-2.054-1.607q-0.661 0.339-1.375 0.554-0.196 1.929-0.411 2.768-0.125 0.429-0.536 0.429h-3.321q-0.196 0-0.357-0.134t-0.179-0.313l-0.411-2.732q-0.607-0.179-1.339-0.554l-2.107 1.589q-0.125 0.125-0.357 0.125-0.196 0-0.375-0.143-2.571-2.375-2.571-2.857 0-0.161 0.125-0.339 0.179-0.25 0.732-0.946t0.839-1.089q-0.411-0.786-0.625-1.464l-2.714-0.429q-0.179-0.018-0.304-0.17t-0.125-0.348v-3.304q0-0.179 0.125-0.348t0.286-0.188l2.768-0.429q0.196-0.625 0.571-1.357-0.607-0.857-1.607-2.054-0.125-0.196-0.125-0.357 0-0.214 0.125-0.357 0.393-0.536 1.464-1.589t1.411-1.054q0.196 0 0.375 0.125l2.054 1.607q0.607-0.321 1.375-0.571 0.196-1.929 0.411-2.75 0.125-0.429 0.536-0.429h3.321q0.196 0 0.357 0.134t0.179 0.313l0.411 2.732q0.607 0.179 1.339 0.554l2.107-1.589q0.143-0.125 0.357-0.125 0.196 0 0.375 0.143 2.571 2.375 2.571 2.857 0 0.161-0.125 0.339-0.214 0.286-0.75 0.964t-0.804 1.071q0.411 0.857 0.607 1.464l2.714 0.411q0.179 0.036 0.304 0.188t0.125 0.348zM34.286 23.893v2.5q0 0.286-2.661 0.554-0.214 0.482-0.536 0.929 0.911 2.018 0.911 2.464 0 0.071-0.071 0.125-2.179 1.268-2.214 1.268-0.143 0-0.821-0.839t-0.929-1.214q-0.357 0.036-0.536 0.036t-0.536-0.036q-0.25 0.375-0.929 1.214t-0.821 0.839q-0.036 0-2.214-1.268-0.071-0.054-0.071-0.125 0-0.446 0.911-2.464-0.321-0.446-0.536-0.929-2.661-0.268-2.661-0.554v-2.5q0-0.286 2.661-0.554 0.232-0.518 0.536-0.929-0.911-2.018-0.911-2.464 0-0.071 0.071-0.125 0.071-0.036 0.625-0.357t1.054-0.607 0.536-0.286q0.143 0 0.821 0.83t0.929 1.205q0.357-0.036 0.536-0.036t0.536 0.036q0.911-1.268 1.643-2l0.107-0.036q0.071 0 2.214 1.25 0.071 0.054 0.071 0.125 0 0.446-0.911 2.464 0.304 0.411 0.536 0.929 2.661 0.268 2.661 0.554zM34.286 5.607v2.5q0 0.286-2.661 0.554-0.214 0.482-0.536 0.929 0.911 2.018 0.911 2.464 0 0.071-0.071 0.125-2.179 1.268-2.214 1.268-0.143 0-0.821-0.839t-0.929-1.214q-0.357 0.036-0.536 0.036t-0.536-0.036q-0.25 0.375-0.929 1.214t-0.821 0.839q-0.036 0-2.214-1.268-0.071-0.054-0.071-0.125 0-0.446 0.911-2.464-0.321-0.446-0.536-0.929-2.661-0.268-2.661-0.554v-2.5q0-0.286 2.661-0.554 0.232-0.518 0.536-0.929-0.911-2.018-0.911-2.464 0-0.071 0.071-0.125 0.071-0.036 0.625-0.357t1.054-0.607 0.536-0.286q0.143 0 0.821 0.83t0.929 1.205q0.357-0.036 0.536-0.036t0.536 0.036q0.911-1.268 1.643-2l0.107-0.036q0.071 0 2.214 1.25 0.071 0.054 0.071 0.125 0 0.446-0.911 2.464 0.304 0.411 0.536 0.929 2.661 0.268 2.661 0.554z" fill="#000000" />
-</svg>
diff --git a/assets/icons/help-circled.svg b/assets/icons/help-circled.svg
deleted file mode 100755
index 964f822..0000000
--- a/assets/icons/help-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M16 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416zM20.576 12.544q0-1.568-0.992-2.912t-2.464-2.080-3.040-0.736q-4.352 0-6.624 3.808-0.288 0.448 0.128 0.768l2.368 1.76q0.128 0.128 0.32 0.128 0.288 0 0.448-0.224 0.96-1.216 1.536-1.632 0.608-0.448 1.536-0.448 0.864 0 1.536 0.48t0.672 1.056q0 0.672-0.352 1.088t-1.216 0.8q-1.12 0.512-2.080 1.536t-0.928 2.24v0.64q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416q0-0.32 0.384-0.864t0.96-0.896q0.576-0.32 0.896-0.512t0.8-0.608 0.8-0.864 0.512-1.088 0.224-1.44zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/help.svg b/assets/icons/help.svg
deleted file mode 100755
index ee3a4c9..0000000
--- a/assets/icons/help.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M12.576 22.4v4.288q0 0.288-0.224 0.512t-0.48 0.192h-4.288q-0.288 0-0.512-0.192t-0.224-0.512v-4.288q0-0.288 0.224-0.512t0.512-0.192h4.288q0.256 0 0.48 0.192t0.224 0.512zM18.208 11.68q0 0.96-0.256 1.792t-0.64 1.376-0.992 1.056-1.024 0.8-1.088 0.608q-0.736 0.416-1.216 1.184t-0.48 1.184q0 0.32-0.224 0.576t-0.512 0.288h-4.288q-0.256 0-0.448-0.32t-0.192-0.672v-0.832q0-1.472 1.184-2.784t2.528-1.92q1.056-0.48 1.504-1.024t0.448-1.344q0-0.736-0.832-1.312t-1.92-0.576q-1.152 0-1.92 0.512-0.64 0.448-1.92 2.048-0.224 0.288-0.544 0.288-0.224 0-0.448-0.128l-2.912-2.24q-0.256-0.192-0.288-0.448t0.096-0.512q2.848-4.736 8.288-4.736 1.44 0 2.88 0.544t2.592 1.472 1.888 2.304 0.736 2.816z" fill="#000000" />
-</svg>
diff --git a/assets/icons/info-circled.svg b/assets/icons/info-circled.svg
deleted file mode 100755
index 919715d..0000000
--- a/assets/icons/info-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M18.272 24.544v-2.848q0-0.256-0.16-0.416t-0.384-0.16h-1.728v-9.152q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h1.696v5.728h-1.696q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h8q0.224 0 0.384-0.16t0.16-0.416zM16 8.544v-2.848q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.256 0-0.416 0.16t-0.16 0.416v2.848q0 0.256 0.16 0.416t0.416 0.16h3.424q0.256 0 0.416-0.16t0.16-0.416zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/json.svg b/assets/icons/json.svg
deleted file mode 100755
index 5bc7923..0000000
--- a/assets/icons/json.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M5.888 3.296c-0.96 0.64-1.44 1.824-1.44 3.552 0 0.576 0.032 1.056 0.064 1.536 0.032 0.448 0.064 0.896 0.096 1.312 0.064 0.416 0.096 0.832 0.128 1.248 0.032 0.448 0.032 0.896 0.032 1.376 0 0.288-0.064 0.576-0.192 0.832-0.128 0.288-0.352 0.544-0.704 0.768-0.32 0.224-0.8 0.384-1.344 0.544-0.576 0.128-1.28 0.224-2.144 0.224v2.752c0.864 0.032 1.568 0.096 2.144 0.256s1.024 0.32 1.344 0.544c0.352 0.224 0.576 0.48 0.704 0.736 0.128 0.288 0.192 0.576 0.192 0.832 0 0.512 0 0.992-0.032 1.408-0.032 0.416-0.064 0.832-0.128 1.248-0.032 0.416-0.064 0.832-0.096 1.28s-0.064 0.96-0.064 1.536c0 1.728 0.48 2.912 1.44 3.584 0.96 0.64 2.464 0.96 4.512 0.96h2.464v-2.496h-1.312c-0.64 0-1.184-0.032-1.632-0.096-0.416-0.064-0.736-0.192-0.992-0.352-0.224-0.16-0.384-0.384-0.48-0.672-0.096-0.288-0.16-0.672-0.16-1.12 0-0.864 0.032-1.696 0.096-2.528 0.032-0.8 0.064-1.696 0.064-2.688 0-1.216-0.224-2.080-0.736-2.624s-1.312-0.928-2.464-1.12v-0.128c1.152-0.192 1.984-0.544 2.464-1.088s0.736-1.44 0.736-2.656c0-0.96-0.032-1.856-0.064-2.688-0.064-0.832-0.096-1.664-0.096-2.528 0-0.448 0.064-0.8 0.16-1.088 0.096-0.288 0.256-0.512 0.48-0.704 0.256-0.16 0.576-0.288 0.992-0.352s0.992-0.096 1.632-0.096h1.312v-2.496h-2.464c-2.048 0-3.552 0.32-4.512 0.992zM29.888 14.464c-0.576-0.16-1.024-0.32-1.376-0.544-0.32-0.224-0.576-0.48-0.704-0.768-0.128-0.256-0.192-0.544-0.192-0.832 0-0.48 0.032-0.928 0.064-1.376 0.032-0.416 0.064-0.832 0.128-1.248 0.032-0.416 0.096-0.864 0.128-1.312 0.032-0.48 0.032-0.96 0.032-1.536 0-1.728-0.48-2.912-1.44-3.552-0.96-0.672-2.464-0.992-4.512-0.992h-2.464v2.496h1.312c0.672 0 1.216 0.032 1.632 0.096s0.736 0.192 0.96 0.352c0.256 0.192 0.416 0.416 0.512 0.704 0.096 0.288 0.128 0.64 0.128 1.088 0 0.864 0 1.696-0.064 2.528s-0.064 1.728-0.064 2.688c0 1.216 0.256 2.112 0.736 2.656 0.512 0.544 1.312 0.896 2.464 1.088v0.128c-1.152 0.192-1.952 0.576-2.464 1.12-0.48 0.544-0.736 1.408-0.736 2.624 0 0.992 0.032 1.888 0.064 2.688 0.064 0.832 0.064 1.664 0.064 2.528 0 0.448-0.032 0.832-0.128 1.12-0.096 0.288-0.256 0.512-0.512 0.672-0.224 0.192-0.544 0.288-0.96 0.352-0.416 0.064-0.96 0.096-1.632 0.096h-1.312v2.496h2.464c2.048 0 3.552-0.32 4.512-0.96 0.96-0.672 1.44-1.856 1.44-3.584 0-0.576 0-1.088-0.032-1.536-0.032-0.448-0.096-0.864-0.128-1.28-0.064-0.416-0.096-0.832-0.128-1.248-0.032-0.416-0.064-0.896-0.064-1.408 0-0.256 0.064-0.544 0.192-0.832 0.128-0.256 0.384-0.512 0.704-0.736 0.352-0.224 0.8-0.416 1.376-0.544s1.28-0.224 2.144-0.256v-2.752c-0.864 0-1.6-0.096-2.144-0.224z" fill="#000000" />
-</svg>
diff --git a/assets/icons/key.svg b/assets/icons/key.svg
deleted file mode 100755
index 101535d..0000000
--- a/assets/icons/key.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M20.256 5.248q-2.24 0-3.808 1.568t-1.6 3.744q0 0.448 0.128 1.024l0.352 1.824q-1.856 1.856-5.6 5.6t-5.568 5.536v2.112h3.552v-3.552h3.584v-3.584h3.552v-1.504l2.56-2.528 1.824 0.352q0.576 0.096 0.992 0.096 2.24 0 3.808-1.568t1.536-3.776-1.536-3.776-3.776-1.568zM20.256 1.664q3.68 0 6.304 2.624t2.592 6.304-2.592 6.304-6.336 2.624q-0.896 0-1.632-0.16l-0.16 0.16v3.584h-3.584v3.552h-3.552v3.616h-10.72v-7.168l10.88-10.88q-0.16-0.736-0.16-1.664 0-3.68 2.624-6.272t6.336-2.624zM18.432 10.56q0-1.76 1.792-1.76t1.792 1.76q0 1.824-1.792 1.824t-1.792-1.824z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-1.svg b/assets/icons/left-1.svg
deleted file mode 100755
index 078fd4c..0000000
--- a/assets/icons/left-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.848 30.272l-14.272-14.336 14.272-14.272 5.088 5.056-5.664 5.664h14.88v7.136h-14.88l5.664 5.632z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-circled.svg b/assets/icons/left-circled.svg
deleted file mode 100755
index a11eb04..0000000
--- a/assets/icons/left-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20.576 14.24v3.456q0 0.224-0.16 0.384t-0.416 0.16h-6.272v3.456q0 0.224-0.16 0.384t-0.416 0.16q-0.224 0-0.448-0.16l-5.696-5.696q-0.16-0.16-0.16-0.416t0.16-0.416l5.728-5.696q0.16-0.16 0.416-0.16 0.224 0 0.384 0.16t0.192 0.384v3.456h6.272q0.224 0 0.416 0.16t0.16 0.384zM23.424 15.968q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-dir.svg b/assets/icons/left-dir.svg
deleted file mode 100755
index 24ac831..0000000
--- a/assets/icons/left-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M11.424 7.968v16q0 0.448-0.32 0.8t-0.832 0.352-0.8-0.352l-8-8q-0.32-0.352-0.32-0.8t0.32-0.8l8-8q0.352-0.352 0.8-0.352t0.832 0.352 0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left-open.svg b/assets/icons/left-open.svg
deleted file mode 100755
index c968974..0000000
--- a/assets/icons/left-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M0 15.968l4.736-4.768 11.264-11.232 4.736 4.736-11.232 11.264 11.232 11.264-4.736 4.736-11.264-11.264z" fill="#000000" />
-</svg>
diff --git a/assets/icons/left.svg b/assets/icons/left.svg
deleted file mode 100755
index 3a1e099..0000000
--- a/assets/icons/left.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 14.24v3.456q0 0.224-0.16 0.384t-0.416 0.16h-22.272v4q0 0.384-0.352 0.544t-0.608-0.096l-6.88-6.272q-0.16-0.16-0.16-0.384 0-0.256 0.16-0.448l6.88-6.304q0.288-0.256 0.608-0.128 0.352 0.16 0.352 0.544v4h22.272q0.256 0 0.416 0.16t0.16 0.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/link.svg b/assets/icons/link.svg
deleted file mode 100755
index f385901..0000000
--- a/assets/icons/link.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M26.016 21.696q0-0.736-0.512-1.216l-3.712-3.712q-0.512-0.512-1.216-0.512-0.768 0-1.28 0.576 0.032 0.032 0.32 0.32t0.384 0.384 0.288 0.352 0.224 0.448 0.064 0.48q0 0.736-0.512 1.216t-1.216 0.512q-0.256 0-0.48-0.064t-0.448-0.224-0.352-0.288-0.384-0.384-0.32-0.32q-0.608 0.544-0.608 1.28 0 0.736 0.512 1.216l3.68 3.712q0.48 0.48 1.216 0.48 0.704 0 1.216-0.48l2.624-2.592q0.512-0.512 0.512-1.216zM13.44 9.088q0-0.704-0.48-1.216l-3.68-3.68q-0.512-0.512-1.216-0.512-0.704 0-1.216 0.48l-2.624 2.624q-0.512 0.48-0.512 1.184t0.512 1.216l3.712 3.712q0.48 0.48 1.216 0.48 0.736 0 1.28-0.544-0.064-0.064-0.352-0.352t-0.384-0.384-0.256-0.32-0.224-0.448-0.064-0.512q0-0.704 0.48-1.216t1.216-0.48q0.288 0 0.512 0.064t0.448 0.224 0.32 0.256 0.384 0.384 0.352 0.352q0.576-0.544 0.576-1.312zM29.44 21.696q0 2.112-1.536 3.616l-2.624 2.592q-1.472 1.504-3.616 1.504-2.176 0-3.648-1.536l-3.68-3.68q-1.472-1.504-1.472-3.648 0-2.176 1.568-3.712l-1.568-1.568q-1.536 1.568-3.712 1.568-2.144 0-3.648-1.504l-3.712-3.712q-1.504-1.504-1.504-3.648t1.504-3.616l2.624-2.624q1.504-1.472 3.648-1.472t3.648 1.504l3.68 3.712q1.472 1.472 1.472 3.616 0 2.208-1.568 3.744l1.568 1.568q1.536-1.568 3.712-1.568 2.144 0 3.648 1.504l3.712 3.712q1.504 1.504 1.504 3.648z" fill="#000000" />
-</svg>
diff --git a/assets/icons/list-alt.svg b/assets/icons/list-alt.svg
deleted file mode 100755
index bfdd3a5..0000000
--- a/assets/icons/list-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M6.848 21.12v1.12q0 0.256-0.16 0.416t-0.416 0.16h-1.12q-0.224 0-0.416-0.16t-0.16-0.416v-1.12q0-0.256 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM6.848 16.544v1.152q0 0.224-0.16 0.384t-0.416 0.16h-1.12q-0.224 0-0.416-0.16t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM6.848 11.968v1.152q0 0.224-0.16 0.384t-0.416 0.192h-1.12q-0.224 0-0.416-0.192t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h1.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 21.12v1.12q0 0.256-0.16 0.416t-0.416 0.16h-17.12q-0.256 0-0.416-0.16t-0.16-0.416v-1.12q0-0.256 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 16.544v1.152q0 0.224-0.16 0.384t-0.416 0.16h-17.12q-0.256 0-0.416-0.16t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM27.424 11.968v1.152q0 0.224-0.16 0.384t-0.416 0.192h-17.12q-0.256 0-0.416-0.192t-0.16-0.384v-1.152q0-0.224 0.16-0.416t0.416-0.16h17.12q0.256 0 0.416 0.16t0.16 0.416zM29.728 24.544v-14.848q0-0.256-0.192-0.416t-0.384-0.16h-26.304q-0.224 0-0.384 0.16t-0.192 0.416v14.848q0 0.224 0.192 0.384t0.384 0.192h26.304q0.224 0 0.384-0.192t0.192-0.384zM32 5.12v19.424q0 1.184-0.832 2.016t-2.016 0.832h-26.304q-1.152 0-2.016-0.832t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.864h26.304q1.184 0 2.016 0.864t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/lock.svg b/assets/icons/lock.svg
deleted file mode 100755
index fcfa074..0000000
--- a/assets/icons/lock.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M5.728 13.696h9.12v-3.456q0-1.888-1.344-3.232t-3.232-1.312-3.232 1.312-1.312 3.232v3.456zM20.576 15.392v10.304q0 0.704-0.512 1.184t-1.216 0.512h-17.12q-0.736 0-1.216-0.512t-0.512-1.184v-10.304q0-0.704 0.512-1.216t1.216-0.48h0.544v-3.456q0-3.264 2.368-5.632t5.632-2.368 5.664 2.368 2.336 5.632v3.456h0.576q0.736 0 1.216 0.48t0.512 1.216z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mail-alt.svg b/assets/icons/mail-alt.svg
deleted file mode 100755
index 7dcbae2..0000000
--- a/assets/icons/mail-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 12.64v14.176q0 1.184-0.832 2.016t-2.016 0.864h-26.304q-1.152 0-2.016-0.864t-0.832-2.016v-14.176q0.8 0.896 1.792 1.568 6.464 4.384 8.896 6.144 1.024 0.768 1.632 1.184t1.696 0.864 1.952 0.416h0.064q0.896 0 1.952-0.416t1.696-0.864 1.632-1.184q3.040-2.176 8.896-6.144 1.024-0.704 1.792-1.568zM32 7.392q0 1.408-0.864 2.688t-2.176 2.208q-6.72 4.672-8.384 5.792-0.16 0.128-0.736 0.544t-0.96 0.704-0.928 0.576-1.056 0.48-0.864 0.16h-0.064q-0.384 0-0.864-0.16t-1.056-0.48-0.928-0.576-0.96-0.704-0.736-0.544q-1.632-1.12-4.704-3.232t-3.648-2.56q-1.12-0.736-2.080-2.048t-0.992-2.464q0-1.376 0.736-2.304t2.112-0.928h26.304q1.152 0 1.984 0.832t0.864 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mail.svg b/assets/icons/mail.svg
deleted file mode 100755
index a36ebba..0000000
--- a/assets/icons/mail.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.728 26.816v-13.696q-0.576 0.64-1.248 1.184-4.768 3.648-7.616 6.016-0.896 0.768-1.472 1.216t-1.536 0.864-1.824 0.416h-0.064q-0.832 0-1.824-0.416t-1.536-0.864-1.472-1.216q-2.816-2.368-7.616-6.016-0.672-0.544-1.248-1.184v13.696q0 0.256 0.192 0.416t0.384 0.16h26.304q0.224 0 0.384-0.16t0.192-0.416zM29.728 8.064v-0.448t-0.032-0.224-0.032-0.224-0.096-0.16-0.16-0.128-0.256-0.064h-26.304q-0.224 0-0.384 0.192t-0.192 0.384q0 3.008 2.624 5.088 3.456 2.72 7.168 5.664 0.128 0.064 0.64 0.512t0.8 0.672 0.8 0.576 0.896 0.48 0.768 0.16h0.064q0.352 0 0.768-0.16t0.896-0.48 0.8-0.576 0.8-0.672 0.64-0.512q3.712-2.944 7.168-5.664 0.96-0.768 1.792-2.080t0.832-2.336zM32 7.392v19.424q0 1.184-0.832 2.016t-2.016 0.864h-26.304q-1.152 0-2.016-0.864t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.832h26.304q1.184 0 2.016 0.832t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/map.svg b/assets/icons/map.svg
deleted file mode 100644
index a9ecb15..0000000
--- a/assets/icons/map.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -256 1792 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
-q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/map2.svg b/assets/icons/map2.svg
deleted file mode 100644
index 55a81d8..0000000
--- a/assets/icons/map2.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -257 2048 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
-v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/megaphone.svg b/assets/icons/megaphone.svg
deleted file mode 100755
index a0838a8..0000000
--- a/assets/icons/megaphone.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M29.728 11.392q0.928 0 1.6 0.672t0.672 1.632-0.672 1.6-1.6 0.672v6.848q0 0.928-0.704 1.6t-1.6 0.704q-7.456-6.208-14.496-6.784-1.024 0.32-1.632 1.152t-0.544 1.824 0.704 1.632q-0.352 0.608-0.416 1.184t0.128 1.024 0.576 0.992 0.864 0.896 1.12 0.896q-0.544 1.024-2.016 1.472t-3.008 0.224-2.336-0.992q-0.128-0.416-0.544-1.568t-0.576-1.696-0.384-1.6-0.288-1.792 0.064-1.76 0.384-1.984h-2.176q-1.152 0-2.016-0.832t-0.832-2.016v-3.424q0-1.184 0.832-2.016t2.016-0.832h8.576q7.776 0 16-6.88 0.928 0 1.6 0.704t0.704 1.6v6.848zM27.424 22.176v-17.024q-7.040 5.376-13.696 6.112v4.832q6.72 0.736 13.696 6.080z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-circled.svg b/assets/icons/minus-circled.svg
deleted file mode 100755
index 028965c..0000000
--- a/assets/icons/minus-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM6.816 18.592h18.368v-5.248h-18.368v5.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-circled2.svg b/assets/icons/minus-circled2.svg
deleted file mode 100644
index 584bef9..0000000
--- a/assets/icons/minus-circled2.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<path d="M6.8,18.6h18.4v-5.2H6.8V18.6z M0,16c0-4.4,1.6-8.2,4.7-11.3S11.6-0.1,16,0s8.2,1.6,11.3,4.7C30.5,7.7,32,11.5,32,16
-	c0,4.5-1.6,8.2-4.7,11.3S20.5,31.9,16,32s-8.2-1.5-11.3-4.7S0.1,20.4,0,16z M3.5,16c0,3.5,1.2,6.4,3.7,8.8c2.5,2.4,5.4,3.7,8.8,3.7
-	c3.4,0,6.4-1.2,8.8-3.7s3.7-5.4,3.7-8.8s-1.2-6.4-3.7-8.8S19.4,3.4,16,3.5c-3.4,0-6.4,1.2-8.8,3.7S3.5,12.5,3.5,16z"/>
-</svg>
diff --git a/assets/icons/minus-squared-alt.svg b/assets/icons/minus-squared-alt.svg
deleted file mode 100755
index 220a3bf..0000000
--- a/assets/icons/minus-squared-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M20.576 14.24v1.152q0 0.256-0.16 0.416t-0.416 0.16h-14.848q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.224 0.16-0.384t0.416-0.16h14.848q0.256 0 0.416 0.16t0.16 0.384zM22.848 22.24v-14.848q0-1.184-0.832-2.016t-2.016-0.832h-14.848q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.048t2.016 0.832h14.848q1.184 0 2.016-0.832t0.832-2.048zM25.152 7.392v14.848q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h14.848q2.112 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus-squared.svg b/assets/icons/minus-squared.svg
deleted file mode 100755
index 45736fc..0000000
--- a/assets/icons/minus-squared.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M22.848 17.12v-2.304q0-0.448-0.32-0.8t-0.8-0.32h-16q-0.48 0-0.832 0.32t-0.32 0.8v2.304q0 0.448 0.32 0.8t0.832 0.32h16q0.448 0 0.8-0.32t0.32-0.8zM27.424 7.392v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/minus.svg b/assets/icons/minus.svg
deleted file mode 100755
index 0aa14dc..0000000
--- a/assets/icons/minus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 20.48v-9.024h32v9.024h-32z" fill="#000000" />
-</svg>
diff --git a/assets/icons/mixer.svg b/assets/icons/mixer.svg
deleted file mode 100755
index 0b3a857..0000000
--- a/assets/icons/mixer.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M25.952 31.808h-19.808c-3.296 0-5.952-2.688-5.952-5.952v-19.808c0-3.296 2.656-5.952 5.952-5.952h19.808c3.264 0 5.952 2.656 5.952 5.952v19.808c0 3.264-2.688 5.952-5.952 5.952zM27.936 6.048c0-1.12-0.896-1.984-1.984-1.984h-19.808c-1.12 0-1.984 0.896-1.984 1.984v19.808c0 1.088 0.864 1.984 1.984 1.984h19.808c1.088 0 1.984-0.896 1.984-1.984v-19.808zM21.984 21.888v2.976c0 0.544-0.448 0.992-0.992 0.992s-0.992-0.448-0.992-0.992v-2.976c-1.088 0-1.984-0.896-1.984-1.984v-1.984c0-1.088 0.896-1.984 1.984-1.984v-8.896c0-0.544 0.448-0.992 0.992-0.992s0.992 0.448 0.992 0.992v8.896c1.088 0 1.984 0.896 1.984 1.984v1.984c0 1.088-0.896 1.984-1.984 1.984zM12.064 15.936v8.928c0 0.544-0.448 0.992-0.992 0.992s-0.992-0.448-0.992-0.992v-8.928c-1.088 0-1.984-0.896-1.984-1.984v-1.984c0-1.088 0.896-1.952 1.984-1.952v-2.976c0-0.544 0.448-0.992 0.992-0.992s0.992 0.448 0.992 0.992v2.976c1.12 0 1.984 0.864 1.984 1.952v1.984c0 1.12-0.864 1.984-1.984 1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/new-database.svg b/assets/icons/new-database.svg
deleted file mode 100755
index b9681a7..0000000
--- a/assets/icons/new-database.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M1.6 8v-1.984c0-3.296 5.344-5.952 11.904-5.952s11.936 2.656 11.936 5.952v1.984c0 2.272-2.464 4.224-6.144 5.216-0.128 0.032-0.256 0.064-0.384 0.096-1.6 0.416-3.456 0.672-5.408 0.672-6.56 0-11.904-2.688-11.904-5.984zM24 13.312c0.512 0.128 0.992 0.288 1.44 0.512v-3.2c0 1.024-0.512 1.952-1.44 2.688zM12.864 27.872c-6.272-0.128-11.264-2.144-11.264-5.312v3.36c0 3.296 5.344 5.952 11.904 5.952 1.12 0 2.176-0.064 3.2-0.224-1.6-0.864-2.944-2.176-3.84-3.776zM11.968 25.856c-0.288-0.928-0.448-1.92-0.448-2.944 0-0.352 0.032-0.704 0.064-1.056-5.664-0.352-9.984-2.304-9.984-5.28v3.36c0 3.040 4.512 5.536 10.368 5.92zM12 19.904c0.48-1.504 1.312-2.848 2.4-3.968-0.288 0.032-0.576 0.032-0.896 0.032-6.56 0-11.904-2.048-11.904-5.344v3.36c0 3.040 4.544 5.536 10.4 5.92zM30.432 22.912c0 4.96-4.032 8.96-8.96 8.96s-8.96-4-8.96-8.96 4.032-8.928 8.96-8.928c4.928 0 8.96 4 8.96 8.928zM27.424 21.92h-4.96v-4.96h-1.984v4.96h-4.96v1.984h4.96v4.992h1.984v-4.992h4.96v-1.984z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok-circled-2.svg b/assets/icons/ok-circled-2.svg
deleted file mode 100755
index 3f2de78..0000000
--- a/assets/icons/ok-circled-2.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 16q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM3.488 16q0 5.184 3.68 8.832t8.832 3.68 8.832-3.68 3.68-8.832-3.68-8.832-8.832-3.68-8.832 3.68-3.68 8.832zM6.88 17.632l3.008-2.944 2.976 3.008 9.248-9.312 3.008 2.976-9.312 9.28-2.944 2.976-2.976-2.976z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok-circled.svg b/assets/icons/ok-circled.svg
deleted file mode 100755
index e01ccbd..0000000
--- a/assets/icons/ok-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM5.824 17.792l6.688 6.688 3.296-3.328 10.368-10.368-3.296-3.328-10.368 10.4-3.392-3.392z" fill="#000000" />
-</svg>
diff --git a/assets/icons/ok.svg b/assets/icons/ok.svg
deleted file mode 100755
index 149f2da..0000000
--- a/assets/icons/ok.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 18.848l5.184-5.184 5.312 5.248 16.256-16.32 5.248 5.248-21.504 21.504-5.184-5.248z" fill="#000000" />
-</svg>
diff --git a/assets/icons/paperclip.svg b/assets/icons/paperclip.svg
deleted file mode 100644
index 24f0a78..0000000
--- a/assets/icons/paperclip.svg
+++ /dev/null
@@ -1,1364 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1000px"
-	 height="1000px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
-<g id="Layer_1" display="none">
-	<g id="Layer_1_3_">
-		<g id="Layer_1_2_" display="inline">
-			
-				<g id="Layer_1_1_" inkscape:version="0.48.2 r9819" sodipodi:docname="clock_scaled.svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd">
-				
-					<sodipodi:namedview  inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1916" inkscape:window-height="1036" inkscape:guide-bbox="true" inkscape:current-layer="Layer_1" inkscape:window-x="4" inkscape:window-maximized="0" inkscape:window-y="22" inkscape:zoom="0.5" inkscape:cy="451.84046" showguides="true" pagecolor="#ffffff" inkscape:cx="500" bordercolor="#666666" objecttolerance="10" gridtolerance="10" guidetolerance="10" showgrid="false" id="namedview3067" borderopacity="1">
-					</sodipodi:namedview>
-				<g id="g3061" transform="matrix(38.592158,0,0,38.593647,-11301.328,-14803.751)">
-					<path id="path3063" inkscape:connector-curvature="0" d="M305.796,383.58c-7.155,0-12.956,5.8-12.956,12.956
-						s5.801,12.955,12.956,12.955c7.155,0,12.956-5.799,12.956-12.955S312.951,383.58,305.796,383.58z M305.796,406.252
-						c-5.358,0-9.717-4.359-9.717-9.716c0-5.358,4.359-9.716,9.717-9.716c5.357,0,9.716,4.358,9.716,9.716
-						C315.513,401.893,311.153,406.252,305.796,406.252z"/>
-					<path id="path3065" inkscape:connector-curvature="0" d="M312.081,399.439l-5.125-3.461v-5.959c0-0.142-0.057-0.28-0.158-0.382
-						c-0.101-0.1-0.239-0.158-0.382-0.158H305c-0.143,0-0.281,0.059-0.382,0.158c-0.1,0.102-0.157,0.241-0.157,0.382v7.037
-						c0,0.142,0.057,0.28,0.157,0.382c0.042,0.041,0.089,0.074,0.14,0.1l5.971,4c0.09,0.06,0.194,0.092,0.3,0.092
-						c0.038,0,0.076-0.006,0.115-0.014c0.143-0.031,0.266-0.117,0.344-0.242l0.751-1.2
-						C312.391,399.928,312.322,399.602,312.081,399.439L312.081,399.439z"/>
-				</g>
-				<g id="Fork__x2F__Knife_copy_3">
-					<g>
-						<path d="M381.613,42.025h-1.729c0.042,0.626,0.064,1.254,0.064,1.882l-0.231,283.326c0,19.722-11.172,34.556-30.2,34.556
-							c-19.022,0-36.591-15.975-36.591-35.697L312.19,42.025h-68.208l-0.736,284.067c0,19.722-17.563,35.697-36.592,35.697
-							c-19.036,0-30.2-14.834-30.2-34.556l-0.231-283.326c0-0.628,0.022-1.255,0.064-1.882h-1.606
-							c-25.212,0-45.643,24.349-45.643,54.387l-21.3,278.192c0,79.535,41.597,146.895,110.692,169.892l-41.688,320.803
-							c-7.602,66.491,37.309,128.188,101.417,128.188c64.104,0,109.024-61.695,101.417-128.188l-42.148-324.34
-							c66.515-25.826,111.129-90.562,111.129-166.355L427.256,96.412C427.256,66.374,406.825,42.025,381.613,42.025z
-							 M890.619,865.298l-43.362-333.729c14.694-43.554,11.042-104.943,11.042-162.453l-0.555-200.922
-							c0-104.363,6.568-163.113-87.494-163.113c-68.325,0-117.392,260.768-117.392,391.159c0,89.035,1.854,169.086,71.265,189.463
-							L687.785,865.3c-7.604,66.491,37.312,128.188,101.432,128.188C853.318,993.484,898.236,931.789,890.619,865.298z"/>
-					</g>
-				</g>
-				<g id="Coffee_Cup_copy_5">
-					<g>
-						<path d="M868.535,346.061c-7.253,0-14.354,2.084-21.24,5.894c0.833-14.979,1.448-30.36,1.852-46.135
-							c0.365-2.916,0.557-5.852,0.557-8.803c0-1.946-0.088-3.884-0.248-5.814c0.158-9.517,0.248-19.161,0.248-28.97h-8.771
-							c-39.521-77.244-208.016-135.284-409.9-135.284c-201.875,0-370.373,58.041-409.893,135.284h-8.77
-							c0,9.818,0.087,19.477,0.245,29.006c-0.158,1.918-0.245,3.844-0.245,5.778c0,6.584,0.282,12.913,0.834,18.998
-							C26.93,749.146,208.745,872.088,431.028,872.088c148.137,0,278.296-54.593,352.718-219.193
-							c21.369,3.397,51.458-4.771,84.796-4.771c64.82,0,117.391-67.619,117.391-151.014
-							C985.926,413.679,933.355,346.061,868.535,346.061z M426.754,389.691c-180.338,0-326.557-39.579-326.557-88.406
-							c0-48.827,146.219-88.406,326.557-88.406c180.354,0,326.557,39.579,326.557,88.406
-							C753.311,350.112,607.107,389.691,426.754,389.691z M864.684,559.48c-33.391,0-40.459,0-40.459,0
-							s9.201-137.914,42.578-137.914s60.433,33.763,60.433,75.396S898.045,559.48,864.684,559.48z"/>
-					</g>
-				</g>
-				<g id="Shape_116_1_">
-					<g>
-						<path d="M499.475,168.775c-133.939,0-428.312,29.208-428.312,243.366h856.63C927.79,197.983,633.404,168.775,499.475,168.775z
-							 M499.475,830.721c133.945,0,428.315,0,428.315-155.758H71.159C71.159,830.721,365.544,830.721,499.475,830.721z
-							 M927.79,519.221h-29.207c-25.72,0-59.904,21.068-92.987,41.476c-38.479,23.72-74.848,46.137-111.436,46.137
-							c-31.129,0-67.313-16.604-109.218-35.827c-52.896-24.262-112.877-51.779-173.075-51.779H71.159
-							c-32.246,0-58.4,26.152-58.4,58.398s26.154,58.416,58.4,58.416H927.79c32.246,0,58.399-26.17,58.399-58.416
-							S960.036,519.221,927.79,519.221z M32.231,490.012c0,0,194.686,0,379.636,0c44.261,0,87.604,13.146,127.604,29.208
-							c7.896,3.162,15.627,6.449,23.238,9.771c0.155,0.062,0.264,0.125,0.419,0.202c28.216,12.319,54.322,25.108,77.359,34.463
-							c0.419,0.187,0.853,0.341,1.271,0.512c4.79,1.923,9.487,3.736,14.016,5.317c0.188,0.073,0.355,0.124,0.562,0.195
-							c4.17,1.442,8.186,2.688,12.092,3.783c0.62,0.17,1.287,0.372,1.906,0.543c3.861,1.038,7.582,1.829,11.162,2.438
-							c0.729,0.124,1.427,0.217,2.141,0.326c3.658,0.49,7.193,0.852,10.525,0.852c3.287,0,6.666-0.354,10.093-0.883
-							c0.667-0.094,1.333-0.188,2.016-0.312c3.333-0.604,6.719-1.408,10.154-2.418c0.604-0.187,1.194-0.389,1.782-0.59
-							c3.411-1.054,6.822-2.279,10.311-3.688c0.248-0.108,0.518-0.188,0.765-0.301c3.752-1.52,7.528-3.271,11.349-5.109
-							c0.604-0.295,1.178-0.574,1.768-0.869c23.504-11.627,48.523-28.494,73.577-43.146c28.267-16.557,56.539-30.292,82.615-30.292
-							c58.398,0,68.135,0,68.135,0c10.744,0,19.477-8.712,19.477-19.472c0-10.743-8.729-19.456-19.477-19.456H32.231
-							c-10.743,0-19.472,8.713-19.472,19.456C12.759,481.3,21.488,490.012,32.231,490.012z"/>
-					</g>
-				</g>
-				<g id="Shape_91">
-					<g>
-						<path d="M215.181,491.383c86.132-179.95,201.292-274.255,274.375-319.438l-60.383-83.668c0,0-202.715,71.487-333.961,345.689
-							C-36.015,708.152,35.455,910.885,35.455,910.885l103.032-5.465C127.834,820.155,129.049,671.333,215.181,491.383z
-							 M512.146,203.229c-68.189,42.077-180.192,132.183-262.697,304.55c-82.506,172.386-82.438,316.124-72.425,395.593
-							l809.335-42.875L512.146,203.229z M423.031,717.244c-18.132,37.861-63.506,53.854-101.366,35.744
-							c-37.86-18.132-53.858-63.506-35.743-101.366c18.114-37.86,63.506-53.858,101.366-35.744
-							C425.148,634.011,441.146,679.384,423.031,717.244z M576.521,748.581c-9.062,18.931-31.725,26.946-50.666,17.872
-							c-18.947-9.062-26.936-31.753-17.872-50.666c9.058-18.913,31.729-26.946,50.684-17.872
-							C577.597,706.973,585.578,729.668,576.521,748.581z M598.21,527.266c-13.586,28.393-47.611,40.411-76.016,26.812
-							c-28.422-13.604-40.396-47.646-26.812-76.021c13.586-28.387,47.601-40.405,76.021-26.808
-							C599.824,464.853,611.796,498.879,598.21,527.266z M712.902,771.729c-28.422-13.604-40.396-47.63-26.812-76.017
-							s47.6-40.411,76.021-26.808c28.422,13.603,40.395,47.646,26.809,76.016C775.332,773.307,741.307,785.331,712.902,771.729z"/>
-					</g>
-				</g>
-				<g id="Shape_85">
-					<g>
-						<path d="M555.163,569.594c144.896-35.427,254.812-201.206,254.812-362.249h-0.025v-62.184
-							c1.183-8.377,1.684-13.05,1.684-13.05h-1.684V-1.298H187.322v208.643c0,161.518,110.663,327.983,256.389,362.614
-							c3.452,0.896,6.95,1.708,10.494,2.438v339.7c-150.878,6.167-266.851,43.172-266.851,87.901h622.621
-							c0-44.729-116.037-81.734-266.836-87.901v-339.68C547.205,571.586,551.214,570.646,555.163,569.594z M765.467,43.177
-							l0.026,88.936H231.797V43.177H765.467z"/>
-					</g>
-				</g>
-				<g id="Shape_84">
-					<g>
-						<path d="M750.273,452.651c-21.689,1.42-173.646,23.873-131.484-15.462c69.436-64.796,221.329,19.553,298.779-82.884
-							C1007.337,235.581,810.14,5.855,680.426,6.1c-98.146,13.982-146.002,96.058-157.572,186.024
-							c-17.318,134.706,1.496,183.551-35.818,47.151C442.489,76.604,376.075-46.562,208.994,73.827
-							C142.717,121.573,36.983,226.269,58.017,315.351c33.52,141.91,193.259,92.913,291.224,123.089
-							c121.457,37.396-112.069,13.646-155.037,23.477C109.258,481.332,25.55,531.002,43.256,634.188
-							c10.502,61.361,142.72,222.967,200.647,239.951c109.428,32.133,177.552-76.794,199.532-167.899
-							c28.162-116.71,48.402-145.375,36.665-1.083c-6.817,83.922-43.335,278.396,40.129,290.245
-							c61.941,0.382-16.348-302.021,4.854-374.22c24.194-82.438,41.732,90.775,55.653,120.927
-							c40.328,87.321,113.271,161.368,211.958,110.711C989.172,751.934,1040.582,433.785,750.273,452.651z"/>
-					</g>
-				</g>
-				<g id="Shape_113">
-					<g>
-						<path d="M390.73,808.576h36.259v-507.67H390.73V808.576z M535.766,808.576h36.273v-507.67h-36.273V808.576z M680.816,808.576
-							h36.271v-507.67h-36.271V808.576z M789.607,44.87c-24.037,0-46.262,7.803-64.275,20.965
-							c-26.699-34.77-68.693-57.224-115.938-57.224c-41.146,0-78.299,17.001-104.89,44.375c-12.708-5.249-26.669-8.116-41.257-8.116
-							c-22.517,0-43.451,6.831-60.844,18.567c-19.229-11.768-41.89-18.567-66.078-18.567c-70.104,0-126.906,56.801-126.906,126.921
-							c0,34.488,13.773,65.827,36.149,88.704v40.411H209.34h-36.259c0,0-72.533,0-72.533,72.518c0,72.533,0,326.361,0,326.361
-							s0,72.533,72.533,72.533c25.173,0,50.344,0,72.486,0v145.051c0,40.082,32.545,72.518,72.518,72.518h471.411
-							c40.129,0,72.533-32.436,72.533-72.518V663.525V234.829c22.312-19.947,36.369-48.904,36.369-81.167
-							C898.4,93.539,849.621,44.87,789.607,44.87z M245.569,663.525v36.259h-72.314l-0.172-1.552V373.706l1.52-0.282h34.739h36.228
-							L245.569,663.525L245.569,663.525z M789.498,409.698v217.631v217.506c0,40.082-32.404,72.533-72.518,72.533H390.62
-							c-39.988,0-72.533-32.451-72.533-72.533v-72.518c0.028,0,0.047,0,0.047,0V300.906h-0.047v-3.51
-							c5.954,0.894,12.05,1.316,18.239,1.316c37.121,0,70.512-15.983,93.729-41.398c10.498,3.321,21.607,5.14,33.188,5.14
-							c14.021,0,27.453-2.664,39.768-7.521c26.645,28.299,64.448,45.974,106.38,45.974c47.869,0,90.364-23.05,117.034-58.682
-							c17.785,12.708,39.564,20.183,63.068,20.229L789.498,409.698L789.498,409.698z"/>
-					</g>
-				</g>
-				<g id="Shape_83">
-					<g>
-						<path d="M499.475,474.65c110.623,0,200.312-27.154,200.312-71.583c0-69.062-89.699-125.049-200.322-125.049
-							c-110.595,0-200.295,55.992-200.295,125.049C299.166,447.496,388.866,474.65,499.475,474.65z M859.41,484.516
-							c0-38.002,46.492-37.02,35.742-76.509c-9.164-33.679-99.725-37.777-173.701-51.585c10.469,17.373,16.306,36.402,16.306,56.511
-							c0,58.479-89.138,96.271-227.112,96.271c-3.812,0-7.438-0.146-11.184-0.21c-3.733,0.064-7.354,0.21-11.156,0.21
-							c-137.974,0-227.14-37.791-227.14-96.271c0-20.124,5.866-39.138,16.32-56.511c-73.968,13.809-164.538,17.906-173.702,51.585
-							c-10.735,39.489,35.756,38.493,35.756,76.509c0,27.154-134.128,49.094-134.128,107.788
-							c0,96.271,371.104,129.181,494.05,129.181c122.943,0,494.078-32.908,494.078-129.181
-							C993.539,533.604,859.41,511.67,859.41,484.516z"/>
-					</g>
-				</g>
-				<g id="Shape_33">
-					<g>
-						<path d="M990.29,596.405V6.813L324.652,72.887v614.982C191.951,627.508,36.456,708.39,10.644,828.287
-							c-8.379,39.018,9.007,81.205,25.14,100.561c90.846,108.438,288.869,57.854,379.93-58.69
-							c40.396-51.712,37.012-96.895,37.012-207.709c0-130.248,0-319.392,0-465.021l409.501-33.27c0,200.781,0,457.678,0,457.678
-							c-132.719-60.36-288.215,20.521-314.029,140.419c-8.387,39.021,9.021,81.204,25.14,100.562
-							c90.854,108.438,288.896,57.867,379.931-58.695C993.657,752.402,990.29,707.226,990.29,596.405z"/>
-					</g>
-				</g>
-				<g id="Shape_86">
-					<g>
-						<path d="M91.753-1.502v1001.5h814.443V-1.502H91.753z M237.116,929.453h-74.833v-74.817h74.833V929.453z M237.116,817.229
-							h-74.833v-74.812h74.833V817.229z M237.116,705.002h-74.833v-74.814h74.833V705.002z M237.116,592.777h-74.833V517.96h74.833
-							V592.777z M237.116,480.552h-74.833v-74.833h74.833V480.552z M237.116,368.311h-74.833v-74.817h74.833V368.311z
-							 M237.116,256.086h-74.833v-74.817h74.833V256.086z M237.116,143.86h-74.833V69.044h74.833V143.86z M709.234,929.453H288.714
-							V517.96h420.521L709.234,929.453L709.234,929.453z M709.234,480.552H288.714V69.044h420.521L709.234,480.552L709.234,480.552z
-							 M835.666,929.453H760.85v-74.817h74.816V929.453L835.666,929.453z M835.666,817.229H760.85v-74.812h74.816V817.229
-							L835.666,817.229z M835.666,705.002H760.85v-74.814h74.816V705.002L835.666,705.002z M835.666,592.777H760.85V517.96h74.816
-							V592.777L835.666,592.777z M835.666,480.552H760.85v-74.833h74.816V480.552L835.666,480.552z M835.666,368.311H760.85v-74.817
-							h74.816V368.311L835.666,368.311z M835.666,256.086H760.85v-74.817h74.816V256.086L835.666,256.086z M835.666,143.86H760.85
-							V69.044h74.816V143.86L835.666,143.86z"/>
-					</g>
-				</g>
-				<g id="Shape_106">
-					<g>
-						<path d="M540.389,207.571c-45.938,0-83.215,37.308-83.215,83.232c0,45.908,37.273,83.216,83.215,83.216
-							c45.942,0,83.232-37.308,83.232-83.216C623.621,244.879,586.331,207.571,540.389,207.571z M540.439,915.974V527.209
-							L986.381,57.916L12.678,57.354L450.1,527.226h7.104v388.747c-141.174,5.779-249.681,40.401-249.681,82.27H790.12
-							C790.12,956.375,681.529,921.753,540.439,915.974z M499.138,467.993L141.495,124.339h714.572L512.446,466.923L499.138,467.993
-							z"/>
-					</g>
-				</g>
-				<g id="Shape_105">
-					<g>
-						<path d="M465.875,4.779C182.97,22.61-29.022,287.27,8.874,566.536c34.72,255.992,267.902,443.421,524.738,427.192
-							C791.934,977.453,993.128,755.486,995.46,499.26C992.912,215.2,750.186-13.168,465.875,4.779z M243.329,620.659
-							c-7.758-1.837-15.499-3.656-23.257-5.492c-39.848-9.396-56.77,51.856-16.889,61.269c7.989,1.892,15.979,3.771,23.952,5.657
-							c-1.489,4.698-3.027,9.379-4.632,14.044c-8.783-3.474-17.566-6.941-26.35-10.438c-16.111-6.401-34.853,6.848-39.07,22.197
-							c-4.962,18.062,6.104,32.687,22.198,39.088c6.567,2.597,13.15,5.188,19.717,7.808c-1.985,4.317-4.102,8.585-6.203,12.869
-							c-6.914-3.806-13.828-7.626-20.743-11.414c-7.725-4.251-15.201-4.896-21.917-3.357
-							c-24.001-33.028-43.52-69.341-57.448-107.812c-47.325-130.646-25.837-276.173,50.897-390.82
-							c2.067-3.077,4.218-6.054,6.352-9.048c6.468,1.24,13.597,0.446,20.941-3.59c7.642-4.218,15.301-8.419,22.959-12.638
-							c2.118,4.317,4.251,8.618,6.27,12.985c-6.931,2.746-13.862,5.491-20.792,8.254c-16.095,6.352-27.177,21.008-22.198,39.07
-							c4.218,15.334,22.959,28.566,39.07,22.182c9.164-3.622,18.311-7.245,27.475-10.867c1.621,4.714,3.242,9.445,4.764,14.226
-							c-8.75,2.051-17.467,4.118-26.218,6.17c-39.864,9.412-22.943,70.697,16.889,61.285c8.403-1.985,16.79-3.97,25.208-5.938
-							c0.91,4.466,1.771,8.966,2.581,13.448c-5.955,0.761-11.91,1.505-17.881,2.266c-17.187,2.184-31.776,12.819-31.776,31.776
-							c0,15.664,14.54,33.959,31.776,31.759c8.568-1.071,17.153-2.167,25.721-3.237c0.348,4.812,0.811,9.645,1.026,14.475h-26.764
-							c-40.973,0-40.973,63.552,0,63.552h26.483c-0.281,4.813-0.811,9.596-1.208,14.424c-9.958-1.271-19.932-2.525-29.89-3.787
-							c-17.203-2.185-31.775,16.1-31.775,31.774c0,18.957,14.623,29.593,31.775,31.76c7.196,0.909,14.358,1.837,21.537,2.729
-							C245.082,611.743,244.255,616.209,243.329,620.659z M722.115,869.836c-105.616,63.204-234.456,77.529-352.857,41.568
-							c-32.504-9.875-63.387-23.919-92.201-41.369c18.973-10.951,26.632-41.389,1.803-55.05
-							c-9.975-5.479-19.965-10.973-29.939-16.458c3.259-6.688,6.468-13.399,9.527-20.187c10.239,4.059,20.479,8.089,30.718,12.157
-							c16.111,6.401,34.869-6.848,39.07-22.182c4.962-18.079-6.104-32.702-22.198-39.09c-8.139-3.229-16.276-6.438-24.415-9.657
-							c2.613-7.595,5.111-15.201,7.46-22.876c9.396,2.216,18.791,4.433,28.187,6.646c39.854,9.412,56.771-51.854,16.895-61.269
-							c-9.729-2.283-19.47-4.604-29.212-6.883c1.39-6.637,2.68-13.281,3.87-19.969c10.967,1.395,21.934,2.778,32.885,4.169
-							c17.235,2.169,31.771-16.107,31.771-31.771c0-18.956-14.591-29.594-31.771-31.775c-8.188-1.021-16.376-2.062-24.581-3.094
-							c0.629-7.443,1.142-14.903,1.521-22.38h28.604c40.989,0,40.989-63.535,0-63.535h-28.16c-0.033-0.744-0.017-1.488-0.05-2.25
-							c-0.312-6.765-0.761-13.497-1.273-20.213c9.825-1.24,19.651-2.481,29.479-3.723c17.187-2.188,31.771-12.808,31.771-31.775
-							c0-15.681-14.539-33.942-31.771-31.775c-12.423,1.588-24.861,3.159-37.301,4.73c-1.18-6.731-2.438-13.431-3.821-20.081
-							c9.347-2.216,18.709-4.416,28.038-6.616c39.881-9.429,22.959-70.697-16.891-61.285c-8.97,2.117-17.945,4.251-26.934,6.368
-							c-2.398-7.741-4.929-15.416-7.592-23.025c7.758-3.076,15.532-6.153,23.29-9.213c16.095-6.386,27.16-21.024,22.198-39.087
-							c-4.223-15.334-22.959-28.584-39.07-22.198c-10.024,3.97-20.031,7.939-30.056,11.909c-3.126-6.799-6.368-13.53-9.71-20.197
-							c8.718-4.797,17.435-9.594,26.136-14.391c24.134-13.266,17.533-42.329-0.281-54.007
-							c104.789-62.374,235.3-79.263,354.977-42.889c33.691,10.223,65.318,24.646,94.48,42.527
-							c-18.162,11.463-25.105,40.973-0.761,54.371c8.701,4.797,17.418,9.594,26.119,14.391c-3.325,6.667-6.567,13.396-9.693,20.181
-							c-10.008-3.953-20.031-7.923-30.039-11.893c-16.128-6.402-34.869,6.864-39.087,22.198
-							c-4.963,18.062,6.104,32.701,22.186,39.07c7.771,3.06,15.551,6.153,23.309,9.229c-2.663,7.609-5.178,15.268-7.576,23.009
-							c-8.979-2.117-17.964-4.251-26.929-6.352c-39.864-9.412-56.786,51.84-16.895,61.269c9.329,2.2,18.691,4.417,28.021,6.617
-							c-1.373,6.649-2.646,13.332-3.807,20.064c-12.438-1.572-24.882-3.144-37.304-4.715c-17.23-2.167-31.792,16.095-31.792,31.776
-							c0,18.973,14.605,29.592,31.792,31.771c9.812,1.24,19.638,2.481,29.479,3.728c-0.517,6.716-0.979,13.442-1.274,20.213
-							c-0.03,0.745-0.03,1.483-0.062,2.25h-28.142c-41.006,0-41.006,63.534,0,63.534h28.583c0.397,7.461,0.896,14.938,1.521,22.358
-							c-8.188,1.042-16.396,2.085-24.58,3.11c-17.188,2.167-31.775,12.814-31.775,31.771c0,15.665,14.561,33.942,31.775,31.775
-							c10.967-1.389,21.934-2.778,32.884-4.168c1.19,6.683,2.48,13.332,3.871,19.948c-9.729,2.3-19.47,4.599-29.195,6.896
-							c-39.881,9.396-22.976,70.687,16.894,61.271c9.38-2.22,18.791-4.438,28.17-6.649c2.35,7.658,4.848,15.284,7.461,22.859
-							c-8.144,3.226-16.276,6.448-24.438,9.677c-16.074,6.368-27.145,21.008-22.182,39.087
-							c4.218,15.334,22.959,28.584,39.087,22.183c10.239-4.053,20.479-8.104,30.717-12.152c3.062,6.777,6.271,13.497,9.528,20.164
-							c-9.978,5.508-19.967,11-29.925,16.475C695.964,828.565,703.391,858.736,722.115,869.836z M827.417,756.264
-							c-6.914,3.811-13.846,7.626-20.76,11.414c-2.104-4.284-4.201-8.552-6.203-12.869c6.584-2.608,13.146-5.211,19.718-7.808
-							c16.111-6.385,27.177-21.023,22.198-39.087c-4.201-15.352-22.942-28.6-39.07-22.198c-8.783,3.49-17.562,6.964-26.334,10.438
-							c-1.621-4.665-3.143-9.352-4.646-14.044c7.984-1.892,15.963-3.771,23.946-5.657c39.864-9.396,22.942-70.664-16.889-61.271
-							c-7.741,1.836-15.479,3.654-23.257,5.491c-0.927-4.45-1.737-8.916-2.58-13.382c7.179-0.91,14.357-1.82,21.536-2.713
-							c17.17-2.188,31.772-12.819,31.772-31.776c0-15.681-14.559-33.959-31.772-31.771c-9.978,1.257-19.935,2.515-29.892,3.771
-							c-0.385-4.812-0.931-9.594-1.209-14.405h26.479c40.989,0,40.989-63.554,0-63.554H743.7c0.229-4.812,0.689-9.644,1.042-14.474
-							c8.562,1.075,17.137,2.167,25.722,3.242c17.236,2.194,31.776-16.101,31.776-31.765c0-18.957-14.606-29.593-31.776-31.771
-							c-5.971-0.744-11.926-1.505-17.881-2.266c0.794-4.483,1.654-8.966,2.581-13.465c8.402,1.985,16.806,3.97,25.208,5.955
-							c39.849,9.412,56.753-51.857,16.889-61.269c-8.729-2.068-17.479-4.136-26.218-6.188c1.506-4.781,3.127-9.512,4.747-14.226
-							c9.164,3.622,18.328,7.262,27.492,10.884c16.128,6.385,34.869-6.864,39.064-22.198c4.979-18.062-6.087-32.719-22.192-39.07
-							c-6.937-2.746-13.861-5.509-20.812-8.254c2.034-4.351,4.151-8.668,6.271-12.985c7.656,4.218,15.334,8.437,22.976,12.638
-							c6.933,3.821,13.729,4.797,19.916,3.838c52.271,72.881,82.541,161.812,83.385,253.812
-							c-0.811,91.897-30.089,180.525-82.651,253.604C842.535,751.368,835.075,752.029,827.417,756.264z"/>
-					</g>
-				</g>
-				<g id="Shape_89">
-					<g>
-						<path d="M710.807,331.839c-46.459-12.13-86.855-26.955-121.222-41.932c4.8,36.162,8.813,77.943,10.191,121.919
-							c33.134,2.71,67.706-13.462,67.706-13.462s-27.41,54.271-67.561,65.616c-1.09,46.41-5.812,88.401-14.144,125.729
-							c17.653-6.208,37.222-8.329,58.438-2.786c91.146,23.854,89.754,153.25,89.754,153.25s-48.05-64.465-108.771-80.271
-							c-19.812-5.164-40.917-5.136-60.438-2.808c-17.34,41.613-40.896,74.823-70.562,99.021
-							c23.271,25.938,53.026,45.598,91.354,55.637C852.865,881.537,990.778,353.02,990.778,353.02S874.143,374.482,710.807,331.839z
-							 M766.777,515.118c-54.668-14.25-50.7-104.08-50.7-104.08s28.56,39.918,64.979,49.442
-							c36.45,9.521,80.854-11.326,80.854-11.326S821.475,529.398,766.777,515.118z M543.791,176.393
-							c0,0-92.404,74.354-256.345,114.483c-163.987,40.13-280.272,16.93-280.272,16.93s129.914,530.53,398.238,464.792
-							C673.752,706.908,543.791,176.393,543.791,176.393z M155.518,491.237c0,0-2.65-89.875,52.244-103.292
-							c54.879-13.432,94.085,67.448,94.085,67.448s-44.052-21.519-80.653-12.563C184.607,451.789,155.518,491.237,155.518,491.237z
-							 M385.983,693.34c-91.481,22.381-151.875-92.087-151.875-92.087s72.96,33.876,133.942,18.929
-							c60.967-14.961,110.021-78.639,110.021-78.639S477.464,670.928,385.983,693.34z M418.087,397.999
-							c-36.768,8.087-66.782,46.899-66.782,46.899s-0.545-89.906,54.622-102.083c55.167-12.16,92.496,69.583,92.496,69.583
-							S454.87,389.868,418.087,397.999z"/>
-					</g>
-				</g>
-				<g id="Shape_120">
-					<g>
-						<path d="M812.992,241.865c-76.589,0-138.329-14.593-177.104,4.792c0,0-95.729,19.14-114.884,19.14
-							c-19.14,0-100.508-4.792-148.373-14.362c-47.863-9.57-263.27-19.141-359,23.932v52.657c0,0,19.154,14.362,23.932,19.141
-							c4.792,4.792,33.517,57.435,43.086,90.951c9.57,33.503,38.295,119.662,224.962,100.508c0,0,18.762-2.212,44.094-12.983
-							c-10.086,22.481-17.188,48.232-14.951,70.885c2.003,20.191,11.154,36.265,26.464,46.471c3.438,2.292,7.18,4.687,11.151,7.145
-							c-28.188,28.314-43.93,50.475-75.598,52.903c-41.76,3.235-53.063-22.483-46.646-40.677c6.01-17.021,36.995-2.234,40.148,5.896
-							c-1.326-7.77-8.73-42.667-36.318-45.51c-31.053-3.208-38.187,31.854-38.187,48.979s4.075,90.188,129.341,90.188
-							c83.39,0,129.389-35.084,150.829-58.539c3.355,0.46,6.545,0.729,9.47,0.729c3.208,0,6.24-0.271,8.988-0.826
-							c2.06-0.413,5.354-1.469,9.579-3.077c20.312,23.312,67.021,61.717,154.289,61.717c125.252,0,130.127-73.065,130.127-90.188
-							c0-17.123-7.178-52.188-38.217-48.979c-27.567,2.844-35.027,37.713-36.346,45.51c3.143-8.136,34.031-22.897,40.014-5.896
-							c6.444,18.188-5.062,43.912-46.816,40.677c-37.356-2.87-52.873-33.158-92.521-68.641
-							c19.869-17.592,34.096-36.749,34.096-55.205c0-16.688-7.438-34.566-17.481-51.701c24.354,6.919,87.404,21.376,147.501,6.354
-							c76.589-19.153,90.952-28.729,124.454-110.097c33.503-81.367,38.295-71.797,43.071-76.589
-							c4.794-4.778,19.15-4.778,19.15-47.865v-23.933C985.311,275.368,889.581,241.865,812.992,241.865z M602.479,611.091
-							c-46.147-21.688-91.174,10.58-91.174,10.58s-55.932-40.678-107.33,0c-0.683,0.541-1.334,1.079-2.004,1.618
-							c-6.8-3.981-13.367-8.062-19.505-12.15c-3.574-2.383-8.46-6.89-9.598-18.396c-2.992-30.279,22.254-76.75,36.454-90.95
-							c25.524-25.53,50.024-69.402,51.059-71.256l0.866-1.543l0.569-1.692c0.771-2.328,2.024-6.562,3.668-12.114
-							c1.188-4.021,2.344-7.859,3.467-11.55c6.713-14.134,8.78-23.204,9.642-30.157c3.775-11.157,7.034-19.93,9.834-26.82
-							c5.69-3.554,14.562-6.617,23.062-6.028c5.845,9.472,10.411,21.106,8.993,29.599c-4.209,25.313,14.146,54.322,36.732,86.863
-							c4.55,6.565,10.809,15.559,11.858,18.071c2.409,7.242,8.104,14.863,19.722,30.038c15.526,20.291,41.521,54.254,41.521,73.989
-							C630.317,582.206,624.613,593.302,602.479,611.091z M323.014,509.062c-47.865,9.564-201.042,38.295-229.754-119.667
-							c0,0-28.724-81.367,23.933-105.3c52.643-23.932,191.459-14.362,220.184-9.57c28.71,4.779,100.508,19.141,95.729,100.508
-							c-0.594,9.989-1.979,19.397-4.033,28.241c-0.104,0.352-0.208,0.692-0.312,1.052c-1.137,3.844-2.058,6.998-2.748,9.188
-							c-4.413,7.7-24.433,41.854-43.771,61.196c-3.58,3.581-7.604,8.454-11.758,14.292
-							C355.064,499.325,338.536,505.957,323.014,509.062z M910.48,384.647C881.754,542.605,728.59,513.894,680.725,504.309
-							c-26.891-5.376-56.806-21.323-78.707-48.698c-2.854-5.178-7.145-11.429-13.341-20.351c-0.227-0.326-0.467-0.672-0.707-1.018
-							c-9.505-17.839-15.878-39.104-17.337-63.943c-4.792-81.381,67.005-95.729,95.729-100.521
-							c28.724-4.792,167.521-14.362,220.185,9.57C939.191,303.28,910.48,384.647,910.48,384.647z"/>
-					</g>
-				</g>
-				<g id="Shape_117">
-					<g>
-						<path d="M784.293,331.32c-36.211,0-74.01,10.757-110.783,35.085c0-7.497,6.074-8.938,7.354-14.994
-							c19.146-42.747,33.018-55.026,37.48-89.78C739.395,101.432,615.869,18.585,494.18,18.585
-							c-111.544,0-221.581,69.607-217.443,213.058c1.439,51.999,34.292,89.632,37.468,127.266
-							c-35.234-19.048-69.607-27.438-101.746-27.438c-117.766,0-206.355,112.205-205.082,222.011
-							C8.817,690.711,119.003,773.47,238.375,773.47c12.759,0,25.519-0.96,38.362-2.857
-							c98.718-14.685,159.636-94.249,209.715-172.164c0.646,201.59-94.896,298.719-239.686,344.328
-							c-23.765,7.479-72.09-1.758-81.986,37.138h666.314l7.021-7.166c-89.473-39.868-177.99-47.845-239.395-112.271
-							c-60.121-62.84-78.625-146.729-89.94-262.026c45.543,108.929,158.924,168.408,264.262,168.408
-							c103.896,0,199.818-57.896,214.812-183.319C1004.137,447.415,903.102,331.32,784.293,331.32z"/>
-					</g>
-				</g>
-				<g id="Shape_35_2_">
-					<g>
-						<path d="M359.044,692.846c-38.815,0-70.215,31.398-70.215,70.229c0,38.73,31.396,70.207,70.215,70.207
-							c38.744,0,70.215-31.477,70.215-70.207C429.259,724.244,397.788,692.846,359.044,692.846z M745.225,692.846
-							c-38.795,0-70.209,31.398-70.209,70.229c0,38.73,31.414,70.207,70.209,70.207c38.75,0,70.229-31.477,70.229-70.207
-							C815.447,724.244,783.975,692.846,745.225,692.846z M201.57,271.554l-70.727-105.333H60.621
-							c-29.104,0-52.66,23.592-52.66,52.667c0,29.075,23.556,52.667,52.66,52.667h31.025l179.627,351.069h601.474l118.241-351.069
-							L201.57,271.554L201.57,271.554z M675.016,324.207c9.691,0,17.562,7.82,17.562,17.556c0,9.677-7.865,17.556-17.562,17.556
-							c-9.705,0-17.555-7.879-17.555-17.556C657.461,332.027,665.311,324.207,675.016,324.207z M639.904,394.429
-							c9.707,0,17.557,7.82,17.557,17.556c0,9.661-7.85,17.541-17.557,17.541c-9.691,0-17.561-7.879-17.561-17.541
-							C622.35,402.249,630.213,394.429,639.904,394.429z M604.809,324.207c9.691,0,17.541,7.82,17.541,17.556
-							c0,9.677-7.85,17.556-17.541,17.556c-9.707,0-17.541-7.879-17.541-17.556C587.268,332.027,595.102,324.207,604.809,324.207z
-							 M569.727,394.429c9.77,0,17.541,7.82,17.541,17.556c0,9.661-7.771,17.541-17.541,17.541c-9.678,0-17.556-7.879-17.556-17.541
-							C552.171,402.249,560.049,394.429,569.727,394.429z M464.363,324.207c9.706,0,17.556,7.82,17.556,17.556
-							c0,9.677-7.85,17.556-17.556,17.556c-9.699,0-17.548-7.879-17.548-17.556C446.815,332.027,454.665,324.207,464.363,324.207z
-							 M394.155,324.207c9.693,0,17.548,7.82,17.548,17.556c0,9.677-7.854,17.556-17.548,17.556
-							c-9.706,0-17.562-7.879-17.562-17.556C376.6,332.027,384.449,324.207,394.155,324.207z M323.933,324.207
-							c9.706,0,17.562,7.82,17.562,17.556c0,9.677-7.854,17.556-17.562,17.556s-17.556-7.879-17.556-17.556
-							C306.377,332.027,314.227,324.207,323.933,324.207z M253.718,359.318c-9.772,0-17.556-7.879-17.556-17.556
-							c0-9.735,7.784-17.556,17.556-17.556c9.699,0,17.556,7.82,17.556,17.556C271.273,351.439,263.417,359.318,253.718,359.318z
-							 M288.829,429.526c-9.706,0-17.556-7.879-17.556-17.541c0-9.735,7.85-17.556,17.556-17.556c9.699,0,17.548,7.82,17.548,17.556
-							C306.377,421.647,298.528,429.526,288.829,429.526z M323.933,499.748c-9.706,0-17.556-7.879-17.556-17.556
-							c0-9.735,7.85-17.562,17.556-17.562s17.562,7.821,17.562,17.562C341.489,491.869,333.639,499.748,323.933,499.748z
-							 M359.044,394.429c9.699,0,17.556,7.82,17.556,17.556c0,9.661-7.854,17.541-17.556,17.541
-							c-9.706,0-17.555-7.879-17.555-17.541C341.489,402.249,349.338,394.429,359.044,394.429z M359.044,569.971
-							c-9.706,0-17.526-7.894-17.526-17.556c0-9.735,7.821-17.556,17.526-17.556c9.699,0,17.556,7.814,17.556,17.556
-							C376.6,562.077,368.743,569.971,359.044,569.971z M394.155,499.748c-9.706,0-17.562-7.879-17.562-17.556
-							c0-9.735,7.854-17.562,17.562-17.562c9.693,0,17.548,7.821,17.548,17.562C411.704,491.869,403.854,499.748,394.155,499.748z
-							 M429.259,394.429c9.699,0,17.562,7.82,17.562,17.556c0,9.661-7.857,17.541-17.562,17.541
-							c-9.706,0-17.556-7.879-17.556-17.541C411.704,402.249,419.553,394.429,429.259,394.429z M429.259,569.971
-							c-9.706,0-17.519-7.894-17.519-17.556c0-9.735,7.812-17.556,17.519-17.556c9.699,0,17.562,7.814,17.562,17.556
-							C446.815,562.077,438.958,569.971,429.259,569.971z M464.363,499.748c-9.699,0-17.548-7.879-17.548-17.556
-							c0-9.735,7.85-17.562,17.548-17.562c9.706,0,17.556,7.821,17.556,17.562C481.919,491.869,474.069,499.748,464.363,499.748z
-							 M499.475,569.971c-9.705,0-17.521-7.894-17.521-17.556c0-9.735,7.815-17.556,17.521-17.556
-							c9.699,0,17.562,7.814,17.562,17.556C517.03,562.077,509.174,569.971,499.475,569.971z M499.475,429.526
-							c-9.705,0-17.556-7.879-17.556-17.541c0-9.735,7.851-17.556,17.556-17.556c9.699,0,17.562,7.82,17.562,17.556
-							C517.03,421.647,509.174,429.526,499.475,429.526z M534.586,324.207c9.706,0,17.556,7.82,17.556,17.556
-							c0,9.677-7.85,17.556-17.556,17.556s-17.556-7.879-17.556-17.556C517.03,332.027,524.88,324.207,534.586,324.207z
-							 M534.586,499.748c-9.706,0-17.526-7.879-17.526-17.556c0-9.735,7.82-17.562,17.526-17.562s17.556,7.821,17.556,17.562
-							C552.142,491.869,544.292,499.748,534.586,499.748z M569.58,569.971c-9.662,0-17.438-7.894-17.438-17.556
-							c0-9.735,7.776-17.556,17.438-17.556c9.779,0,17.57,7.814,17.57,17.556C587.15,562.077,579.359,569.971,569.58,569.971z
-							 M604.809,499.748c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.562,17.541-17.562
-							c9.691,0,17.541,7.821,17.541,17.562C622.35,491.869,614.5,499.748,604.809,499.748z M639.803,569.971
-							c-9.677,0-17.453-7.894-17.453-17.556c0-9.735,7.776-17.556,17.453-17.556c9.77,0,17.562,7.814,17.562,17.556
-							C657.358,562.077,649.566,569.971,639.803,569.971z M674.914,499.748c-9.677,0-17.453-7.879-17.453-17.556
-							c0-9.735,7.776-17.562,17.453-17.562c9.764,0,17.541,7.821,17.541,17.562C692.455,491.869,684.678,499.748,674.914,499.748z
-							 M710.127,394.429c9.691,0,17.557,7.82,17.557,17.556c0,9.661-7.859,17.541-17.557,17.541
-							c-9.705,0-17.555-7.879-17.555-17.541C692.572,402.249,700.422,394.429,710.127,394.429z M710.127,569.971
-							c-9.705,0-17.525-7.894-17.525-17.556c0-9.735,7.82-17.556,17.525-17.556c9.691,0,17.557,7.814,17.557,17.556
-							C727.684,562.077,719.818,569.971,710.127,569.971z M745.137,499.748c-9.678,0-17.453-7.879-17.453-17.556
-							c0-9.735,7.775-17.562,17.453-17.562c9.77,0,17.541,7.821,17.541,17.562C762.678,491.869,754.9,499.748,745.137,499.748z
-							 M745.225,359.318c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.556,17.541-17.556c9.705,0,17.57,7.82,17.57,17.556
-							C762.795,351.439,754.93,359.318,745.225,359.318z M780.336,569.971c-9.707,0-17.512-7.894-17.512-17.556
-							c0-9.735,7.805-17.556,17.512-17.556c9.705,0,17.555,7.814,17.555,17.556C797.891,562.077,790.041,569.971,780.336,569.971z
-							 M780.336,429.526c-9.707,0-17.512-7.879-17.512-17.541c0-9.735,7.805-17.556,17.512-17.556
-							c9.705,0,17.555,7.82,17.555,17.556C797.891,421.647,790.041,429.526,780.336,429.526z M815.447,499.748
-							c-9.707,0-17.518-7.879-17.518-17.556c0-9.735,7.811-17.562,17.518-17.562c9.705,0,17.555,7.821,17.555,17.562
-							C833.002,491.869,825.152,499.748,815.447,499.748z M815.447,359.318c-9.707,0-17.518-7.879-17.518-17.556
-							c0-9.735,7.811-17.556,17.518-17.556c9.705,0,17.555,7.82,17.555,17.556C833.002,351.439,825.152,359.318,815.447,359.318z
-							 M850.558,429.526c-9.706,0-17.521-7.879-17.521-17.541c0-9.735,7.814-17.556,17.521-17.556s17.562,7.82,17.562,17.556
-							C868.113,421.647,860.264,429.526,850.558,429.526z M885.669,359.318c-9.706,0-17.556-7.879-17.556-17.556
-							c0-9.735,7.85-17.556,17.556-17.556s17.541,7.82,17.541,17.556C903.21,351.439,895.375,359.318,885.669,359.318z"/>
-					</g>
-				</g>
-				<g id="Shape_101_2_">
-					<g>
-						<path d="M697.507,227.15c-0.096-106.755-12.133-141.453-14.778-147.828C658.545,11.063,594.662,8.856,589.37,8.787
-							c-1.097-0.027-2.193-0.027-3.263-0.027c-25.259,0-45.666,8.034-60.664,23.868c-26.336,27.803-25.486,69.945-25.295,75.086
-							v98.173l-21.062-2.262l-0.247-33.767c1.206-52.85-10.118-91.866-33.684-116.009c-22.188-22.716-48.202-24.485-55.646-24.485
-							c-0.754,0-1.396,0.027-1.858,0.041c-1.144-0.041-2.268-0.055-3.392-0.055c-27.235,0-49.773,9.13-66.979,27.104
-							c-36.426,38.043-35.042,102.697-34.835,108.62v48.161l-104.726,14.999l-0.165-0.014v625.646l453.164,136.669l0.658,0.206
-							l189.93-92.251V240.503l0.102-0.014L697.507,227.15z M282.428,240.86l-80.392-11.104l80.392-11.516V240.86z M344.038,82.16
-							c10.896-11.091,24.636-16.013,42.485-15.094l0.768,0.055l1.535-0.083c4.14,0,18.618,1.028,31.491,14.23
-							c16.104,16.506,24.109,46.584,23.149,87.055l-0.014,0.219l0.206,31.298l-38.757-4.181l-87.041,12.462v-44.254
-							C317.839,163.32,317.291,109.318,344.038,82.16z M317.839,245.727v-32.574l87.151-12.489l38.702,4.017l0.384,58.47
-							L317.839,245.727z M534.338,107.838c-0.014-0.315-1.221-31.751,16.054-50.053c8.705-9.171,20.646-13.627,36.535-13.627
-							c0.796,0,1.591,0.027,2.742,0.027c1.823,0.014,45.159,1.069,61.528,47.805l0.188,0.548
-							c0.123,0.302,11.652,32.135,11.892,130.911l-128.979-13.888l0.068-100.956L534.338,107.838z M631.25,288.98l-151.722-20.934
-							l-0.439-59.718l328.464,34.041L631.25,288.98z"/>
-					</g>
-				</g>
-				<g id="Shape_110_2_">
-					<g>
-						<path d="M575.712,422.511V159.448H422.236V422.51H159.174v153.479h263.062v263.079h153.476v-263.08h263.08V422.511H575.712z
-							 M498.975,7.371C227.754,7.371,7.097,228.028,7.097,499.248c0,271.221,220.657,491.878,491.875,491.878
-							c271.226,0,491.878-220.657,491.878-491.878C990.852,228.028,770.194,7.371,498.975,7.371z M498.975,938.018
-							c-241.938,0-438.75-196.819-438.75-438.77c0-241.927,196.808-438.752,438.75-438.752
-							c241.933,0,438.752,196.825,438.752,438.752C937.727,741.192,740.901,938.018,498.975,938.018z"/>
-					</g>
-				</g>
-				<g id="Shape_121_2_">
-					<g>
-						<path d="M821.111,934.699H177.838c-16.39,0-29.703,13.297-29.703,29.702c0,16.39,13.313,29.687,29.703,29.687h643.273
-							c16.401,0,29.703-13.297,29.703-29.687C850.814,947.996,837.518,934.699,821.111,934.699z M177.838,232.035h643.273
-							c16.401,0,29.703-13.298,29.703-29.688c0-16.39-13.302-29.687-29.703-29.687H699.994l28.389-40.229
-							c2.82,0.384,5.688,0.641,8.619,0.641c35.518,0,64.324-28.806,64.324-64.324c0-35.534-28.812-64.34-64.324-64.34
-							c-35.535,0-64.34,28.806-64.34,64.34c0,10.622,2.627,20.619,7.193,29.463l-52.555,74.449H177.838
-							c-16.39,0-29.703,13.297-29.703,29.687C148.135,218.737,161.448,232.035,177.838,232.035z M789.822,271.622
-							c-24.592,0-156.748,0-289.546,0c-0.545,0-1.062,0-1.586,0c-132.814,0-264.958,0-289.563,0
-							c-29.687,0-23.519,21.597-19.786,29.688c32.442,70.557,118.748,192.988,118.748,282.065
-							c0,89.061-86.305,211.492-118.748,282.049c-3.733,8.107-9.901,29.688,19.786,29.688c24.592,0,156.749,0,289.563,0
-							c0.523,0,1.041,0,1.586,0c132.798,0,264.938,0,289.546,0c29.688,0,23.52-21.58,19.787-29.688
-							c-32.443-70.557-118.748-192.986-118.748-282.049c0-89.077,86.305-211.509,118.748-282.065
-							C813.342,293.219,819.51,271.622,789.822,271.622z"/>
-					</g>
-				</g>
-				<g id="Shape_111_2_">
-					<g>
-						<path d="M712.756,918.966V681.912L440.343,403.979L167.916,681.912v237.039h213.345V722.109
-							c0-31.655,25.669-57.312,57.324-57.312c31.654,0,57.31,25.655,57.31,57.312v196.854L712.756,918.966L712.756,918.966z
-							 M314,835.333h-77.255v-27.805H314V835.333z M314,791.868h-77.255v-82.209H314V791.868z M438.585,580.077
-							c-17.897,0-32.396-14.513-32.396-32.396c0-17.896,14.493-32.404,32.396-32.404s32.396,14.513,32.396,32.404
-							C470.98,565.564,456.483,580.077,438.585,580.077z M563.155,709.659h77.255v82.209h-77.255V709.659z M563.155,807.528h77.255
-							v27.805h-77.255V807.528z M440.343,385.951l307.075,314.033l18.914-18.514l-228.657-233.84V238.806l-97.332-99.758
-							l-97.332,99.758v208.828L114.354,681.479l18.914,18.512L440.343,385.951z M123.812,959.482h633.063v-26.875H123.812V959.482z
-							 M871.377,338.651c-16.183-16.561-42.434-16.561-58.631,0v-16.503h-11.375v650.989H67.926v26.861h744.82V414.846
-							c16.197-16.546,42.448-16.546,58.646,0h-0.017c16.213,16.546,42.463,16.546,58.646,0v-76.208
-							C913.826,355.197,887.59,355.197,871.377,338.651z M440.343,121.078L584.191,268.18l18.896-18.508L446.038,89.046V-1.502
-							h-11.389v90.533L277.581,249.672l18.915,18.508L440.343,121.078z"/>
-					</g>
-				</g>
-				<g id="Shape_122_2_">
-					<g>
-						<path d="M67.386,225.596l403.275,331.261l460.918-331.261c28.812-23.666,57.608-43.219,0-43.219H67.386
-							C9.761,182.377,38.573,201.93,67.386,225.596z M470.661,643.277L9.761,268.798v489.714c0,28.795,29.174,57.608,52.221,57.608
-							h875.003c23.023,0,52.202-28.813,52.202-57.608V268.798L470.661,643.277z"/>
-					</g>
-				</g>
-				<g id="Shape_112_2_">
-					<g>
-						<path d="M256.099,378.068l0.094,0.094l237.603-237.603l-0.078-0.078c14.507-14.507,14.507-38.273,0-52.796
-							c-14.507-14.507-38.289-14.507-52.796,0L203.303,325.272c-14.521,14.507-14.521,38.289,0,52.795
-							C217.81,392.59,241.576,392.59,256.099,378.068z M836.928,430.896c-14.507-14.513-38.271-14.513-52.795,0l-0.146-0.15
-							l-238.9,239.321c-13.026,14.61-12.543,37.235,1.459,51.258c14.521,14.507,38.289,14.507,52.795,0L836.928,483.69
-							C851.436,469.184,851.436,445.417,836.928,430.896z M533.404,180.182l-238.112,237.08l66.428,66.434L18.511,826.916
-							c-14.507,14.507-14.507,38.289,0,52.796l26.405,26.405c14.507,14.508,38.273,14.508,52.796,0l343.21-343.229l65.612,65.612
-							l236.671-238.534L533.404,180.182z"/>
-					</g>
-				</g>
-				<g id="Shape_118_4_">
-					<g>
-						<path d="M783.93,839.049c-114.461,0-207.229,18.567-207.229,41.459c0,22.896,92.771,41.443,207.229,41.443
-							c114.444,0,207.231-18.551,207.231-41.443C991.161,857.616,898.374,839.049,783.93,839.049z"/>
-					</g>
-				</g>
-				<g id="Shape_114">
-					<g>
-						<path d="M234.065,514.635c0-60.592-49.24-109.671-109.944-109.671c-60.576,0-109.67,49.095-109.67,109.688
-							c0,60.672,49.095,109.928,109.67,109.928C184.826,624.578,234.065,575.322,234.065,514.635z M755.447,815.854
-							c-3.735-5.009-10.521-5.952-15.635-2.513L590.74,921.646c-4.831,3.857-5.926,10.781-2.479,15.635l20.337,28.227
-							c3.725,4.814,10.771,5.926,15.604,2.334l149.104-108.285c4.814-3.752,5.931-10.788,2.479-15.635L755.447,815.854z
-							 M481.069,592.633l59.062,104.275l31.108-23.234l-59.207-103.713L481.069,592.633z M433.214,431.371l-230-403.838
-							l-43.975,0.274L401.82,454.316L433.214,431.371z M908.416,628.572l-213.673-0.258c-17.021,0-31.963,7.311-44.957,16.729
-							l-165.255,116.16L370.835,648.908l158.234-115.886c24.604-20.61,27.921-57.274,7.311-81.884
-							c-20.724-24.324-57.242-27.519-81.862-7.053L207.239,620.295c-35.956,30.146-42.332,98.448-12.463,134.42l178.7,178.812
-							c0,0,48.692,63.484,128.896,5.684l227.779-160.713l178.265,0.273c41.479,0,75.083-33.479,75.083-75.104
-							C983.499,662.306,949.895,628.572,908.416,628.572z"/>
-					</g>
-				</g>
-				<g id="Shape_93">
-					<g>
-						<path d="M405.976,348.398h-2.713c-4.517,37.967-14.476,71.685-26.347,97.231h55.359
-							C422.191,418.766,411.214,389.533,405.976,348.398z M913.79,436.769h-6.649c-11.087,51.93-35.53,98.079-64.653,133.021H978.37
-							C953.593,533.028,926.648,493.038,913.79,436.769z M261.211,477.982h-6.665c-11.071,36.964-35.521,69.804-64.674,94.688
-							h135.904C300.998,546.516,274.055,518.021,261.211,477.982z M563.553,445.63h55.376c-10.1-26.864-21.078-56.097-26.312-97.231
-							H589.9C585.384,386.366,575.425,420.083,563.553,445.63z M740.154,477.982c-11.062,36.964-35.521,69.804-64.66,94.688h135.89
-							c-24.763-26.157-51.721-54.653-64.55-94.688H740.154L740.154,477.982z M89.927,436.769h-6.665
-							c-11.087,51.93-35.537,98.079-64.675,133.021h135.904C129.714,533.028,102.771,493.038,89.927,436.769z M959.96,816.63
-							l-0.096-145.108l29.405-31.853l-0.078-46.294H837.056l-0.126,15.479l-27.35,0.077v-15.556H678.914v41.166h-19.18v-31.773
-							h-55.453l-0.173,32.187h-13.189l-0.36-87.461h20.438l0.785-86.396h-41.104l-0.172,43.377h-2.854
-							c-25.249-55.797-51.68-117.163-65.442-200.516v-96.62c2.822-2.133,60.094-44.585,129.443-8.124c0,0,46.146,24.872,88.81,3.105
-							c0,0,45.307-21.768,67.92-12.17c0,0-33.215-29.529-90.707-3.387c0,0-28.59,14.694-65.161-27.993
-							c0,0-15.965-46.922-130.305-21.281v-21.391h-12.8V319.28c-12.646,70.994-34.896,134.853-61.82,185.19h-3.654v-43.377h-38.673
-							v86.396h17v87.461h-15.896v-32.187h-47.728l-0.33,21.521l-12.854-0.078l0.188-30.831H187.927l-0.031,16.043l-24.731-0.111
-							l0.188-15.932H9.743L9.68,639.669l30.487,31.854L39.289,816.63l-22.411,32.683l181.07,0.579l-16.545,32.517h216.512v-73.729
-							c0-56.062,45.872-101.92,101.92-101.92c56.065,0,101.92,45.855,101.92,101.92v73.729H827.3l-26.723-32.517l181.446-0.376
-							L959.96,816.63z"/>
-					</g>
-				</g>
-				<g id="Shape_46">
-					<g>
-						<path d="M499.475,6.066C226.821,6.066,5.793,227.095,5.793,499.748c0,272.654,221.028,493.683,493.682,493.683
-							c272.64,0,493.688-221.049,493.688-493.683C993.157,227.095,772.108,6.066,499.475,6.066z M552.809,340.471
-							c-43.812,0-79.348-35.535-79.348-79.348c0-43.832,35.536-79.347,79.348-79.367c43.812,0,79.354,35.535,79.354,79.367
-							S596.62,340.471,552.809,340.471z M728.297,512.283c-41.903,0-75.893-33.989-75.893-75.912
-							c0-41.924,33.983-75.913,75.913-75.913c41.923,0,75.892,34.01,75.892,75.913C804.209,478.294,770.24,512.283,728.297,512.283z
-							 M759.875,288.222c-32.441,0-58.757-26.314-58.757-58.757c0-32.462,26.312-58.758,58.757-58.777
-							c32.462,0,58.758,26.315,58.758,58.777C818.633,261.907,792.337,288.222,759.875,288.222z"/>
-					</g>
-				</g>
-				<g id="Shape_39">
-					<g>
-						<path d="M737.659,647.434c-95.929-96.052-72.961-253.299-238.128-262.708c-165.202,9.412-142.311,166.659-238.216,262.708
-							c-45.849,45.854-142.339,63.146-169.662,129.749c-33.486,81.729,21.563,155.638,63.04,187.503
-							c83.32,63.854,217.319,0.726,307.102-8.604c12.89-1.457,25.409-1.703,37.684-1.703c12.293,0,24.812,0.246,37.688,1.703
-							c89.782,9.324,223.781,72.452,307.155,8.604c41.423-31.865,96.484-105.773,63.021-187.503
-							C879.998,710.579,783.508,693.282,737.659,647.434z M916.031,239.942c-60.851-16.331-127.817,36.278-149.486,117.352
-							c-21.771,81.161,9.921,160.075,70.73,176.478c60.896,16.265,127.812-36.274,149.539-117.438
-							C1008.57,335.257,976.875,256.343,916.031,239.942z M161.664,533.771c60.862-16.243,92.505-95.314,70.783-176.394
-							c-21.738-81.161-88.642-133.612-149.521-117.439c-60.861,16.4-92.521,95.314-70.818,176.476
-							C33.829,497.491,100.784,550.03,161.664,533.771z M386.78,301.226c60.845-16.33,92.558-95.314,70.801-176.317
-							C435.859,43.747,368.922-8.774,308.06,7.557c-60.845,16.243-92.54,95.227-70.783,176.388
-							C258.998,264.947,325.918,317.486,386.78,301.226z M612.177,301.226c60.845,16.419,127.817-36.278,149.539-117.281
-							C783.473,102.784,751.742,23.8,690.88,7.557c-60.845-16.331-127.765,36.19-149.485,117.352
-							C519.637,205.911,551.367,284.895,612.177,301.226z"/>
-					</g>
-				</g>
-				<g id="Shape_44">
-					<g>
-						<path d="M990.266,292.161c-17.127-40.57-74.188-60.328-155.67-60.328c-26.521,0-55.731,2.232-86.937,6.484
-							c-11.056-10.418-22.771-20.151-35.021-29.199c-59.725-44.02-133.453-70.339-213.292-70.339
-							c-182.146,0-332.34,135.201-356.632,310.616c-2.12,15.028-3.57,30.244-3.792,45.784
-							C38.688,573.894-13.954,652.318,8.704,706.026c17.098,40.538,74.316,60.267,155.641,60.267
-							c43.958,0,95.437-6.096,151.138-17.5c78.441-16.029,165.683-42.844,255.332-80.646
-							c89.318-37.688,169.428-81.309,235.613-126.158C940.66,450.927,1016.617,354.732,990.266,292.161z M855.127,425.752
-							c-0.837,0.754-1.699,1.508-2.549,2.262c-0.135-0.674-0.29-1.34-0.43-2.013C564.775,663.979,193.526,705.547,193.526,705.547
-							l-1.118-2.656c-9.639,0.562-19.012,0.861-28.063,0.861c-72.954,0-96.256-17.701-98.066-22.018
-							c-5.97-14.126,19.074-56.812,79.866-110.773c8.521,42.203,24.37,81.721,46.229,117.172
-							c433.799-86.588,628.037-275.378,650.335-298.326c-10.709-33.727-26.232-65.312-45.833-93.919
-							c13.067-0.986,25.674-1.515,37.72-1.515c0,0,0,0,0.107,0c72.877,0,96.07,17.686,97.896,22.095
-							C934.596,321.218,929.289,359.374,855.127,425.752z M285.744,789.115c59.771,44.159,133.53,70.603,213.602,70.603
-							c182.083,0,332.355-135.294,356.648-310.802c-76.869,52.112-169.876,102.771-273.684,146.527
-							C478.179,739.37,376.879,770.502,285.744,789.115z"/>
-					</g>
-				</g>
-				<g id="Shape_51_2_">
-					<g>
-						<path d="M163.088,425.002V761.38h112.126V425.002H163.088z M349.968,425.002V761.38h112.134V425.002H349.968z
-							 M536.855,425.002V761.38H648.98V425.002H536.855z M723.727,425.002V761.38h112.127V425.002H723.727z M88.335,836.143h822.279
-							v-37.381H88.335V836.143z M13.582,873.508v37.38h971.794v-37.38H13.582z M947.995,350.242L536.855,88.609H499.47H462.1
-							L50.962,350.242v37.38h897.033V350.242z"/>
-					</g>
-				</g>
-				<g id="Shape_97_2_">
-					<g>
-						<path d="M982.645,782.662c-35.586-42.6-73.823-86.88-82.422-145.84c-8.604-58.979,16.275-106.413,38.229-157.382
-							l-12.622-86.656c-35.585-42.583-72.782-79.608-81.374-138.534c-8.593-58.978,15.229-113.685,37.18-164.671l-12.623-86.64
-							L786.49,14.978C745.43,46.722,696.075,68.691,641.111,76.7c-54.947,8.009-108.522,1.046-156.891-17.682l-91.692,13.377
-							c-40.953,31.727-95.458,54.45-150.385,62.459c-54.913,7.991-108.54,1.046-156.885-17.682l-82.575,12.04l12.622,86.64
-							c37.867,43.457,77.242,85.371,86.177,146.681c8.936,61.258-18.093,104.062-41.981,156.521l12.622,86.657
-							c37.866,43.371,76.195,78.134,85.13,139.393c8.918,61.24-17.047,111.354-40.936,163.812l12.639,86.64l86.623-12.639
-							c42.41-35.104,82.129-57.485,140.54-66.009c58.429-8.507,112.073,0.343,162.682,21.812l91.698-13.354
-							c42.377-35.036,86.194-58.085,144.604-66.592c58.407-8.522,102.859,1.572,153.541,23.135l86.617-12.622L982.645,782.662z
-							 M313.965,747.402l-63.145-433.18l433.167-63.128l63.145,433.188L313.965,747.402z"/>
-					</g>
-				</g>
-				<g id="Shape_53_2_">
-					<g>
-						<path d="M421.637,110.541C162.155,110.541,6.478,318.12,6.478,421.91c0,103.789,51.903,181.628,155.676,181.628
-							c103.79,0,155.693,25.935,155.693,103.789c0,103.79,77.838,181.628,181.627,181.628
-							c337.321,0,492.997-181.628,492.997-363.256C992.472,214.33,733.006,110.541,421.637,110.541z M175.13,499.748
-							c-35.812,0-64.863-29.034-64.863-64.862s29.051-64.862,64.863-64.862c35.828,0,64.862,29.034,64.862,64.862
-							S210.958,499.748,175.13,499.748z M356.758,344.071c-35.828,0-64.862-29.05-64.862-64.879
-							c0-35.828,29.034-64.862,64.862-64.862s64.879,29.034,64.879,64.862C421.637,315.021,392.586,344.071,356.758,344.071z
-							 M499.475,785.165c-42.981,0-77.838-34.851-77.838-77.838s34.854-77.854,77.838-77.854c42.988,0,77.845,34.867,77.845,77.854
-							S542.463,785.165,499.475,785.165z M564.354,344.071c-35.845,0-64.879-29.05-64.879-64.879
-							c0-35.828,29.034-64.862,64.879-64.862c35.802,0,64.852,29.034,64.852,64.862
-							C629.199,315.021,600.149,344.071,564.354,344.071z M771.917,447.845c-35.829,0-64.879-29.032-64.879-64.862
-							c0-35.828,29.05-64.862,64.879-64.862c35.828,0,64.879,29.034,64.879,64.862C836.796,418.812,807.745,447.845,771.917,447.845
-							z"/>
-					</g>
-				</g>
-				<g id="Shape_81_2_">
-					<g>
-						<path d="M499.475,197.479c0,0-120.918-120.918-483.637-120.918v725.473c366.501,0,483.637,120.896,483.637,120.896
-							s117.141-120.896,483.643-120.896V76.561C620.393,76.561,499.475,197.479,499.475,197.479z M439.024,761.643
-							c-54.323-28.685-148.593-64.25-302.292-77.223V197.479c153.695,12.854,247.965,48.401,302.292,77.206V761.643z
-							 M862.211,684.42c-153.745,13.007-248.015,48.538-302.286,77.224V274.686c54.271-28.805,148.541-64.353,302.286-77.206V684.42
-							z"/>
-					</g>
-				</g>
-				<g id="Shape_1_2_">
-					<g>
-						<path d="M350.242,117.661c16.812,0,30.574-13.033,31.803-29.534c0.6-1.85-23.154-82.915-30.185-82.915h-3.153
-							c-7.021,0-30.815,80.77-30.29,82.515C319.458,104.429,333.289,117.661,350.242,117.661z M737.678,632.005l-55.999-63.646
-							c-0.841-0.988-1.934-1.65-3.062-2.081c-0.831-0.295-1.729-0.494-2.618-0.494c-1.775,0-3.573,0.604-5.014,1.882l-64.658,56.85
-							l-4.229,3.709l-17.005,14.973v-98.229v-3.352c0-4.699,3.808-8.503,8.503-8.503c4.698,0,8.502,3.804,8.502,8.503v3.352v71.943
-							l63.267-55.61c2.938-2.584,6.702-4.005,10.625-4.005c0.895,0,1.766,0.084,2.604,0.242V477.85
-							c0-25.046-20.001-45.356-44.71-45.356H403.434c-8.04,0-15.276-5.58-17.205-13.074v-53.561l35.451,2.188
-							c6.527,30.931,33.975,54.138,66.834,54.138c32.854,0,60.297-23.207,66.834-54.117l47.999-2.964
-							c5.876,0,10.626-4.771,10.626-10.637c0-5.843-4.75-10.604-10.342-10.604c0,0,0,0-0.021,0l-48.017-2.954
-							c-1.546-8.051-4.478-15.597-8.598-22.365l32.854-34.306c1.944-1.786,2.854-4.445,2.491-7.293
-							c-0.284-2.354-1.419-4.709-3.163-6.59c-2.261-2.429-5.256-3.815-8.193-3.815c-2.139,0-4.12,0.756-5.37,1.934l-37.006,30.059
-							c-7.269-5.266-15.576-9.133-24.572-11.215l-4.32-69.808c0-5.844-4.771-10.625-10.636-10.625
-							c-5.854,0-10.605,4.771-10.605,10.342l-4.309,69.808c-9.406,2.018-18.098,5.949-25.613,11.394l-36.698-29.765
-							c-1.479-1.367-3.479-2.123-5.595-2.123c-2.953,0-5.946,1.387-8.208,3.826c-1.755,1.892-2.88,4.226-3.164,6.58
-							c-0.336,2.848,0.567,5.507,2.312,7.115l32.886,34.315c-4.149,6.811-7.125,14.431-8.681,22.534l-35.209,2.176V233.8
-							c0-13.41-6.896-25.182-17.341-32.024l7.767-40.559c0-0.873-0.084-1.734-0.188-2.564c5.748-0.294,10.312-4.436,10.312-9.533
-							v-11.992c0-5.297-4.908-9.606-10.961-9.606H323.79c-6.054,0-10.962,4.299-10.962,9.606v11.992
-							c0,5.108,4.572,9.239,10.311,9.533c-0.104,0.83-0.188,1.691-0.188,2.564l7.41,38.625
-							c-12.275,6.369-20.688,19.18-20.688,33.958v632.72c-10.09,0.945-17.973,9.42-17.973,19.738v22.428h-8.397
-							c-13.212,0-23.932,8.896-23.932,19.854v45.233c0,10.948,10.72,19.846,23.932,19.846h330.06
-							c13.223,0,23.938-8.896,23.938-19.846V928.54c0-10.963-10.71-19.854-23.938-19.854H605v-22.428
-							c0-10.962-8.87-19.842-19.844-19.842h-0.062V700.741l17.551,19.969l14.932,16.943c1.492,1.702,3.594,2.569,5.69,2.569
-							c1.786,0,3.573-0.614,5.003-1.897l50.365-44.271l58.372-51.331C740.158,639.973,740.452,635.159,737.678,632.005z
-							 M633.899,744.747c-2.927,2.554-6.679,3.962-10.558,3.995c5.145,2.553,10.899,4.021,17.025,4.021
-							c21.127,0,38.269-17.132,38.269-38.257l-0.01-9.123L633.899,744.747z"/>
-					</g>
-				</g>
-				<g id="Shape_98_2_">
-					<g>
-						<path d="M574.609,257.319c12.188-18.391,24.771-35.099,38.358-51.091c7.396-8.646,14.326-16.209,21.179-23.155
-							c8.356-8.496,15.903-15.442,21.284-19.624c1.521-1.199,3.114-2.632,4.447-4.081c6.769-7.279,10.295-16.775,9.912-26.703
-							c-0.367-9.929-4.598-19.124-11.878-25.888c-14.492-13.427-39.113-12.561-52.657,2.066
-							c-9.628,10.378-16.042,18.907-24.065,29.818c-6.696,9.278-13.243,19.057-20.013,29.951
-							c-12.261,19.808-23.536,40.764-33.5,62.286c-10.428,22.389-18.688,44.095-25.271,66.4
-							c-5.298,18.308-11.628,42.862-13.493,70.415c-0.566,8.229,5.047,15.759,13.076,17.542c1.217,0.266,2.433,0.399,3.682,0.399
-							c7.796,0,14.676-5.53,16.525-13.894c3.932-17.591,11.022-37.465,21.104-59.087
-							C552.021,294.085,562.565,275.444,574.609,257.319z M689.303,325.836l-6.479,2.016c-23.561,7.246-45.211,15.626-66.217,25.688
-							c-17.158,8.329-39.614,20.073-61.309,37.098c-6.348,4.981-8.13,14.026-4.182,21.04c2.915,5.197,8.429,8.435,14.376,8.435
-							c2.812,0,5.614-0.732,8.746-2.471c15.573-8.763,35.133-16.759,58.104-23.738c19.341-5.831,40.27-10.412,62.169-13.61
-							c20.846-3.065,41.663-4.831,63.688-5.397c10.523-0.267,21.021,0.15,31.351,0.616c6.58,0.317,19.524,2.716,27.271,4.148
-							c4.108,0.75,7.046,1.216,8.439,1.249c22.272,0,37.415-12.743,37.665-31.684c0.316-21.356-19.474-31.968-36.479-34.566
-							c-12.729-1.949-39.53-6.047-70.521-3.398C728.7,313.542,708.677,319.789,689.303,325.836z M858.985,562.585
-							c-10.628-9.412-19.273-15.625-30.368-23.388c-9.412-6.52-19.357-12.827-30.368-19.357
-							c-19.974-11.728-41.18-22.556-63.036-32.101c-22.639-9.912-44.511-17.708-66.967-23.822
-							c-27.836-7.379-49.042-10.944-71.647-11.96c-8.273,0-15.403,5.896-16.985,14.01c-1.816,9.361,4.312,18.479,14.486,20.479
-							c17.681,3.465,37.721,10.045,59.487,19.521c18.729,8.185,37.615,18.229,56.089,29.836
-							c18.624,11.646,35.649,23.738,52.074,36.998c8.846,7.146,16.575,13.859,23.688,20.523
-							c8.529,7.963,15.858,15.521,20.189,20.756c1.167,1.433,2.683,3.016,4.132,4.298c6.797,6.014,15.542,9.296,24.604,9.296
-							c10.688,0,20.854-4.598,27.896-12.594c6.58-7.446,9.862-17.025,9.246-26.953C870.88,578.229,866.432,569.132,858.985,562.585z
-							 M658.701,831.269c18.724-2.382,31.451-20.021,29.686-41.062c-0.017-16.092-2.349-27.887-4.896-38.281
-							c-1.2-4.695-2.021-9.361-2.832-13.993c-1.199-6.69-2.438-13.604-4.715-20.557c-7.246-21.938-16.075-44.012-26.236-65.65
-							c-10.445-22.271-21.773-42.546-34.667-61.98c-10.661-15.825-25.438-36.438-45.294-55.479
-							c-5.683-5.497-15.126-5.997-21.356-1.229c-3.515,2.665-5.764,6.547-6.347,10.895c-0.583,4.364,0.566,8.685,3.682,12.744
-							c10.911,14.312,21.562,32.566,31.651,54.256c8.562,18.562,16.025,38.632,22.139,59.654
-							c6.047,20.539,10.745,40.93,14.326,62.285c1.604,9.562,2.882,19.724,3.938,31.118c0.933,9.846,0.578,33.111,0.562,34.11
-							c-0.134,9.185,2.965,17.242,8.962,23.322c6.381,6.48,15.859,10.178,25.973,10.178
-							C655.069,831.604,656.886,831.502,658.701,831.269z M196.78,307.345c2.798,0,5.313-0.233,7.479-0.732
-							c9.545-2.199,23.105-4.082,27.869-4.365c10.212-0.6,20.69-0.35,31.201,0.767c20.557,2.116,41.846,7.812,61.503,16.476
-							c20.673,9.361,40.396,20.973,58.654,34.482c20.34,15.176,36.526,31.318,47.41,47.644c2.979,4.464,7.979,7.13,13.354,7.13
-							c2.398,0,4.73-0.517,6.896-1.55c3.858-1.854,6.773-5.063,8.212-9.102c1.433-4.042,1.197-8.375-0.649-12.243
-							c-12.993-27.237-31.201-47.544-47.354-63.952c-18.312-18.107-38.813-34.399-61.021-48.676
-							c-23.505-14.76-48.875-25.471-75.379-32.268c-13.577-3.498-27.47-4.348-41.33-5.563c-6.763-0.6-13.593,1.083-21.422,1.083
-							c-0.034,0-0.051,0-0.084,0c-7.629,0-24.721-1.999-34.149,1.249c-9.428,3.248-16.642,10.145-20.657,19.29
-							c-3.998,9.162-4.198,19.058-0.566,28.353C162.713,300.665,181.671,307.361,196.78,307.345z M436.278,518.273
-							c-0.483-9.278-8.13-15.358-18.357-15.358c-0.034,0-0.051,0-0.062,0c-25.604,0-50.823,6.13-77.132,16.975
-							c-24.688,10.245-48.061,24.394-67.602,42.602c-19.39,17.891-36.165,37.896-51.274,61.369
-							c-7.113,11.095-13.727,22.733-19.69,34.85c-5.53,11.527-10.911,23.122-15.858,38.812c-0.517,1.636-0.999,3.611-1.266,5.312
-							c-1.55,9.812,0.799,19.624,6.613,27.67c5.847,8.029,14.442,13.327,24.271,14.876c1.981,0.316,3.931,0.483,5.88,0.483
-							c18.357,0,33.8-13.183,36.682-31.336c1.217-7.479,4.115-18.439,7.713-29.284c3.582-10.628,7.613-20.74,12.027-30.138
-							c9.129-19.737,20.923-38.578,34.167-54.604c13.776-16.792,29.618-30.318,48.376-41.479
-							c19.096-11.312,40.58-19.227,61.354-23.225C430.681,534.133,436.761,526.953,436.278,518.273z M488.552,543.461
-							c-8.429-5.062-20.4-2.032-25.454,6.397c-14.188,23.688-22.788,46.594-29.335,65.896c-7.33,22.089-12.96,44.661-17.208,69.032
-							c-4.099,23.487-6.812,47.144-8.079,70.312c-0.684,12.85-0.896,24.621-0.694,36.065c0.277,11.411,0.6,23.222,2.665,38.215
-							c0.25,1.732,0.667,3.698,1.166,5.38c4.632,15.692,19.291,26.672,35.666,26.672c3.548,0,7.097-0.518,10.522-1.55
-							c19.657-5.812,30.938-26.555,25.154-46.228c-2.615-8.779-4.798-21.506-5.864-28.286c-1.532-9.712-2.781-20.174-3.715-31.104
-							c-1.749-21.09-2.231-41.979-1.466-63.812c0.75-21.756,3.032-42.995,6.729-63.056c4.314-23.173,10.045-43.326,17.441-60.732
-							C499.713,558.204,496.48,548.226,488.552,543.461z M673.644,874.131c-3.798,0-7.606,0.5-11.311,1.5
-							c-11.161,3.031-20.457,10.194-26.204,20.206s-7.246,21.673-4.215,32.8c5.064,18.791,22.206,31.938,41.68,31.938
-							c3.814,0,7.603-0.499,11.312-1.499c22.982-6.214,36.646-30.002,30.418-53.008
-							C710.242,887.258,693.101,874.131,673.644,874.131z M915.374,607.446c-23.389,4.598-38.681,27.354-34.1,50.741
-							c3.965,20.224,21.771,34.916,42.379,34.916c2.749,0,5.547-0.271,8.357-0.834c11.312-2.22,21.105-8.717,27.535-18.289
-							c6.437-9.579,8.746-21.106,6.52-32.418C961.602,618.624,939.296,602.782,915.374,607.446z M985.706,307.778
-							c-7.563-8.713-18.074-13.96-29.604-14.776c-24.006-1.865-44.489,16.525-46.155,40.063
-							c-0.806,11.511,2.914,22.655,10.479,31.368c7.579,8.729,18.091,13.977,29.604,14.775c1.028,0.084,2.05,0.101,3.081,0.101
-							c22.568,0,41.479-17.642,43.062-40.164C996.982,327.651,993.252,316.507,985.706,307.778z M722.636,105.028
-							c2.732,0,5.521-0.25,8.296-0.8c23.355-4.547,38.688-27.27,34.15-50.658c-4.448-22.955-27.054-38.797-50.642-34.183
-							c-11.328,2.183-21.123,8.662-27.604,18.241c-6.446,9.562-8.795,21.072-6.597,32.417
-							C684.172,90.319,702.013,105.028,722.636,105.028z M78.355,323.637c3.415,0,6.83-0.399,10.162-1.199
-							c23.172-5.581,37.464-28.969,31.901-52.141c-4.698-19.49-21.973-33.101-41.996-33.101c-3.398,0-6.813,0.417-10.145,1.216
-							c-11.228,2.699-20.723,9.596-26.737,19.457c-6.03,9.846-7.863,21.439-5.147,32.668
-							C41.074,310.027,58.349,323.637,78.355,323.637z M180.354,759.055c-6.68,0-13.093,1.521-19.124,4.498
-							c-10.345,5.103-18.091,13.959-21.789,24.871c-3.698,10.944-2.916,22.672,2.215,33c7.312,14.859,22.156,24.104,38.747,24.104
-							c6.681,0,13.11-1.521,19.107-4.498c10.361-5.08,18.107-13.942,21.806-24.871c3.715-10.928,2.916-22.655-2.182-33
-							C211.806,768.316,196.946,759.055,180.354,759.055z M434.762,894.454c-3.798,0-7.606,0.517-11.311,1.517
-							c-22.989,6.214-36.648,29.984-30.418,52.979c5.062,18.842,22.205,31.968,41.679,31.968c3.798,0,7.613-0.499,11.312-1.499
-							c11.128-3.016,20.438-10.211,26.187-20.207c5.747-9.994,7.247-21.639,4.231-32.815
-							C471.344,907.581,454.202,894.454,434.762,894.454z M163.08,513.493c0.833-1.283,4.364-5.271,8.163-8.979
-							c3.515-3.479,7.313-6.796,11.228-10.022c7.962-6.53,16.608-12.35,25.67-17.593c17.858-10.382,38.415-18.156,59.354-22.688
-							c21.256-4.398,43.095-6.229,64.901-6.229h2.729c25.305,0,47.812,3.447,66.234,10.229c7.546,2.799,16.541-1.049,20.39-8.195
-							c4.331-8.062,1.299-18.125-6.78-22.473c-26.67-14.312-53.474-19.956-76.262-23.638c-25.571-3.805-51.625-4.887-78.095-3.271
-							c-27.687,1.982-54.64,8.163-80.094,18.374c-13.043,5.231-25.671,11.528-37.515,18.708c-6.43,3.881-12.26,7.796-18.891,12.71
-							c-5.597,4.248-10.445,7.936-17.225,14.693l-1.816,1.812c-1.849,1.866-3.498,3.915-4.848,6.063
-							c-11.161,17.325-6.146,40.497,11.161,51.675c6.047,3.897,13.044,5.964,20.224,5.964
-							C144.406,530.635,156.167,524.254,163.08,513.493z M73.841,534.232c-17.542-14.849-46.077-12.493-60.903,4.979
-							c-15.425,18.174-13.21,45.479,4.964,60.953c7.813,6.597,17.741,10.244,27.953,10.244c12.727,0,24.738-5.547,32.951-15.259
-							C94.231,576.995,91.982,549.675,73.841,534.232z"/>
-					</g>
-				</g>
-				<g id="Shape_96_2_">
-					<g>
-						<path d="M908.312,213.563h-49.065c0-18.053-14.639-32.709-32.709-32.709h-32.71c-18.053,0-32.71,14.656-32.71,32.709H450.41
-							c-32.71,0-32.71-81.773-65.402-81.773H205.121c-32.71,0-32.71,81.773-65.419,81.773H90.638
-							c-45.142,0-81.758,36.616-81.758,81.774v490.595c0,45.159,36.616,81.774,81.758,81.774h817.674
-							c45.142,0,81.758-36.615,81.758-81.774V295.338C990.069,250.18,953.453,213.563,908.312,213.563z M335.943,344.402
-							c0,18.054-14.646,32.693-32.71,32.693h-98.112c-18.07,0-32.71-14.64-32.71-32.693v-16.354c0-18.053,14.64-32.71,32.71-32.71
-							h98.112c18.07,0,32.71,14.64,32.71,32.71V344.402z M663.023,785.95c-135.458,0-245.312-109.865-245.312-245.312
-							c0-135.459,109.854-245.307,245.312-245.307c135.438,0,245.289,109.848,245.306,245.307
-							C908.329,676.104,798.465,785.95,663.023,785.95z M663.023,360.758c-99.336,0-179.893,80.534-179.893,179.889
-							c0,99.339,80.557,179.89,179.893,179.89c99.335,0,179.886-80.555,179.886-179.89
-							C842.909,441.292,762.358,360.758,663.023,360.758z"/>
-					</g>
-				</g>
-				<g id="Shape_117_2_">
-					<g>
-						<path d="M499.504,304.683c-107.706,0-195.04,87.334-195.04,195.049c0,107.658,87.334,195.048,195.04,195.048
-							c107.714,0,195.049-87.386,195.049-195.048C694.553,392.017,607.218,304.683,499.504,304.683z M499.504,207.15
-							c26.941,0,48.768-21.809,48.768-48.75V60.868c0-26.991-21.82-48.767-48.768-48.767c-26.925,0-48.758,21.775-48.758,48.767
-							V158.4C450.746,185.342,472.579,207.15,499.504,207.15z M740.877,307.107c12.49,0,24.965-4.717,34.481-14.234l68.941-68.997
-							c19.058-19.001,19.058-49.862,0-68.964c-19.051-19.051-49.896-19.051-68.941,0l-68.946,68.964
-							c-19.052,19.035-19.052,49.896,0,68.997C715.929,302.391,728.42,307.107,740.877,307.107z M938.367,451.015h-97.532
-							c-26.925,0-48.767,21.858-48.767,48.771c0,26.938,21.842,48.749,48.767,48.749h97.532c26.924,0,48.766-21.812,48.766-48.749
-							C987.133,472.873,965.291,451.015,938.367,451.015z M775.259,706.722c-19.034-19.051-49.896-19.051-68.946,0
-							c-19.052,19.002-19.052,49.863,0,68.897l68.946,68.964c9.534,9.518,22.009,14.334,34.482,14.334
-							c12.473,0,24.941-4.816,34.479-14.334c19.035-19.001,19.035-49.862,0-68.964L775.259,706.722z M499.362,792.346
-							c-26.925,0-48.771,21.858-48.771,48.771v97.516c0,26.958,21.843,48.771,48.771,48.771c26.934,0,48.759-21.812,48.759-48.771
-							v-97.516C548.121,814.204,526.296,792.346,499.362,792.346z M223.508,706.539l-68.956,68.947
-							c-19.043,19.052-19.043,49.896,0,68.997c9.526,9.517,22,14.229,34.482,14.229c12.474,0,24.948-4.718,34.474-14.229
-							l68.955-68.997c19.044-19.002,19.044-49.862,0-68.947C273.412,687.488,242.551,687.488,223.508,706.539z M206.865,499.632
-							c0-26.958-21.834-48.767-48.758-48.767H60.583c-26.933,0-48.766,21.809-48.766,48.767c0,26.907,21.833,48.771,48.766,48.771
-							h97.524C185.031,548.396,206.865,526.539,206.865,499.632z M223.699,292.724c9.525,9.534,21.999,14.334,34.474,14.334
-							c12.474,0,24.956-4.8,34.481-14.334c19.043-19.002,19.043-49.846,0-68.897l-68.955-68.947
-							c-19.052-19.051-49.904-19.051-68.956,0c-19.043,18.985-19.043,49.847,0,68.947L223.699,292.724z"/>
-					</g>
-				</g>
-				<g id="Shape_118_2_">
-					<g>
-						<path d="M122.342,411.566l-63.774-36.168c-16.408-9.309-37.265-3.55-46.574,12.858c-9.309,16.423-3.55,37.28,12.874,46.589
-							l78.339,44.41v355.938c0,30.182,24.467,54.664,54.648,54.664c30.196,0,54.664-24.482,54.664-54.664v-144.17L315.95,863.24
-							c0,0.023,0,0.045,0.015,0.076c15.525,25.863,49.104,34.264,75.002,18.708c25.869-15.54,34.27-49.118,18.729-75.003
-							l-89.78-149.477h206.892v177.646c0,30.182,24.472,54.659,54.663,54.659c30.187,0,54.663-24.479,54.663-54.659V656.287
-							c7.938-2.818,13.666-10.346,13.666-19.242V493.562l0.274-0.29L458.26,411.567L122.342,411.566L122.342,411.566z
-							 M854.737,329.586v27.316h136.659v-27.316H854.737z M946.422,201.398l-118.529,68.04l13.605,23.69l118.529-68.025
-							L946.422,201.398z M846.754,107.642L778.9,226.247l23.722,13.574l67.854-118.605L846.754,107.642z M759.122,261.256
-							l-68.36-109.312L566.84,290.462l-67.369-15.54l17.749,71.011l-29.922,33.441l191.733,81.69L772.758,356.9h-68.312
-							L759.122,261.256z M629.273,315.92c-11.311,0-20.512-9.171-20.512-20.491c0-11.319,9.201-20.491,20.512-20.491
-							c11.314,0,20.506,9.172,20.506,20.491C649.779,306.733,640.608,315.92,629.273,315.92z"/>
-					</g>
-				</g>
-				<g id="Shape_95">
-					<g>
-						<polygon points="873.006,752.66 961.497,752.66 853.963,627.225 914.485,627.225 808.624,509.64 843.943,509.64 
-							773.369,415.568 702.828,509.64 738.163,509.64 632.334,627.225 692.824,627.225 585.322,752.66 673.797,752.66 
-							561.825,893.695 726.325,893.695 726.325,979.982 820.381,979.982 820.381,893.695 985.043,893.695 						"/>
-					</g>
-				</g>
-				<g id="Shape_95_copy">
-					<g>
-						<polygon points="548.556,594.094 700.688,594.094 515.826,378.479 619.87,378.479 437.886,176.311 498.617,176.311 
-							377.284,14.593 255.983,176.311 316.746,176.311 134.811,378.479 238.79,378.479 53.992,594.094 206.092,594.094 
-							13.606,836.566 296.401,836.566 296.401,984.904 458.104,984.904 458.104,836.566 741.171,836.566 						"/>
-					</g>
-				</g>
-				<g id="Shape_57">
-					<g>
-						<path d="M785.441,512.893c-106.83,0-194.191,87.363-194.191,194.182c0,106.83,87.361,194.188,194.191,194.188
-							c106.825,0,194.489-87.356,194.489-194.188C979.936,600.256,892.271,512.893,785.441,512.893z M785.441,832.154
-							c-69.504,0-125.086-55.564-125.086-125.086c0-69.504,55.582-125.069,125.086-125.069S910.83,637.564,910.83,707.068
-							C910.83,776.59,854.945,832.154,785.441,832.154z M487.812,229.889c33.896-18.909,46.146-61.763,27.211-95.679
-							c-13.021-23.338-37.268-36.257-62.229-35.971c-11.342,0.144-22.876,3.154-33.454,9.062
-							c-33.868,18.909-46.146,61.763-27.209,95.694C411.061,236.915,453.945,248.798,487.812,229.889z M530.284,612.012
-							L673.18,507.891c5.932-5.146,9.908-12.276,11.27-20.021c1.338-7.71,0.047-15.979-3.766-22.829L561.857,252.096
-							c-2.994-5.433-7.455-10.021-12.823-13.143c-5.368-3.106-11.613-4.764-17.826-4.684c-5.799,0.144-11.55,1.769-16.567,4.684
-							c-4.923,2.788-9.155,6.802-12.188,11.581l-82.248,132.573l-110.063,58.48c-4.231,1.96-8.156,4.668-11.263,8.141
-							c-3.107,3.479-5.385,7.773-6.882,12.188c-1.497,4.429-2.246,9.112-1.879,13.764c0.382,4.652,1.896,9.32,4.062,13.446
-							c2.183,4.126,5.13,7.694,8.762,10.625c3.632,2.931,8.013,5.001,12.505,6.261c4.493,1.258,9.144,1.863,13.764,1.242
-							c4.62-0.604,9.128-2.295,13.126-4.684l118.522-62.862c5.336-2.819,9.925-7.073,13.126-12.187l56.298-90.692l76.604,137.289
-							L469.92,572.932c-4.636,3.983-8.027,9.208-10.004,15.013c-1.976,5.777-2.484,12.139-1.259,18.129l42.853,209.813
-							c0.748,4.571,2.501,8.922,5.002,12.823c2.485,3.92,5.863,7.396,9.688,10.005c3.84,2.628,7.966,4.413,12.506,5.321
-							c4.557,0.908,9.224,0.955,13.764,0c4.541-0.94,9.021-2.66,12.824-5.321c3.808-2.645,6.914-6.063,9.383-10.005
-							c2.453-3.918,4.285-8.538,5.002-13.126c0.72-4.571,0.516-9.271-0.62-13.764L530.284,612.012z M213.189,512.893
-							c-106.813,0-194.176,87.363-194.176,194.182c0,106.83,87.362,194.188,194.176,194.188
-							c106.83,0,194.192-87.356,194.192-194.188C407.381,600.256,320.02,512.893,213.189,512.893z M213.189,832.154
-							c-69.504,0-125.07-55.564-125.07-125.086c0-69.504,55.565-125.069,125.07-125.069c69.521,0,125.086,55.565,125.086,125.069
-							C338.275,776.59,282.709,832.154,213.189,832.154z"/>
-					</g>
-				</g>
-				<g id="Shape_61">
-					<g>
-						<path d="M432,166.023c41.952,0,76.881-33.755,76.881-76.854c0-41.924-34.929-76.854-76.881-76.854
-							c-41.91,0-76.839,34.93-76.839,76.854C355.16,132.268,390.09,166.023,432,166.023z M660.295,522.398
-							c12.799-18.647,19.766-41.93,20.955-68.719c-3.498-31.44-15.137-66.39-25.613-98.998c-10.492-20.969-1.188,0,6.952,2.336
-							c34.972,11.639,54.771,0,65.243-26.788c-32.621-72.209-60.585-143.258-94.34-214.292
-							c-26.816,1.161-47.771,10.492-61.718,26.774l45.421,124.625c-26.816-61.718-61.746-104.817-119.966-103.67
-							c-20.955,0-43.085,10.478-65.229,32.622c-1.161,1.175-2.336,2.336-3.469,3.483c-18.661,53.577-37.28,108.314-55.913,161.891
-							L210.755,472.319l22.116,44.259l24.466-8.146L400.595,753l-39.616,206.139L432,977.757l15.15,3.511l24.466-101.348
-							l55.913,89.682l41.908-3.479l-86.197-153.74l17.457-86.184l68.74-82.674L733.65,987.073l29.105-24.452l25.627-22.13
-							L660.295,522.398z M432,641.189l-20.941,44.271L294.575,492.126L430.852,423.4c0-1.161,1.147-2.322,1.147-2.322
-							c8.156-12.813,16.311-24.466,23.305-36.104c25.613,31.446,43.085,64.054,52.401,95.5L432,641.189z"/>
-					</g>
-				</g>
-				<g id="Shape_59">
-					<g>
-						<path d="M872.604,826.424L499.475,91.199L126.36,826.424H13.581v81.874h971.788v-81.874H872.604z M341.096,826.424
-							L499.475,520.67l158.379,305.754H341.096L341.096,826.424z"/>
-					</g>
-				</g>
-				<g id="Shape_54">
-					<g>
-						<path d="M728.842,272.859L766.15,8.063C681.85,29.212,555.02,83.06,474.587,164.568
-							C330.19,310.885,247.79,522.525,303.222,634.338l-57.841,60.98l-28.898,30.363c-7.254,7.154-16.804,13.979-26.503,18.771
-							c-19.828,9.947-41.688,13.004-62.226,7.518c-10.343-2.627-20.373-7.562-30.072-14.045
-							c-9.286-5.859-20.521-16.07-24.801-22.422c-25.693-33.898-16.226-97.303,3.751-147.168l0.38-1.041
-							c2.825-7.104,0.396-15.516-6.279-19.762c-7.435-4.793-17.316-2.463-22.042,5.055c-17.101,27.495-28.932,56.212-36.053,88.73
-							c-6.659,31.84-6.031,70.104,12.987,104.188c11.055,19.04,21.679,29.384,35.575,41.479
-							c13.598,11.385,29.741,20.786,47.388,26.943c21.381,7.771,44.497,9.286,66.868,6.659c-2.577,22.72-1.057,46.05,6.56,67.729
-							c6.13,17.855,15.383,34.198,26.618,48.027c11.946,14.027,22.19,24.771,40.944,36.035
-							c33.624,19.282,71.438,19.91,102.854,13.138c32.061-7.233,60.408-19.218,87.572-36.496c6.41-4.136,9.22-12.431,6.229-19.798
-							c-3.271-8.263-12.606-12.239-20.753-8.924l-0.991,0.413c-49.238,20.19-111.827,29.812-145.271,3.784
-							c-6.262-4.346-16.324-15.779-22.19-25.132c-6.411-9.852-11.235-20.009-13.83-30.485c-5.453-20.783-2.379-42.938,7.418-62.949
-							c4.759-9.883,11.5-19.497,18.539-26.885l29.56-28.781l0.446-0.479l2.462-2.396l57.696-56.228
-							c110.35,56.15,319.229-27.276,463.729-173.645C901.09,438.463,968.09,318.342,990.151,235L728.842,272.859z M635.587,300.916
-							c-21.86,22.141-57.318,22.141-79.179,0.033c-21.859-22.125-21.859-58.095,0-80.236c21.854-22.124,57.352-22.124,79.179,0
-							C657.479,242.854,657.479,278.791,635.587,300.916z"/>
-					</g>
-				</g>
-				<g id="Shape_65">
-					<g>
-						<path d="M845.676,616.973c-20.965,0-41.036,4.854-58.784,13.146c-17.521,7.618-36.874,12.228-57.186,12.228
-							c-20.276,0-39.642-4.604-57.167-12.228c-17.749-8.29-37.803-13.146-58.784-13.146c-20.759,0-40.812,4.854-58.784,13.146
-							c-17.302,7.618-36.667,12.228-56.938,12.228c-20.294,0-39.9-4.604-57.188-12.228c-17.729-8.29-37.803-13.146-58.781-13.146
-							c-20.968,0-41.033,4.854-58.781,13.146c-17.525,7.618-36.891,12.228-57.168,12.228c-20.294,0-39.659-4.604-57.185-12.228
-							c-17.749-8.29-37.579-13.146-58.561-13.146s-41.036,4.854-58.784,13.146c-17.525,7.618-36.891,12.228-57.168,12.228v85.528
-							c20.277,0,39.643-4.627,57.168-12.229c17.748-8.288,37.802-13.143,58.784-13.143c20.981,0,40.812,4.854,58.561,13.143
-							c14.756,6.446,31.112,10.146,47.966,11.303l-71.012,70.788c-22.599-14.068-52.576-11.54-72.165,8.062L32.316,887.18
-							c-22.616,22.582-22.616,59.271,0,82.071c22.805,22.6,59.472,22.6,82.054,0l81.383-81.383
-							c18.471-18.454,21.687-46.109,10.146-68.021l97.997-97.756c6.69-2.062,13.14-3.68,19.365-6.446
-							c17.731-8.286,37.808-13.143,58.784-13.143c20.982,0,41.053,4.854,58.784,13.143c17.284,7.604,36.874,12.229,57.185,12.229
-							c20.277,0,39.646-4.627,56.944-12.229c17.989-8.286,38.025-13.143,58.784-13.143c20.979,0,41.035,4.854,58.784,13.143
-							c17.521,7.604,36.891,12.229,57.168,12.229c20.312,0,39.654-4.627,57.185-12.229c17.749-8.286,37.819-13.143,58.784-13.143
-							c20.979,0,40.829,4.854,58.784,13.143c17.302,7.604,36.891,12.229,57.185,12.229V642.34c-20.294,0-39.883-4.604-57.185-12.228
-							C886.487,621.822,866.657,616.973,845.676,616.973z M942.279,477.114c-12.899,0.465-393.775,0-393.775,0l116.657-116.536
-							l15.667,5.985c19.83,7.154,41.965-3.01,49.343-22.822c5.073-14.052,1.152-29.272-8.53-39.419l95.451-95.796
-							c21.896,11.558,49.565,8.548,68.003-9.889l81.399-81.383c22.822-22.822,22.822-59.489,0-82.071
-							c-22.604-22.839-59.489-22.839-82.07,0l-81.383,81.383c-19.606,19.59-22.152,49.566-7.86,71.924L693.968,289.824
-							l-201.032-74.47c-5.297-2.992-10.853-5.538-17.061-7.378c-43.805-13.14-90.154,11.764-103.294,55.568l-61.776,207.019
-							c-0.929,2.43-1.146,4.511-1.394,6.592H34.614v111.114c14.98,0,30.425-3.438,44.028-9.46
-							c22.375-10.353,47.262-15.891,71.7-15.891c24.439,0,49.102,5.521,70.995,15.668c14.533,6.449,29.513,9.683,44.733,9.683
-							c15.444,0,30.441-3.229,44.269-9.46c22.604-10.369,47.262-15.925,71.7-15.925c24.663,0,48.878,5.313,71.253,15.688
-							c14.052,6.443,29.513,9.683,44.716,9.683c15.221,0,30.218-3.231,44.271-9.459c22.354-10.371,47.272-15.908,71.459-15.908
-							c24.921,0,48.896,5.297,71.253,15.688c14.292,6.447,29.73,9.665,44.716,9.665c15.238,0,30.439-3.222,44.286-9.441
-							c22.354-10.371,47.262-15.926,71.684-15.926c4.162,0,20.981,1.29,37.578-9.786c29.514-12.898,40.571-20.294,66.403-36.082
-							C970.863,503.978,988.405,475.618,942.279,477.114z M506.54,477.149h-24.663l49.79-165.879l102.829,38.025L506.54,477.149z
-							 M505.852,106.54l-10.594,22.582c-6.932,14.068-21.224,23.751-37.579,23.751h-24.92
-							c14.312,20.294,37.819,33.434,64.321,33.434c43.354,0,78.632-35.033,78.632-78.391v-4.162h-66.18
-							C507.915,103.754,506.316,104.924,505.852,106.54z M457.662,133.043c8.53,0,16.132-5.073,19.589-12.452l10.388-22.581
-							c3.921-8.53,12.229-14.292,21.896-14.292h81.159c-10.611-41.74-48.654-72.405-93.611-72.405
-							c-53.246,0-96.362,43.116-96.362,96.604c0,8.53,0.935,17.061,3.233,25.127L457.662,133.043L457.662,133.043z"/>
-					</g>
-				</g>
-				<g id="Shape_115_2_">
-					<g>
-						<path d="M955.043,960.077C498.044,816.275,139.233,656.928,57.386,619.883c-8.459-3.412-18.289,0.482-21.482,8.692
-							c-3.442,8.458,0.218,17.618,8.459,20.812c20.345,9.146,40.457,18.062,59.898,26.521l-64.462,49.146
-							c-7.337,10.77-4.128,24.479,6.621,31.779c8.007,5.479,19.441,4.797,27.215-0.234l110.869-46.401
-							c271.261,114.071,477.234,180.62,767.346,272.049c5.938,0.919,11.438-3.194,12.354-9.378
-							C965.105,966.932,960.994,961.215,955.043,960.077z M255.134,660.479c8.256,0.473,16.232-1.366,23.087-4.812l169.988-76.801
-							c12.104-6.402,21.264-18.07,24.224-32.23l-0.218-85.509l117.958,105.62l-21.716,179.927c0,1.144-0.234,2.274-0.234,3.427
-							c-1.137,26.529,19.433,48.916,45.956,50.068c24.925,0.903,46.173-17.151,49.616-41.609l25.377-205.304
-							c0-0.903,0.218-1.823,0.218-2.741c0.452-14.404-5.265-27.434-14.855-36.578l-109.271-97.155l164.604-80.929l152.71,140.59
-							c6.854,6.636,16.248,10.765,26.296,10.765c20.578-0.25,37.045-16.936,36.812-37.278c0-10.967-5.027-20.797-12.567-27.667
-							L722.26,228.639c1.465,0.078,2.935,0.218,4.408,0.218c42.763,0,77.283-34.739,77.283-77.485
-							c0-42.762-34.521-77.517-77.283-77.517c-42.965,0-77.485,34.755-77.485,77.517c0,16.295,5.032,31.437,13.662,43.931
-							l-143.054-51.034L442.508,32.478c-5.951-8.24-15.106-13.724-25.829-15.095c-20.105-2.274-38.634,12.354-40.938,32.714
-							c-0.904,8.443,1.147,16.669,5.265,23.539l78.872,114.312c3.661,4.562,8.241,8.443,13.709,10.967l91.458,35.893L414.84,311.623
-							c-21.031,11.886-35.892,32.932-40.005,57.374l0.67,137.399l-138.879,62.64c-15.547,7.54-26.732,23.087-27.433,41.594
-							C208.057,637.158,228.636,659.342,255.134,660.479z"/>
-					</g>
-				</g>
-				<g id="Shape_75">
-					<g>
-						<path d="M888.713,892.24c-16.998-7.8-36.293-12.477-56.42-12.477c-20.018,0-39.295,4.654-56.326,12.477
-							c-16.871,7.642-35.475,12.123-54.973,12.123c-19.264,0-38.117-4.481-54.722-12.123c-17.099-7.8-36.394-12.477-56.53-12.477
-							c-19.907,0-39.232,4.654-56.295,12.477c-16.812,7.642-35.479,12.123-54.957,12.123c-19.514,0-38.104-4.481-54.753-12.123
-							c-17.092-7.8-36.402-12.477-56.451-12.477c-20.128,0-39.438,4.654-56.452,12.477c-16.7,7.642-35.396,12.123-54.895,12.123
-							c-19.373,0-38.085-4.481-54.816-12.123c-17.124-7.8-36.371-12.477-56.452-12.477c-20.018,0-39.296,4.654-56.389,12.477
-							c-16.747,7.642-35.302,12.123-54.8,12.123v83.168c19.499,0,38.054-4.529,54.8-12.124
-							c17.093-8.104,36.355-12.771,56.389-12.771c20.081,0,39.328,4.688,56.452,12.771c16.731,7.595,35.443,12.124,54.816,12.124
-							c19.515,0,38.195-4.529,54.895-12.124c16.999-8.104,36.324-12.771,56.452-12.771c20.033,0,39.359,4.688,56.451,12.771
-							c16.646,7.595,35.239,12.124,54.753,12.124c19.479,0,38.146-4.529,54.957-12.124c17.078-8.104,36.388-12.771,56.311-12.771
-							c20.127,0,39.422,4.688,56.521,12.771c16.604,7.595,35.458,12.124,54.753,12.124c19.479,0,38.064-4.529,54.957-12.124
-							c17.047-8.104,36.309-12.771,56.311-12.771c20.127,0,39.438,4.688,56.438,12.771c16.646,7.595,35.459,12.124,54.732,12.124
-							v-83.168C924.188,904.363,905.381,899.882,888.713,892.24z M634.367,158.983V640.22h302.951
-							C960.559,415.971,783.484,229.084,634.367,158.983z M873.287,685.479H734.988H199.156v123.678
-							c7.579,2.023,15.096,4.246,21.983,7.596c16.715,7.358,35.443,11.902,54.8,11.902c19.53,0,38.227-4.544,54.911-11.902
-							c16.999-8.035,36.312-12.754,56.438-12.754c20.062,0,39.354,4.702,56.451,12.754c16.684,7.358,35.271,11.902,54.769,11.902
-							c19.467,0,38.133-4.544,54.941-11.902c17.094-8.035,36.388-12.754,56.311-12.754c20.127,0,39.453,4.702,56.521,12.754
-							c16.604,7.358,35.476,11.902,54.753,11.902c3.758,0,7.312-0.934,10.834-1.354c0.426,0,0.426,0.424,0.859,0.424
-							c2.475,0,4.268-1.1,6.688-1.1c4.449-0.598,8.852-1.117,13.334-2.201c39.855-8.335,65.588-39.721,65.588-39.721l77.521-99.191
-							h-22.55v-0.025L873.287,685.479L873.287,685.479z M79.507,643.885c168.914,0,337.844,0,506.774,0
-							c2.013,0,3.664-1.667,3.664-3.646c0-208.511,0-417.002,0-625.495c0-1.604-0.865-2.61-1.982-3.13
-							c-1.242-0.88-2.861-1.006-4.166,0.473l-0.047,0.031c-0.017,0.016-0.032,0.016-0.048,0.031
-							c-168.931,208.507-337.844,417-506.774,625.509C75.01,640,76.079,643.885,79.507,643.885z"/>
-					</g>
-				</g>
-				<g id="Shape_94_2_">
-					<g>
-						<path d="M499.52,251.556c67.033-0.033,121.269-54.313,121.269-121.214c0-66.983-54.248-121.247-121.269-121.279
-							C432.561,9.095,378.41,63.359,378.41,130.342C378.405,197.242,432.561,251.522,499.52,251.556z M904.143,603.831
-							c-1.254-5.731-3.666-10.902-6.688-15.577l0.166-0.082l-0.414-0.363c-3.979-6.046-9.283-11.002-15.328-14.636l-93.43-88.854
-							l-94.521-175.824l-4.395-8.177l-0.197,0.148c-11.299-17.195-31.057-27.388-52.133-26.083H361.754
-							c-21.095-1.305-40.851,8.888-52.124,26.083l-0.198-0.148l-4.402,8.177l-94.536,175.824l-93.405,88.854
-							c-6.087,3.617-11.381,8.573-15.354,14.636l-0.396,0.363l0.148,0.082c-3.031,4.675-5.426,9.846-6.682,15.577
-							c-5.699,25.786,10.58,51.34,36.366,57.021c1,0.221,1.933,0.198,2.924,0.353c-5.979,11.646-9.68,24.608-9.68,38.588
-							c0,36.407,22.944,67.229,55.057,79.405l-0.149,0.312l141.778,61.354l-28.966,14.586c-2.998,1.205-5.806,2.771-8.572,4.354
-							l-0.355,0.188c-20.962,12.104-35.284,34.485-35.284,60.458c0,38.648,31.376,69.984,70.047,69.984
-							c8.581,0,16.749-1.768,24.364-4.625l0.1,0.247l2.062-0.854c0.495-0.248,1.021-0.463,1.544-0.711l153.434-66.395
-							l153.442,66.395c0.512,0.248,1.041,0.463,1.535,0.711l2.062,0.854l0.104-0.247c7.611,2.857,15.771,4.625,24.35,4.625
-							c38.67,0,70.039-31.336,70.039-69.984c0-25.973-14.289-48.354-35.268-60.458l-0.33-0.188
-							c-2.793-1.585-5.584-3.151-8.594-4.354l-28.977-14.586l141.765-61.354l-0.134-0.298
-							c32.111-12.174,55.039-43.014,55.039-79.388c0-14.011-3.698-26.979-9.68-38.621c1.021-0.148,1.934-0.132,2.924-0.33
-							C893.57,655.171,909.842,629.617,904.143,603.831z M251.484,625.934l-0.074,0.148c-11.621-6.591-24.827-10.638-39.033-11.134
-							l83.097-72.853l40.726-65.892L350.01,675.6L251.484,625.934z M747.547,626.082l-0.062-0.132l-84.74,42.684l14.223-169.432
-							l26.518,42.896l83.09,72.853C772.391,615.444,759.16,619.475,747.547,626.082z"/>
-					</g>
-				</g>
-				<g id="Shape_103_2_">
-					<g>
-						<path d="M67.104,58.769H40.908c-8.845,0-15.987,7.143-15.987,15.987v197.389c0,8.845,7.143,16.004,15.987,16.004h26.196
-							c8.828,0,16.004-7.159,16.004-16.004V74.756C83.108,65.912,75.932,58.769,67.104,58.769z M958.008,58.769h-26.18
-							c-8.844,0-16.004,7.159-16.004,15.987v197.389c0,8.845,7.16,16.004,16.004,16.004h26.18c8.846,0,16.021-7.159,16.021-16.004
-							V74.756C974.029,65.912,966.854,58.769,958.008,58.769z M868.133,20.528h-34.889c-11.812,0-21.361,9.552-21.361,21.344
-							v109.569h-78.084c-2.812-5.694-6.822-10.934-12.01-15.263c-19.93-16.61-49.512-13.966-66.141,5.946
-							c0,0-3.02,3.555-7.867,9.316h-81.906c-11.625-25.084-36.928-42.504-66.392-42.504c-29.498,0-54.807,17.42-66.408,42.504
-							h-88.479l-7.918-9.316c-16.594-19.912-46.208-22.557-66.156-5.946c-5.188,4.329-9.198,9.568-11.994,15.263h-71.496V41.872
-							c0-11.792-9.552-21.344-21.345-21.344h-34.905c-11.793,0-21.328,9.552-21.328,21.344v263.175
-							c0,11.775,9.535,21.327,21.328,21.327h34.905c11.793,0,21.345-9.552,21.345-21.327v-109.57h72.793
-							c1.364,2.409,2.914,4.734,4.751,6.924l134.08,160.479v156.621c0,4.348-19.593,408.172-19.593,408.172
-							c-1.903,26.415,18.06,49.343,44.438,51.18c26.398,1.785,49.275-18.01,51.111-44.475l16.291-314.473
-							c2.896,0.186,15.529,0.305,18.917-0.117l21.582,314.59c1.752,26.448,24.68,46.26,51.158,44.479
-							c26.312-1.854,46.324-24.78,44.438-51.185c0,0-26.717-404.633-26.717-408.172V354.962l94.438-113.107l33.069-39.454
-							c1.816-2.189,3.388-4.531,4.75-6.924h79.359v109.569c0,11.792,9.552,21.344,21.345,21.344h34.905
-							c11.791,0,21.356-9.568,21.356-21.344V41.872C889.494,30.08,879.926,20.528,868.133,20.528z M557.166,258.55
-							c-16.375,14.454-37.77,23.281-61.254,23.281c-21.984,0-42.1-7.665-57.968-20.451l-55.98-65.903h45.502
-							c6.232,34.098,36.021,59.99,72.001,59.99c35.95,0,65.771-25.893,71.985-59.99h39.168
-							C584.742,226.137,557.283,258.634,557.166,258.55z"/>
-					</g>
-				</g>
-				<g id="Shape_66_2_">
-					<g>
-						<path d="M954.828,536.588c-56.789-64.501-140.688-90.534-227.962-90.534c-98.066,0-200.427,32.868-273.302,80.896
-							c-74.257,48.827-112.235,132.598-183.81,183.979c-18.285,13.115-39.022,21.131-60.761,26.91
-							c-10.467,2.791-21.148,5.027-31.92,7.104V308.357l452.396-139.2l-452.39-139.2h-34.8v721.299
-							c-44.104,8.194-86.454,18.807-115.636,53.908c-65.252,78.528,17.427,144.621,98.245,156.216
-							c41.349,5.958,83.18,8.158,125.118,8.158c73.646,0,147.663-6.834,220.396-12.292c111.557-8.444,229.441-23.832,328.891-76.273
-							c75.916-40.06,159.955-92.604,188.977-175.181C1008.665,647.679,996.016,583.375,954.828,536.588z M63.985,866.229
-							c0-25.729,33.368-47.307,78.295-53.152v106.312C97.354,913.572,63.985,891.994,63.985,866.229z M177.08,920.676V811.82
-							c51.727,2.827,92.108,26.141,92.108,54.408C269.188,894.535,228.807,917.849,177.08,920.676z"/>
-					</g>
-				</g>
-				<g id="Shape_119_2_">
-					<g>
-						<path d="M212.583,472.83c72.156,18.039,172.655,54.117,252.531,154.615l11.169,12.896l3.435,3.438
-							c-18.9-59.271-42.096-112.534-69.587-160.634c-48.084-82.46-118.538-168.374-221.605-184.69
-							c-11.155,40.364-6.003,83.326,3.435,116.821C197.112,435.035,203.981,453.94,212.583,472.83z M522.666,640.348l11.184-12.896
-							c79.877-100.498,180.361-136.576,252.531-154.615c8.587-18.89,15.471-37.795,21.459-57.551
-							c9.453-33.495,15.471-76.457,2.604-116.821c-101.354,16.335-173.513,102.23-221.621,184.69
-							c-27.491,48.108-50.668,101.359-69.572,160.633L522.666,640.348z M549.291,645.484l-11.141,13.754l20.604,11.17
-							c115.971-69.573,237.062-62.719,299.779-48.965c13.736-11.156,26.626-24.043,39.513-37.781
-							c21.488-23.205,44.665-55.834,55.819-93.646c-109.085-27.477-211.286,12.902-284.312,58.417
-							C625.748,575.062,586.235,607.705,549.291,645.484z M140.427,621.443c62.704-13.756,183.825-20.608,299.779,48.965
-							l20.622-11.17l-11.155-13.754c-36.944-37.779-76.438-70.43-120.255-97.055c-73.022-45.516-175.238-85.895-284.323-58.417
-							c11.155,37.812,34.346,70.439,55.819,93.646C113.801,597.386,126.688,610.287,140.427,621.443z M982.227,731.396l-3.434-2.584
-							c-16.322-18.896-65.287-57.557-134.009-78.18c-68.728-20.604-158.05-24.057-260.271,38.662
-							c-19.756,11.169-36.93,24.062-57.551,40.378l-9.453,7.727L508.045,746l8.604,7.721
-							c50.691,36.936,103.081,62.725,156.331,77.312c91.062,23.205,208.729,20.621,314.386-94.481
-							C986.514,733.963,984.811,733.963,982.227,731.396z M471.998,729.691c-20.623-16.322-37.795-29.229-57.552-40.396
-							c-101.365-61.838-190.694-59.255-260.281-38.646c-69.572,20.622-115.103,59.27-133.993,78.176l-3.435,2.582l-5.152,5.138
-							c105.636,115.118,223.322,117.688,314.383,94.495c53.251-14.604,105.651-40.378,156.333-77.322l8.586-7.721l-9.438-8.586
-							L471.998,729.691z M577.634,465.124c0-36.944-2.562-73.022-8.587-109.951c-9.438-62.718-28.342-140.012-69.558-199.295
-							c-40.378,59.283-60.136,136.577-69.604,199.295c-6.003,36.929-8.586,73.007-8.586,109.951c0,7.72,72.171,45.53,72.171,159.768
-							h12.021C505.492,510.641,577.634,472.845,577.634,465.124z"/>
-					</g>
-				</g>
-				<g id="Shape_102_2_">
-					<g>
-						<path d="M787.021,203.933c45.07,0,81.694-36.608,81.694-81.618c0-45.126-36.624-81.733-81.694-81.733
-							c-45.062,0-81.688,36.607-81.688,81.733C705.338,167.341,741.962,203.933,787.021,203.933z M975.197,429.71l-230.12-211.492
-							c-7.673-7.491-16.621-13.49-26.498-17.849L539.318,136.5L457.883,18.457c-6.297-8.451-15.926-14.467-27.261-15.926
-							c-21.428-2.402-40.718,13.026-43.354,34.471c-0.979,9.131,1.21,17.781,5.783,25.057l83.146,120.23
-							c3.845,5.055,8.667,8.933,14.468,11.584l96.35,38.033l-158.522,80.971c-21.931,12.794-37.854,34.735-42.182,60.737
-							l0.979,144.817l-146.381,66.013c-16.655,7.756-28.455,24.354-29.167,43.86c-0.497,11.534,3.066,22.206,9.181,30.989
-							c-48.274-18.356-78.949-30.022-78.949-30.022c-14.799-5.688-26.383-17.732-31.454-33.018
-							c-9.032-26.847-38.199-41.298-65.062-32.299c-26.865,9.049-41.332,38.199-32.284,65.096
-							c14.931,44.437,48.655,79.52,92.306,96.118L791,985.868c43.833,16.771,92.271,12.993,132.644-10.24
-							c24.609-14.037,33.017-45.375,18.908-69.969c-14.086-24.646-45.405-33.044-69.979-18.941
-							c-13.605,7.822-30.128,9.064-45.062,3.248c-0.033,0-72.304-27.492-169.88-64.581c17.583-6.099,30.975-21.727,33.492-40.884
-							l26.729-216.646c0.249-0.979,0.249-1.956,0.249-2.917c0.714-15.146-5.284-29.117-15.655-38.812l-115.2-102.148l173.51-85.579
-							l161.181,148.485c7.241,6.994,16.893,11.271,27.729,11.271c21.659-0.216,39.011-17.782,38.795-39.513
-							C988.472,447.078,983.169,436.704,975.197,429.71z M613.528,581.825L590.64,771.971c0,0.961-0.229,2.144-0.229,3.298
-							c-0.437,9.86,2.121,19.097,6.646,27.079C489.553,761.483,365.494,714.3,274.082,679.534c3.663-0.911,7.176-2.144,10.44-3.745
-							l179.377-80.954c12.771-6.978,22.389-19.307,25.531-33.956l-0.479-90.169L613.528,581.825z"/>
-					</g>
-				</g>
-				<g id="Shape_72_2_">
-					<g>
-						<path d="M99.477,483.251c-21.05,0-38.322,17.271-38.322,38.322c0,21.062,17.272,38.073,38.322,38.073
-							c21.066,0,38.075-17.013,38.075-38.073C137.551,500.522,120.543,483.251,99.477,483.251z M630.69,164.219
-							c45.69,0,82.99-37.052,82.99-82.996c0-45.943-37.3-83.242-82.99-83.242c-45.933,0-83.242,37.315-83.242,83.242
-							C547.448,127.15,584.764,164.219,630.69,164.219z M987.798,904.58L852.771,745.188c0,0-42.139-246.194-42.139-246.711
-							c0-0.242-6.335-27.93-6.335-27.93c0.247,0.266-17.009-77.65-30.223-138.573c21.083,12.191,40.104,23.112,41.127,23.607
-							c1.006,2.293,71.58,136.544,71.58,136.544c5.328,9.898,14.203,17.256,24.854,20.555c10.926,3.305,22.354,2.312,32.253-3.052
-							c9.896-5.062,17.259-13.956,20.56-24.86c3.547-10.674,2.54-22.089-2.788-31.981l-77.42-147.449c0,0-3.068-5.328-7.11-9.387
-							c-5.592-5.575-17.767-12.438-17.767-12.438l-150.253-85.52c-19.038-9.65-40.104-12.95-61.172-8.38
-							c-8.631,1.781-16.766,5.081-25.888,10.162c-1.04,0.247-34.275,14.962-53.562,60.147l-77.145,155.317
-							c0,0-117.508,22.848-121.58,23.604c-1.009,0.248-2.025,0.513-2.786,1.023l-109.62-77.669
-							c-24.63-17.272-27.682-69.039-27.929-71.085c-3.052-35.534-23.359-69.022-55.842-92.135
-							c-29.43-20.803-64.964-29.694-97.447-24.366c-25.372,4.322-46.95,17.52-60.659,36.805
-							c-10.684,14.994-16.26,33.025-16.26,52.294c0,0.247,1.534,16.744,1.534,16.744c5.576,32.746,25.636,63.199,55.066,84.266
-							c29.694,21.066,64.965,29.942,97.463,24.366l7.605-1.518c0.775-0.512,49.491-15.49,73.345,0.759
-							c0,0.247,81.989,58.135,103.814,73.604c-2.293,3.553-6.352,11.416-6.088,19.532c0,2.541,0.248,5.081,0.759,7.622
-							c4.312,22.831,26.659,38.062,49.491,33.488l145.685-28.424c0,0,12.438-3.812,17.771-7.622
-							c6.847-4.816,11.928-14.962,11.928-14.962l38.321-77.156c0,0,26.379,124.617,26.891,126.894
-							c-3.036,3.059-119.536,126.663-119.536,126.663l-2.013,2.524c-11.433,10.409-17.784,24.102-17.784,38.586v261.938
-							c0,27.913,22.854,50.497,50.777,50.497c27.666,0,50.514-22.584,50.514-50.497c0,0,0-215.229,0-218.775
-							c10.646-11.168,100.004-105.332,123.842-130.209c2.54,14.715,25.642,147.443,25.642,147.443
-							c2.023,11.685,7.604,22.354,15.979,30.969c0,0.243,160.415,189.599,160.415,189.599c8.876,10.162,21.066,16.497,34.517,17.768
-							c13.463,1.022,26.396-3.3,36.784-11.928c11.685-9.896,17.782-24.35,17.782-38.586
-							C999.725,925.63,995.914,914.214,987.798,904.58z M187.306,333.525c-8.892,12.422-22.601,20.556-39.592,23.591
-							c-23.854,4.058-50.514-2.788-72.85-19.037c-22.584-15.986-37.827-38.817-41.886-62.688l-1.006-11.91
-							c0-12.439,3.3-23.624,10.146-33.258c22.089-30.965,72.586-32.994,112.689-4.57
-							C194.663,254.077,209.378,302.545,187.306,333.525z"/>
-					</g>
-				</g>
-				<g id="Shape_62_2_">
-					<g>
-						<path d="M930.303,749.494c-18.771-8.887-40.047-14.092-62.305-14.092c-22.307,0-43.584,5.221-62.389,14.092
-							c-18.379,8.146-38.9,13.142-60.422,13.142c-21.512,0-42.1-4.985-60.43-13.142c-19.1-8.887-40.391-14.092-62.387-14.092
-							c-22.229,0-43.535,5.221-62.404,14.092c-18.297,8.146-39.109,13.142-60.402,13.142c-21.537,0-42.027-4.985-60.604-13.142
-							c-18.854-8.887-40.081-14.092-62.126-14.092c-22.258,0-43.55,5.221-62.403,14.092c-18.33,8.146-39.164,13.142-60.685,13.142
-							c-21.21,0-42.012-4.985-60.342-13.142c-18.854-8.887-40.146-14.092-62.387-14.092c-22.078,0-43.288,5.221-62.158,14.092
-							c-18.625,8.146-39.147,13.142-60.652,13.142v91.688c21.538,0,42.028-4.861,60.652-13.355
-							c18.87-8.592,40.081-13.828,62.158-13.828c22.242,0,43.534,5.204,62.387,13.828c18.33,8.494,39.148,13.355,60.342,13.355
-							c21.538,0,42.355-4.861,60.685-13.355c18.854-8.592,40.162-13.828,62.403-13.828c22.045,0,43.272,5.204,62.126,13.828
-							c18.575,8.494,39.065,13.355,60.604,13.355c21.293,0,42.105-4.861,60.402-13.355c18.869-8.592,40.184-13.828,62.404-13.828
-							c22.012,0,43.303,5.204,62.387,13.828c18.33,8.494,38.918,13.355,60.43,13.355c21.521,0,42.043-4.861,60.422-13.355
-							c18.805-8.592,40.082-13.828,62.389-13.828c22.258,0,43.533,5.204,62.305,13.828c18.412,8.494,38.918,13.355,60.439,13.355
-							v-91.688C969.221,762.636,948.715,757.646,930.303,749.494z M731.504,476.525c0,65.251,47.658,118.424,116.938,118.424
-							c64.497,0,116.866-53.173,116.866-118.424c0-65.307-52.354-118.229-116.865-118.229
-							C783.795,358.297,731.504,411.225,731.504,476.525z M193.439,670.609c18.297,8.38,39.131,13.354,60.358,13.354
-							c21.505,0,42.339-4.975,60.653-13.354c18.854-8.646,40.146-14.107,62.403-14.107c22.062,0,43.271,5.467,62.142,14.107
-							c18.543,8.38,39.05,13.354,60.571,13.354c21.292,0,42.104-4.975,60.422-13.354c18.871-8.646,40.18-14.107,62.42-14.107
-							c21.979,0,43.271,5.467,62.389,14.107c18.312,8.38,38.885,13.354,60.422,13.354c15.646,0,30.771-2.684,44.979-7.185
-							L595.225,321.016l226.771-41.849c33.271-6.432,57.439-32.862,57.439-66.74c0-37.331-30.062-67.248-66.758-67.248
-							c-2.646,0-5.104,0-7.604,0.229L454.79,209.889c-24.582,5.695-57.15,42.094-38.607,86.789c1.03,2.472,1.97,4.746,2.994,7.201
-							l91.42,166.9L167.679,661.51C176.746,663.703,185.289,666.896,193.439,670.609z"/>
-					</g>
-				</g>
-				<g id="Shape_104_2_">
-					<g>
-						<path d="M341.78,867.945c7.268,38.908,17.563,76.15,30.974,111.188c40.469,10.685,82.926,16.421,126.737,16.421
-							c57.521,0,112.717-9.901,164.087-27.938c-72.299-16.354-125.641-36.612-173.549-54.867
-							C440.699,893.965,396.631,877.219,341.78,867.945z M163.639,864.38c51.695,47.634,113.505,84.354,181.875,106.649
-							c-11.896-33.99-21.026-69.683-27.665-106.546C275.43,859.358,226.116,858.604,163.639,864.38z M314.013,841.446
-							c-3.462-22.951-5.999-46.297-7.729-69.917C180.487,746.83,80.798,701.339,24.748,642.872
-							C47.751,719.285,88.717,787.83,142.692,843.81C212.267,836.287,267.305,836.338,314.013,841.446z M265.316,627.634
-							c11.381,5.937,24.477,11.159,39.338,14.775C316.464,368.811,418.279,92.127,500.862,3.99
-							c-0.463-0.018-0.908-0.052-1.371-0.052c-148.215,0-281.175,65.135-372.037,168.252
-							C81.243,300.951,123.066,553.501,265.316,627.634z M304.843,747.927c-1.354-27.305-1.629-54.867-0.96-82.53
-							c-18.718-4.047-35.069-10.423-49.022-17.688C117.805,576.298,67.6,361.149,92.813,216.276
-							C36.695,296.632,3.665,394.316,3.665,499.748c0,29.585,2.742,58.482,7.713,86.646
-							C48.505,658.916,158.462,717.914,304.843,747.927z M875.334,176.63C791.207,78.86,669.681,14.292,532.881,5.189
-							c-79.892,56.136-192.677,352.531-204.83,641.299C434.837,657.904,614.848,583.223,875.334,176.63z M456.057,790.059
-							c-44.062-2.531-86.303-7.354-126.172-14.188c1.783,23.26,4.395,46.177,7.902,68.683
-							c61.346,9.376,108.945,27.493,160.265,47.033c54.216,20.654,115.479,43.914,203.545,60.852
-							c125.475-56.104,223.312-162.804,267.616-294.187C854.662,769.593,630.463,800.154,456.057,790.059z M890.4,195.005
-							C628.183,602.077,441.213,679.861,327.331,668.994c-0.651,28.021-0.343,55.913,1.097,83.438
-							c40.709,7.308,83.903,12.444,128.938,15.032c187.262,10.816,433.07-25.419,526.217-160.812
-							c7.576-34.438,11.707-70.179,11.707-106.906C995.283,384.82,956.031,279.114,890.4,195.005z"/>
-					</g>
-				</g>
-				<g>
-					<path fill="#231F20" d="M730.357,111.158c0-54.18,38.338-98.086,85.604-98.086c47.33,0,85.688,43.906,85.688,98.086
-						c0,54.248-57.328,141.225-85.688,140.821C788.021,251.498,730.357,165.406,730.357,111.158z"/>
-					<path fill="none" stroke="#231F20" stroke-linecap="square" d="M815.967,259.104
-						c-34.244,105.201,15.764,172.054,15.764,172.054s28.497,123.7-21.446,180.556"/>
-					<path fill="#231F20" d="M219.732,966.231c11.641,26.303,59.109,23.016,67.936,0V640.534v-7.113h14.396l0.069,7.113V966.23
-						c8.758,23.017,56.295,26.304,67.877,0V404.166c26.913,59.867,40.817,124.044,63.146,185.349
-						c1.229,1.78,2.539,3.429,3.837,4.791l-0.896,0.827c0,0,56.787,49.312,68.708,45.953c20.487-0.609,31.434-8.562,35.817-12.802
-						c8.089,2.332,15.135,0.479,18.362-9.318v127.812v34.174v170.617c0,18.834,15.351,34.116,34.238,34.116
-						c18.977,0,34.322-15.282,34.322-34.116V780.952h8.562v170.617c0,18.834,15.331,34.116,34.24,34.116
-						c18.896,0,34.242-15.282,34.242-34.116V780.952v-34.174V606.843l77.126,46.104l0.748-1.171c2.48,0.758,5.078,1.171,7.813,1.171
-						c14.17,0,25.683-11.444,25.683-25.624c0-11.699-7.872-21.579-18.696-24.591l-84.107-62.804l-22.396-6.436H576.715
-						l-17.729,6.298c-28.359,15.616-44.398,20.062-51.503,32.473l-20.556-12.403c-11.646-44.104-58.765-195.483-64.861-206.917
-						c-10.411-19.454-28.64-43.907-54.121-44.31c-12.871-0.147-32.051-0.286-46.297-0.354l-0.069-4.172h-68.625l-0.079,4.241
-						c-10.883,0.069-22.396,0.138-31.026,0.286c-25.476,0.403-43.69,24.856-54.11,44.31c-6.917,12.939-66.44,205.417-67.464,218.223
-						c-0.688,31.37,36.576,46.849,56.374,18.354c22.327-61.308,36.231-125.479,63.085-185.352L219.732,966.231L219.732,966.231z
-						 M296.169,141.633c-40.413,0-73.013,32.462-73.013,72.748c0,39.931,32.6,72.325,73.013,72.325
-						c40.758,0,72.61-32.394,72.61-72.325C368.779,174.095,336.927,141.633,296.169,141.633z M630.895,380.678
-						c-36.015,0-65.062,29.107-65.062,65.279c0,35.818,29.048,64.925,65.062,64.925c36.312,0,64.674-29.104,64.674-64.925
-						C695.562,409.785,667.205,380.678,630.895,380.678z"/>
-				</g>
-				<path fill="#231F20" d="M856.168,447.81c-15.576,121.438-130.451,293.075-275.441,293.075h-43.47v-87.934
-					C522.785,521.12,754.66,403.898,841.683,403.898C856.168,418.508,861.76,404.271,856.168,447.81z M899.637,389.179
-					c0-205.114-188.46-380.967-391.392-380.967l-7.235,0.069l-7.231-0.069C290.832,8.212,102.4,184.065,102.4,389.179
-					c0,86.829,211.935,587.766,398.615,600.538C687.688,976.944,899.637,476.007,899.637,389.179z M145.878,447.81
-					c-5.62-43.534,0-29.302,14.444-43.907c87.05,0,318.924,117.222,304.458,249.053v87.934H421.28
-					C276.329,740.885,161.427,569.243,145.878,447.81z"/>
-			</g>
-			<g id="weather">
-				<g>
-					<path d="M739.76,595.529c10.271,0,19.916,2.457,28.938,7.385c4.521,2.873,8.812,6.37,12.922,10.465
-						c11.506,11.492,17.252,25.649,17.252,42.484c0,16.419-5.746,30.576-17.252,42.471c-11.896,11.09-25.844,16.628-41.859,16.628
-						c-16.42,0-30.562-5.538-42.459-16.628c-11.908-11.895-17.858-26.052-17.858-42.471c0-16.835,5.951-30.992,17.858-42.484
-						c5.33-4.914,10.868-8.812,16.614-11.688C721.689,597.57,730.334,595.529,739.76,595.529z"/>
-					<path d="M695.429,744.511c2.059-2.47,4.537-4.104,7.397-4.927c3.289-2.055,6.979-3.068,11.089-3.068s8.19,1.018,12.312,3.068
-						c1.625,1.65,3.483,3.302,5.524,4.927c4.94,4.927,7.385,11.089,7.385,18.478c0,6.968-2.44,13.13-7.385,18.473
-						c-5.33,4.512-11.284,6.773-17.836,6.773c-7.384,0-13.546-2.266-18.486-6.773c-5.33-5.343-7.995-11.505-7.995-18.473
-						C687.434,755.6,690.099,749.438,695.429,744.511z"/>
-					<path d="M590.181,750.049c0,10.674-3.719,19.903-11.103,27.703c-7.8,6.981-16.822,10.479-27.066,10.479
-						c-10.686,0-19.916-3.497-27.716-10.479c-7.8-7.8-11.7-17.029-11.7-27.703c0-11.076,3.9-20.307,11.7-27.703
-						c3.276-3.271,6.994-5.746,11.089-7.384c4.901-2.873,10.465-4.312,16.627-4.312c6.557,0,12.714,1.638,18.46,4.938
-						c2.86,2.041,5.746,4.303,8.606,6.76C586.462,729.742,590.181,738.973,590.181,750.049z"/>
-					<path d="M637.565,829.467c3.288,2.055,6.366,4.511,9.229,7.384c8.229,7.804,12.324,17.853,12.324,30.188
-						c0,11.466-4.097,21.541-12.324,30.16c-8.203,7.787-18.058,11.695-29.55,11.695s-21.541-3.908-30.16-11.695
-						c-8.203-8.619-12.298-18.694-12.298-30.16c0-12.338,4.095-22.387,12.298-30.188c3.692-3.688,7.801-6.354,12.324-8.008
-						c5.33-2.856,11.271-4.304,17.836-4.304C624.631,824.539,631.417,826.178,637.565,829.467z"/>
-					<path d="M556.926,948.664c4.914,4.939,7.384,11.09,7.384,18.474c0,6.972-2.47,13.13-7.384,18.478
-						c-5.33,4.51-11.297,6.771-17.857,6.771c-7.389,0-13.54-2.263-18.471-6.771c-5.33-5.348-8.002-11.506-8.002-18.478
-						c0-7.384,2.672-13.529,8.002-18.474c2.062-2.457,4.523-4.107,7.395-4.927c3.302-2.041,6.979-3.067,11.076-3.067
-						c4.117,0,8.216,1.026,12.319,3.067C553.026,945.389,554.872,947.039,556.926,948.664z"/>
-					<path d="M461.505,836.24c2.873,2.062,5.746,4.312,8.619,6.771c7.384,7.384,11.083,16.614,11.083,27.703
-						c0,10.688-3.699,19.916-11.083,27.703c-7.793,6.968-16.841,10.479-27.099,10.479c-10.66,0-19.894-3.514-27.69-10.479
-						c-7.812-7.787-11.713-17.017-11.713-27.703c0-11.089,3.896-20.317,11.713-27.703c3.283-3.272,6.981-5.746,11.063-7.384
-						c4.934-2.887,10.479-4.314,16.627-4.314C449.604,831.312,455.753,832.963,461.505,836.24z"/>
-					<path d="M197.174,553.188c4.842,0,9.692,1.226,14.534,3.644c1.931,1.938,4.115,3.888,6.539,5.812
-						c5.811,5.824,8.716,13.095,8.716,21.806c0,8.239-2.905,15.508-8.716,21.812c-6.305,5.33-13.325,7.995-21.073,7.995
-						c-8.729,0-15.997-2.665-21.808-7.995c-6.292-6.306-9.445-13.569-9.445-21.812c0-8.711,3.153-15.979,9.445-21.806
-						c2.424-2.896,5.33-4.849,8.73-5.812C187.964,554.41,192.338,553.188,197.174,553.188z"/>
-					<path d="M452.978,555.373c13.562,13.572,20.349,30.303,20.349,50.154c0,19.369-6.786,36.088-20.348,50.141
-						c-14.048,13.078-30.521,19.617-49.404,19.617c-19.385,0-36.107-6.539-50.161-19.617
-						c-14.053-14.053-21.062-30.771-21.062-50.141c0-19.854,7.011-36.582,21.062-50.154c6.306-5.812,12.845-10.414,19.631-13.807
-						c9.21-4.836,19.37-7.271,30.53-7.271c12.097,0,23.498,2.912,34.147,8.725C443.064,546.416,448.141,550.523,452.978,555.373z"/>
-					<path d="M379.579,734.878c1.937,1.938,4.127,3.888,6.539,5.824c5.814,5.812,8.723,13.078,8.723,21.801
-						c0,8.229-2.905,15.496-8.723,21.788c-6.292,5.344-13.312,7.995-21.073,7.995c-8.704,0-15.971-2.651-21.795-7.995
-						c-6.305-6.292-9.458-13.559-9.458-21.788c0-8.723,3.152-15.989,9.458-21.801c2.411-2.925,5.33-4.862,8.717-5.824
-						c3.88-2.418,8.229-3.64,13.078-3.64C369.887,731.238,374.729,732.46,379.579,734.878z"/>
-					<path d="M192.078,690.547c7.755,0,15.022,1.951,21.808,5.812c3.387,2.431,6.786,5.097,10.173,7.994
-						c8.723,8.724,13.078,19.614,13.078,32.709c0,12.606-4.355,23.505-13.078,32.707c-9.197,8.229-19.864,12.352-31.98,12.352
-						c-12.59,0-23.497-4.121-32.695-12.352c-9.204-9.202-13.806-20.101-13.806-32.707c0-13.095,4.602-23.985,13.806-32.709
-						c3.874-3.873,8.236-6.784,13.085-8.713C178.285,692.238,184.812,690.547,192.078,690.547z"/>
-				</g>
-				<path d="M165.539,210.012c9.678,0,19.006,0.845,27.989,2.6c0-2.444,0-4.849,0-7.267c0-54.952,21.255-101.934,63.759-140.999
-					c42.848-39.04,94.328-58.565,154.46-58.565s111.443,19.526,153.94,58.565c5.877,5.174,11.411,10.712,16.589,16.601
-					c8.632,9.659,16.064,19.864,22.278,30.576c4.498,7.254,8.479,14.859,11.938,22.802c3.458,7.969,6.228,16.419,8.294,25.389
-					c17.265-5.863,35.751-8.788,55.459-8.788c46.645,0,86.555,15.184,119.729,45.591c31.101,28.691,47.688,62.557,49.769,101.622
-					c0,2.392,0,4.992,0,7.761c0,2.405,0,4.836,0,7.254c-0.364,3.107-0.702,6.383-1.04,9.841c11.414-4.823,23.842-7.241,37.311-7.241
-					c24.882,0,46.15,8.099,63.769,24.349c5.876,5.187,10.713,10.881,14.521,17.095c7.931,12.103,11.908,25.766,11.908,40.95
-					c0,22.824-8.813,42.325-26.43,58.591c-3.106,2.756-21.774,5.174-55.991,7.254c-255.352-14.456-510.715-14.456-766.082,0
-					c-30.063-6.214-51.663-15.379-64.786-27.495c-28.34-25.909-42.51-57.175-42.51-93.809c0-36.621,14.17-67.886,42.51-93.809
-					C91.243,222.973,125.459,210.012,165.539,210.012z"/>
-			</g>
-		</g>
-		<g id="Layer_2" display="inline">
-			<g>
-				<path d="M526.923,683.594c-4.379,1.785-8.624,4.058-12.604,6.96c0,0-24.979,18.234-24.998,18.248
-					c-37.046,23.867-85.829-16.771-115.271-41.513c-51.757-43.492-86.174-93.638-112.446-155.558
-					c-13.26-31.261-7.401-68.262,19.107-87.61l25.035-18.276c7.236-5.279,12.873-11.946,16.938-19.341
-					c0.312-0.548,0.604-1.116,0.896-1.679c0.354-0.701,0.729-1.393,1.058-2.108c16.877-35.828,2.646-99.832-38.491-158.604
-					c-49.215-70.314-118.652-107.01-157.018-83.714c-4.233,1.762-8.339,3.979-12.194,6.794L81.74,172.881
-					c-6.987,5.101-13.5,11.177-19.323,17.55c-11.683,12.782-20.792,27.815-27.031,43.952c-11.192,28.961-12.741,60.659-8.94,91.228
-					c6.333,50.953,26.219,99.717,48.612,145.512c53.494,109.391,117.015,209.58,201.69,297.451
-					c43.627,45.272,102.77,110.104,151.493,149.942c18.749,15.332,38.436,29.521,59.303,41.844
-					c38.99,23.019,83.437,38.169,129.062,31.276c12.522-1.893,26.509-4.637,38.241-9.591c1.695-0.671,3.363-1.429,5.009-2.267
-					c1.396-0.686,2.339-1.19,2.813-1.46c0.089-0.053,0.178-0.1,0.264-0.146c0.083-0.048,0.125-0.072,0.119-0.078
-					c1.662-0.979,3.297-2.039,4.888-3.198l35.193-25.688c12.354-9.021,20.157-21.997,23.076-35.958
-					c8.803-37.051-6.507-93.32-43.008-145.479C634.305,697.918,565.441,661.226,526.923,683.594z M238.01,377.108
-					c-1.679-0.741-3.393-1.498-5.139-2.269c-1.691-0.889-3.414-1.794-5.165-2.715c-0.875-0.459-1.759-0.924-2.65-1.392
-					c-0.859-0.525-1.723-1.053-2.596-1.585c-1.743-1.068-3.51-2.152-5.304-3.25c-6.94-4.741-14.147-9.959-20.899-16.186
-					c-6.906-6.05-13.442-12.951-19.745-20.232c-3.03-3.746-6.23-7.406-9.038-11.398l-4.337-5.902l-4.084-6.098
-					c-5.31-8.222-10.146-16.75-14.317-25.44c-4.099-8.722-7.556-17.575-10.249-26.347c-5.474-17.523-7.401-34.853-6.112-49.481
-					c0.717-7.309,2.287-13.912,4.417-19.479c2.137-5.574,4.841-10.07,7.429-13.479c2.691-3.333,5.135-5.67,6.914-7.115
-					c1.811-1.408,2.776-2.16,2.776-2.16s-0.585,1.211-1.683,3.482c-0.591,1.017-1.059,2.516-1.669,4.061
-					c-0.316,0.765-0.563,1.648-0.791,2.589c-0.252,0.884-0.52,1.823-0.803,2.815c-0.373,2.08-0.86,4.172-1.065,6.542
-					c-0.174,1.13-0.19,2.374-0.242,3.616c-0.093,1.236-0.139,2.479-0.001,3.642c0.041,0.574,0.081,1.158,0.122,1.752l0.052,1.061
-					l0.007,1.231c0.004,0.827,0.008,1.666,0.014,2.516l0.003,0.641c-0.12,0.462,0.161-0.54,0.137-0.412l0.01,0.067l0.02,0.134
-					l0.04,0.268l0.161,1.077c0.212,1.405,0.43,2.847,0.652,4.323c0.28,1.458,0.568,2.953,0.86,4.478
-					c0.834,3.079,1.454,6.159,2.492,9.393c0.407,1.588,1.046,3.219,1.587,4.867c0.516,1.643,1.016,3.288,1.706,4.977
-					c1.242,3.336,2.693,6.754,4.037,10.214c1.575,3.427,3.186,6.929,4.822,10.489c3.502,7.027,7.179,14.252,11.412,21.37
-					c2.094,3.583,4.147,7.198,6.486,10.704l3.25,5.099l1.562,2.455l0.775,1.232l1.049,1.505c2.504,3.574,5.01,7.147,7.504,10.706
-					c2.299,3.562,5.138,6.625,7.447,10.115c2.464,3.341,5.095,6.507,7.598,9.719c2.557,3.136,5.003,6.402,7.685,9.253
-					c1.264,1.515,2.475,3.114,3.764,4.558c1.307,1.433,2.603,2.851,3.884,4.255c2.485,2.958,5.093,5.539,7.609,8.251
-					c2.589,2.429,4.979,5.335,7.562,7.476c1.272,1.135,2.47,2.399,3.699,3.581c1.261,1.083,2.499,2.146,3.711,3.188
-					c4.859,4.387,9.637,7.867,14.18,11.073c2.246,1.411,4.487,2.868,6.611,4.083c2.211,1.15,4.243,2.206,6.077,3.161
-					c1.931,0.849,3.656,1.609,5.156,2.27c1.643,0.727,3.276,0.939,4.479,1.321c1.232,0.298,2.197,0.635,2.843,0.833
-					c0.646,0.204,0.979,0.31,0.979,0.31s-1.199,0.243-3.448,0.696c-1.132,0.178-2.496,0.619-4.157,0.726
-					c-1.66,0.115-3.567,0.248-5.704,0.397c-2.137,0.017-4.506-0.185-7.084-0.282c-2.567-0.232-5.314-0.778-8.264-1.199
-					c-2.882-0.76-6.001-1.403-9.18-2.439C244.718,379.678,241.327,378.699,238.01,377.108z M686.726,923.926
-					c0.681,0.063,1.024,0.1,1.024,0.1s-1.121,0.485-3.225,1.404c-1.068,0.41-2.312,1.129-3.91,1.584
-					c-1.602,0.461-3.438,0.994-5.491,1.588c-2.087,0.469-4.445,0.771-6.987,1.218c-2.559,0.312-5.355,0.355-8.33,0.563
-					c-2.978-0.136-6.163-0.105-9.485-0.452c-3.312-0.455-6.834-0.696-10.411-1.557c-1.798-0.369-3.633-0.749-5.503-1.135
-					c-1.84-0.517-3.713-1.038-5.619-1.568c-0.954-0.267-1.915-0.535-2.883-0.805c-0.949-0.33-1.906-0.666-2.872-1.002
-					c-1.928-0.68-3.887-1.365-5.869-2.064c-7.781-3.172-15.926-6.76-23.837-11.427c-8.022-4.46-15.864-9.832-23.562-15.626
-					c-3.749-3.021-7.646-5.93-11.23-9.24l-5.483-4.854l-5.272-5.104c-6.92-6.923-13.444-14.24-19.35-21.858
-					c-5.844-7.663-11.083-15.595-15.562-23.603c-9.035-15.979-14.565-32.517-16.38-47.088c-0.835-7.296-0.688-14.083,0.222-19.975
-					c0.916-5.896,2.611-10.86,4.423-14.74c1.934-3.823,3.827-6.623,5.267-8.408c1.475-1.759,2.26-2.697,2.26-2.697
-					s-0.319,1.311-0.913,3.76c-0.363,1.116-0.505,2.685-0.777,4.321c-0.146,0.813-0.202,1.729-0.228,2.697
-					c-0.062,0.916-0.125,1.89-0.194,2.919c0.072,2.115,0.039,4.263,0.336,6.621c0.069,1.141,0.313,2.361,0.527,3.585
-					c0.169,1.229,0.386,2.453,0.763,3.561c0.161,0.558,0.325,1.115,0.489,1.688l0.271,1.025l0.27,1.202
-					c0.177,0.811,0.354,1.626,0.541,2.456l0.139,0.624c-0.02,0.478,0.044-0.555,0.047-0.427l0.022,0.062l0.05,0.125l0.095,0.256
-					l0.384,1.019c0.503,1.329,1.021,2.692,1.549,4.088c0.58,1.368,1.175,2.771,1.78,4.198c1.462,2.833,2.718,5.714,4.409,8.658
-					c0.732,1.468,1.701,2.928,2.575,4.426c0.853,1.496,1.688,3,2.717,4.504c1.914,3.002,4.052,6.038,6.095,9.14
-					c2.263,3.02,4.569,6.103,6.92,9.238c4.899,6.134,10.017,12.421,15.65,18.489c2.8,3.062,5.569,6.166,8.594,9.102l4.248,4.302
-					l2.045,2.07l1.019,1.04l1.341,1.252c3.202,2.969,6.404,5.936,9.593,8.891c2.994,3,6.416,5.396,9.404,8.32
-					c3.112,2.746,6.352,5.288,9.474,7.902c3.16,2.527,6.238,5.205,9.46,7.428c1.556,1.219,3.074,2.522,4.643,3.666
-					c1.578,1.124,3.141,2.239,4.688,3.344c3.054,2.367,6.146,4.346,9.175,6.469c3.045,1.828,5.99,4.165,8.968,5.716
-					c1.479,0.844,2.919,1.826,4.368,2.724c1.461,0.794,2.896,1.572,4.301,2.337c5.672,3.268,11.073,5.663,16.188,7.844
-					c2.492,0.905,4.989,1.856,7.323,2.6c2.403,0.661,4.612,1.267,6.604,1.812c2.065,0.426,3.912,0.806,5.521,1.136
-					c1.756,0.361,3.398,0.228,4.656,0.347C685.039,923.742,686.055,923.87,686.726,923.926z"/>
-				<path d="M544.217,491.371c0-32.957-26.712-59.672-59.645-59.672c-32.955,0-59.672,26.716-59.672,59.672
-					s26.717,59.67,59.672,59.67C517.505,551.041,544.217,524.327,544.217,491.371z"/>
-				<path d="M487.68,4.391c-1.01-0.103-2.036-0.157-3.07-0.157c-16.479,0-29.836,13.358-29.836,29.836s13.355,29.836,29.836,29.836
-					h0.001v0.036c114.771,0,222.691,42.166,303.88,123.382c81.195,81.228,125.915,189.218,125.915,304.081
-					c0,62.366-13.036,122.485-38.746,178.691l54.264,24.822c28.354-61.979,44.154-130.897,44.154-203.517
-					C974.075,221.969,756.537,6.016,487.68,4.391z"/>
-				<path d="M467.543,194.92c-22.248,0-43.945,2.361-64.854,6.846l0.034,0.173c-12.823,3.341-22.306,14.968-22.306,28.84
-					c0,16.478,13.359,29.836,29.836,29.836c2.771,0,5.443-0.406,7.989-1.114c16.123-3.244,32.688-4.909,49.298-4.909
-					c136.761,0,248.021,111.326,248.021,248.165c0,41.945-10.641,83.375-30.771,119.812l0.019,0.009
-					c-2.443,4.329-3.854,9.312-3.854,14.638c0,16.479,13.357,29.836,29.836,29.836c11.413,0,21.322-6.413,26.34-15.825
-					c24.28-44.024,38.104-94.634,38.104-148.47C775.238,332.741,637.438,194.92,467.543,194.92z"/>
-			</g>
-		</g>
-		<path display="inline" d="M456.415,678.788c0,0,2.938-387.358,292.077-511.137L591.166,49.354h404.861v404.662l-96.785-121.05
-			C899.242,332.966,704.182,224.591,456.415,678.788z M6.637,948.5V139.176h449.778v172.287H178.913v464.762h644.838V633.894
-			h172.276V948.5H6.637z"/>
-	</g>
-	<g id="Layer_2_1_">
-		<path display="inline" d="M767.914,560.297c49.297,0,89.299,39.841,89.299,89.139c0,49.299-40.002,88.994-89.299,88.994
-			c-49.459,0-89.318-39.695-89.318-88.994C678.596,600.138,718.455,560.297,767.914,560.297z M234.379,560.297
-			c49.172,0,89.299,39.841,89.299,89.139c0,49.299-40.127,88.994-89.299,88.994c-49.459,0-89.442-39.695-89.442-88.994
-			C144.937,600.138,184.92,560.297,234.379,560.297z M636.926,387.02c-19.687-16.017-55.11-47.467-104.569-66.857
-			c-50.5-19.849-182.261-16.789-188.522-16.789c-1.812,0-17.712-1.678-22.576,12.508c-5.205,14.814-20.315,63.968-25.035,79.231
-			c-3.518,11.145,0.144,23.509,16.167,23.509h151.592H638.92C648.232,418.471,671.274,415.105,636.926,387.02z M231.185,314.366
-			c-12.831,5.339-37.399,21.822-47.162,29.611c-8.399,6.865-79.842,74.646-32.662,74.646h56.01
-			c24.119,0,30.526-10.382,36.018-23.509c4.899-12.051,27.35-69.765,30.688-79.231C280.788,297.568,257.745,303.221,231.185,314.366
-			z M978.42,615.392c-3.213,5.798-20.764,19.851-29.02,26.704c-9.295,7.34-21.967,22.611-28.086,29.61
-			c-3.805,4.45-23.49,7.034-31.745,7.034c14.501-75.267-35.712-154.945-121.979-154.945c-101.664,0-135.527,90.986-127.9,152.057
-			c0.756,4.396-1.221,9.906-10.229,9.906h-63.816H407.486c-35.856,0-40.289-38.925-56.619-82.121
-			c-11.611-30.849-50.231-79.842-116.918-79.842c-41.832,0-82.749,19.238-105.199,55.418
-			c-20.297,32.984-21.212,76.021-22.594,91.596c-6.245-0.628-42.586-8.396-57.983-17.405c-11.45-6.712-19.866-17.267-23.976-25.196
-			c-9.637-18.467-15.416-51.9-17.103-79.357c0-26.271,20.62-27.798,27.17-46.576c6.425-18.772-7.932-61.055,2.746-92.045
-			c10.085-29.458,25.053-38.917,30.239-43.808c24.712-23.662,63.026-51.899,102.723-70.824c13.729-6.568-8.686-7.035-15.434-14.509
-			c-4.253-4.576-6.245-11.754-4.702-14.348c1.059-1.831,2.89-1.525,28.534-1.525c7.322,0,11.001,0,27.314-0.924
-			c4.576-0.144,11.145-2.593,16.349-3.203c26.094-3.509,70.061-3.509,114.942-3.509c122.876,0,186.692,16.483,222.871,28.696
-			c12.67,4.28,9.297,5.958,26.256,16.035c9.764,5.949,45.799,30.221,56.926,38.314c48.096,34.645,81.224,61.519,81.224,61.519
-			c5.958,6.104,87.469,17.553,179.514,50.52c13.585,4.89,39.696,19.085,52.043,38.934c4.146,6.561,16.654,21.374,25.809,34.043
-			c9.009,12.67,13.729,25.492,14.519,30.681C997.801,569.755,987.268,599.061,978.42,615.392z"/>
-	</g>
-	<g id="Layer_3">
-		<polygon display="inline" points="123.801,4.172 123.801,992.159 879.045,498.166 		"/>
-	</g>
-	<g id="wrench">
-		<path display="inline" d="M982.192,178.811L826.938,334.066H664.679V169.273L818.003,16.01
-			c-22.576-6.822-46.118-11.59-70.867-11.59c-136.543,0-247.25,110.768-247.25,247.25c0,38.088,9.296,73.703,24.749,105.998
-			L29.531,852.65c-14.85,14.971-24.146,35.494-24.146,58.432c0,45.395,36.822,82.338,82.457,82.338
-			c22.817,0,43.462-9.176,58.19-24.146L641.258,474.23c32.113,15.332,67.85,24.688,105.878,24.688
-			c136.543,0,247.25-110.768,247.25-247.25C994.386,226.135,989.436,201.99,982.192,178.811z"/>
-	</g>
-	<path d="M801.92,543.083C899.197,596.99,975.73,692.571,994.9,806.324c0,102.729-83.347,186.076-186.075,186.076h-85.77
-		c37.009-32.315,64.146-75.05,76.925-124.052h8.845c34.283,0,62.023-27.741,62.023-62.024
-		c-15.989-61.781-58.238-113.631-113.024-147.006c-28.894-50.094-67.84-95.279-115.146-131.804
-		c7.117-12.205,13.387-24.955,18.747-38.069c49.487-16.385,85.376-62.417,85.376-117.295V248.1
-		c0-54.937-35.889-100.972-85.406-117.295c-20.229-49.184-53.362-91.251-94.311-123.99C585.014,2.666,603.548,0,622.75,0
-		c137.013,0,248.1,111.087,248.1,248.1v124.05C870.85,438.596,844.381,498.562,801.92,543.083z M560.725,992.4H188.575
-		C85.786,992.4,2.5,909.055,2.5,806.324l0,0C21.671,692.571,98.203,596.99,195.541,543.083
-		c-42.521-44.521-68.99-104.487-68.99-170.933V248.1C126.55,111.087,237.638,0,374.65,0c137.012,0,248.1,111.087,248.1,248.1v124.05
-		c0,66.446-26.47,126.413-68.931,170.933c97.277,53.907,173.81,149.488,192.98,263.241l0,0
-		C746.801,909.055,663.454,992.4,560.725,992.4z M498.7,372.15V248.1c0-68.476-55.575-124.049-124.05-124.049
-		c-68.477,0-124.05,55.573-124.05,124.049v124.05c0,68.476,55.574,124.049,124.05,124.049
-		C443.125,496.199,498.7,440.626,498.7,372.15z M622.75,806.324C595.068,699.477,490.099,620.25,374.65,620.25l0,0l0,0
-		c-115.509,0-220.419,79.227-248.101,186.074l0,0c0,34.284,27.802,62.024,62.025,62.024h372.148
-		C595.009,868.35,622.75,840.608,622.75,806.324L622.75,806.324z"/>
-	<path d="M647.504,998.062H274.168c-103.117,0-186.668-83.611-186.668-186.668l0,0c19.232-114.115,96.008-210.003,193.656-264.082
-		c-42.656-44.662-69.21-104.818-69.21-171.478V251.391C211.945,113.941,323.387,2.5,460.836,2.5s248.891,111.441,248.891,248.891
-		v124.445c0,66.658-26.555,126.814-69.149,171.477c97.588,54.08,174.362,149.968,193.596,264.082l0,0
-		C834.172,914.451,750.561,998.062,647.504,998.062z M585.281,375.836V251.391c0-68.693-55.752-124.445-124.445-124.445
-		c-68.694,0-124.445,55.752-124.445,124.445v124.445c0,68.693,55.751,124.445,124.445,124.445
-		C529.529,500.281,585.281,444.529,585.281,375.836z M709.727,811.395c-27.77-107.188-133.073-186.668-248.891-186.668l0,0l0,0
-		c-115.877,0-221.121,79.48-248.891,186.668l0,0c0,34.394,27.891,62.224,62.223,62.224h373.336
-		C681.896,873.617,709.727,845.787,709.727,811.395L709.727,811.395z"/>
-	<path d="M145.955,419.761L21.881,295.688C9.765,283.6,3.707,267.698,3.707,251.825c0-15.902,6.058-31.775,18.174-43.861
-		L145.955,83.892c17.751-17.66,44.407-23.021,67.61-13.48c23.143,9.572,38.289,32.291,38.289,57.342v62.098h62.036v124.072h-62.036
-		v61.977c0,25.051-15.146,47.77-38.289,57.342C190.362,442.753,163.706,437.481,145.955,419.761z M854.045,580.214l124.073,124.074
-		c12.116,12.055,18.175,27.928,18.175,43.861c0,15.872-6.059,31.743-18.175,43.86L854.045,916.085
-		c-17.751,17.689-44.468,22.961-67.61,13.449c-23.202-9.572-38.288-32.291-38.288-57.312v-62.034H686.11V686.112h62.036v-62.037
-		c0-25.08,15.086-47.799,38.288-57.371C809.577,557.192,836.294,562.524,854.045,580.214z M437.963,686.112H500v124.073h-62.037
-		V686.112z M375.927,189.851h62.036v124.072h-62.036V189.851z M313.89,562.04H65.743c-34.229,0-62.036,27.807-62.036,62.035v248.146
-		c0,34.353,27.807,62.037,62.036,62.037H313.89c34.229,0,62.037-27.686,62.037-62.037V624.075
-		C375.927,589.847,348.119,562.04,313.89,562.04z M251.854,810.188H127.78V686.112h124.073L251.854,810.188L251.854,810.188z
-		 M500,189.851h62.036v124.072H500V189.851z M934.256,65.776H686.109c-34.289,0-62.036,27.777-62.036,62.037V375.96
-		c0,34.26,27.747,62.037,62.036,62.037h248.146c34.29,0,62.037-27.777,62.037-62.037V127.813
-		C996.293,93.554,968.546,65.776,934.256,65.776z M872.22,313.923H748.146V189.851H872.22V313.923z M562.036,686.112h62.037v124.073
-		h-62.037V686.112z"/>
-	<path d="M996,499c0,20.92-1.696,41.534-4.238,61.817c-0.636,4.904-1.453,9.868-2.24,14.773
-		c-2.692,16.953-6.114,33.784-10.442,50.192c-0.818,2.907-1.454,5.874-2.211,8.75c-11.808,41.02-28.64,80.044-49.951,116.038
-		c-42.625,72.323-102.99,132.658-175.313,175.344c-35.995,21.313-74.986,38.084-116.037,49.921c-2.906,0.757-5.813,1.394-8.749,2.21
-		c-16.439,4.329-33.149,7.75-50.163,10.445c-4.903,0.757-9.869,1.634-14.805,2.21C541.534,993.304,520.948,995,500,995l0,0l0,0
-		c-20.949,0-41.535-1.696-61.818-4.238c-5.024-0.636-9.868-1.453-14.834-2.24c-17.014-2.692-33.784-6.114-50.224-10.442
-		c-2.815-0.819-5.843-1.454-8.688-2.211c-41.11-11.808-80.042-28.638-116.067-49.951C176.075,883.292,115.71,822.928,72.964,750.605
-		c-21.282-35.997-38.054-74.987-49.83-116.039c-0.787-2.875-1.453-5.813-2.24-8.749c-4.359-16.439-7.75-33.149-10.384-50.163
-		c-0.757-4.903-1.635-9.838-2.331-14.805C5.695,540.534,4,519.92,4,499l0,0l0,0c0-20.919,1.695-41.535,4.238-61.817
-		c0.605-5.025,1.453-9.868,2.301-14.834c2.634-17.014,6.055-33.785,10.444-50.224c0.757-2.816,1.423-5.843,2.24-8.689
-		c11.777-40.99,28.579-80.014,49.861-116.04c42.686-72.292,103.111-132.687,175.404-175.372
-		c35.935-21.222,74.958-38.024,115.978-49.8c2.876-0.817,5.843-1.482,8.688-2.241c16.407-4.389,33.239-7.75,50.192-10.443
-		c4.965-0.726,9.81-1.636,14.864-2.33C458.465,4.696,479.051,3,500,3l0,0l0,0c20.948,0,41.534,1.696,61.818,4.209
-		c4.903,0.634,9.869,1.482,14.772,2.33c16.953,2.633,33.784,6.054,50.192,10.443c2.907,0.759,5.874,1.424,8.75,2.241
-		C676.554,34,715.578,50.802,751.572,72.024c72.322,42.745,132.658,103.171,175.344,175.403
-		c21.312,36.025,38.084,74.956,49.921,116.067c0.756,2.847,1.394,5.813,2.21,8.689c4.329,16.439,7.75,33.209,10.445,50.224
-		c0.757,4.965,1.634,9.777,2.209,14.803C994.304,457.465,996,478.081,996,499L996,499L996,499z M211.888,386.291l-92.183-92.243
-		C86.586,355.354,66,424.407,66,499c0,74.594,20.586,143.678,53.705,204.952l92.183-92.154C198.174,576.742,190,538.93,190,499
-		C190,459.099,198.174,421.317,211.888,386.291z M500,933c74.594,0,143.678-20.525,204.951-53.645l-92.152-92.213
-		C577.742,800.765,539.931,809,500,809c-39.87,0-77.682-8.235-112.738-21.948l-92.273,92.243C356.353,912.475,425.406,933,500,933z
-		 M500,65c-74.594,0-143.647,20.586-204.951,53.705l92.273,92.183C422.318,197.173,460.13,189,500,189
-		c39.931,0,77.742,8.173,112.738,21.888l92.151-92.183C643.678,85.586,574.594,65,500,65z M738.828,435.578L738.828,435.578
-		C716.092,349.874,649.188,283,563.453,260.172l0,0l0,0c-8.234-2.148-16.469-3.966-25.066-5.329
-		C525.854,252.604,513.198,251,500,251c-13.199,0-25.854,1.604-38.447,3.844c-8.477,1.362-16.802,3.181-24.976,5.329l0,0l0,0
-		C350.873,283,283.999,349.934,261.173,435.578l0,0l0,0c-2.149,8.173-3.966,16.5-5.328,25.006C253.604,473.177,252,485.831,252,499
-		c0,13.17,1.604,25.823,3.845,38.387c1.302,8.6,3.179,16.771,5.328,25.066l0,0l0,0c22.735,85.673,89.761,152.548,175.404,175.313
-		l0,0l0,0c8.174,2.148,16.499,3.937,24.976,5.326C474.146,745.396,486.801,747,500,747c13.198,0,25.854-1.604,38.387-3.844
-		c8.599-1.303,16.771-3.182,25.066-5.328l0,0l0,0c85.673-22.769,152.548-89.643,175.312-175.375l0,0l0,0
-		c2.149-8.234,3.938-16.468,5.328-25.037C746.396,524.823,748,512.17,748,499c0-13.169-1.604-25.823-3.845-38.416
-		C742.763,452.077,740.977,443.75,738.828,435.578L738.828,435.578z M880.355,294.048l-92.213,92.274
-		C801.766,421.317,810,459.099,810,499c0,39.93-8.234,77.742-21.948,112.738l92.243,92.15C913.475,642.678,934,573.594,934,499
-		C934,424.407,913.475,355.354,880.355,294.048z"/>
-	<path d="M962.252,997.5H35c0-119.822,140.166-219.904,331.177-252.59v-49.025c-78.83-45.965-132.465-130.401-132.465-228.244
-		v-6.698c-38.444-13.796-66.247-49.543-66.247-92.687c0-43.115,27.803-78.891,66.217-92.627v-6.699
-		C233.712,122.609,352.291,4,498.611,4c146.319,0,264.93,118.609,264.93,264.93v6.699c38.414,13.736,66.217,49.512,66.217,92.627
-		c0,43.144-27.803,78.891-66.217,92.687v6.698c0,97.843-53.635,182.279-132.465,228.152v49.027
-		C822.178,777.596,962.252,877.678,962.252,997.5z"/>
-	<g id="plus">
-		<polygon display="inline" points="998.5,374.438 624.062,374.438 624.062,0 374.438,0 374.438,374.438 0,374.438 0,624.062 
-			374.438,624.062 374.438,998.5 624.062,998.5 624.062,624.062 998.5,624.062 		"/>
-	</g>
-	<g id="play">
-		<polygon display="inline" points="123,0 871.875,499.25 123,998.5 		"/>
-	</g>
-	<path d="M375.312,871.562L3.5,995.5l123.938-371.812L747.125,4L995,251.875L375.312,871.562z M127.438,871.562l185.906-61.97
-		L189.406,685.656L127.438,871.562z M251.375,623.688l123.938,123.938l371.812-371.812L623.188,251.875L251.375,623.688z"/>
-	<g display="inline">
-		<path d="M1000.392,889.434c0,58.879-47.754,106.633-106.635,106.633H110.96c-58.88,0-106.635-47.754-106.635-106.633V106.635
-			C4.325,47.756,52.08,0,110.96,0h782.797c58.881,0,106.635,47.756,106.635,106.635V889.434z M907.011,96.803
-			c0-1.9-1.52-3.42-3.404-3.42H101.096c-1.869,0-3.389,1.52-3.389,3.42v802.479c0,1.855,1.52,3.404,3.389,3.404h802.511
-			c1.885,0,3.404-1.549,3.404-3.404V96.803z"/>
-	</g>
-	<polygon display="inline" points="197.159,726.305 121.166,672.016 308.84,409.272 429.077,529.512 557.354,305.056 
-		683.657,462.909 804.335,269.763 883.551,319.22 692.958,624.107 570.243,470.69 449.535,682.016 320.756,553.252 	"/>
-</g>
-<g id="Layer_2_2_" display="none">
-	<path display="inline" d="M966.363,880.234c-57.816-163.145-213.17-280.393-396.236-280.393v140.314
-		c0,25.883-14.287,49.488-37.055,61.711s-50.491,10.965-71.94-3.416L40.483,517.969c-19.546-13.104-31.29-34.914-31.29-58.31
-		c0-23.501,11.744-45.338,31.23-58.384l420.62-280.498c21.538-14.29,49.203-15.696,71.969-3.43
-		c22.828,12.148,37.115,35.978,37.115,61.845v140.182c232.314,0,420.68,188.411,420.68,420.783
-		C990.807,789.225,981.85,836.377,966.363,880.234z"/>
-</g>
-<g id="Layer_3_1_" display="none">
-	<g id="check_x5F_alt" display="inline">
-		<path d="M498.227,3C224.77,3,3,224.741,3,498.227s221.741,495.225,495.227,495.225c273.456,0,495.225-221.739,495.225-495.225
-			S771.713,3,498.227,3z M421.498,726.737l-227.861-227.89l87.52-87.535l140.311,140.353l297.652-297.65l87.535,87.535
-			L421.498,726.737z"/>
-	</g>
-	<g id="paperclip" display="inline">
-		<path d="M495,515.923c-2.939,0-5.701-1.147-7.777-3.228c-2.078-2.077-3.223-4.836-3.223-7.776c0.002-2.938,1.145-5.7,3.223-7.776
-			l11.136-10.895c2.993-2.994,8.278-3.006,11.297,0.016c3.115,3.121,3.115,8.195,0,11.312l-10.021,9.775
-			c-1.93,1.931-5.102,1.935-7.051-0.018c-1.949-1.953-1.949-5.123,0-7.072l3.879-3.879l2.828,2.828l-3.879,3.879
-			c-0.256,0.258-0.293,0.555-0.293,0.707c0,0.154,0.037,0.451,0.293,0.709c0.512,0.51,0.902,0.51,1.414,0l10.016-9.777
-			c1.543-1.541,1.543-4.078-0.016-5.639c-1.512-1.512-4.145-1.512-5.656,0l-11.135,10.896c-1.306,1.308-2.035,3.064-2.035,4.933
-			c0,1.871,0.729,3.629,2.051,4.949c2.645,2.647,7.254,2.647,9.898,0l5-5l2.826,2.827l-5,5
-			C500.699,514.773,497.938,515.923,495,515.923z"/>
-	</g>
-</g>
-<g id="Layer_4">
-	<g id="paperclip_1_">
-		<path d="M407.745,991.438c-90.488,0-175.534-35.33-239.442-99.374c-63.984-63.953-99.238-148.892-99.238-239.427
-			c0.06-90.473,35.254-175.505,99.238-239.413L511.162,77.776C603.305-14.411,766.031-14.772,859,78.272
-			c95.915,96.081,95.915,252.312,0,348.286L550.445,727.535c-59.413,59.444-157.07,59.563-217.086-0.54
-			c-60.016-60.136-60.016-157.733,0-217.733l119.426-119.444l87.076,87.075L420.435,596.321c-7.895,7.937-9.021,17.078-9.021,21.77
-			c0,4.748,1.127,13.89,9.021,21.828c15.755,15.695,27.767,15.695,43.538,0l308.373-301.021
-			c47.506-47.445,47.506-125.562-0.482-173.626c-46.543-46.545-127.605-46.545-174.151,0L254.883,500.751
-			c-40.217,40.277-62.661,94.339-62.661,151.887c0,57.61,22.444,111.729,63.141,152.382c81.438,81.514,223.358,81.514,304.764,0
-			l153.947-153.947l87.016,87.047L647.143,892.064C583.221,956.051,498.204,991.438,407.745,991.438z"/>
-	</g>
-</g>
-</svg>
diff --git a/assets/icons/pencil.svg b/assets/icons/pencil.svg
deleted file mode 100755
index 8f6987c..0000000
--- a/assets/icons/pencil.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 27.872l-11.872 3.968 3.936-11.904 19.84-19.84 7.936 7.936-19.84 19.84zM4.064 27.872l5.952-1.984-3.968-3.968-1.984 5.952zM8.032 19.936l3.968 3.968 11.904-11.904-3.968-3.968-11.904 11.904z" fill="#000000" />
-</svg>
diff --git a/assets/icons/picture.svg b/assets/icons/picture.svg
deleted file mode 100755
index 46bdb19..0000000
--- a/assets/icons/picture.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
-<g>
-</g>
-	<path d="M11.424 10.24q0 1.44-0.992 2.432t-2.432 1.024-2.432-1.024-0.992-2.432 0.992-2.4 2.432-1.024 2.432 1.024 0.992 2.4zM29.728 17.12v8h-25.152v-3.424l5.696-5.728 2.88 2.848 9.12-9.12zM31.424 4.544h-28.576q-0.224 0-0.384 0.16t-0.192 0.416v21.696q0 0.256 0.192 0.416t0.384 0.16h28.576q0.224 0 0.416-0.16t0.16-0.416v-21.696q0-0.224-0.16-0.416t-0.416-0.16zM34.272 5.12v21.696q0 1.184-0.832 2.016t-2.016 0.864h-28.576q-1.152 0-2.016-0.864t-0.832-2.016v-21.696q0-1.184 0.832-2.016t2.016-0.864h28.576q1.184 0 2.016 0.864t0.832 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/play.svg b/assets/icons/play.svg
deleted file mode 100755
index 51f08af..0000000
--- a/assets/icons/play.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M24.714 16.554l-23.714 13.179q-0.411 0.232-0.705 0.054t-0.295-0.643v-26.286q0-0.464 0.295-0.643t0.705 0.054l23.714 13.179q0.411 0.232 0.411 0.554t-0.411 0.554z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-circled.svg b/assets/icons/plus-circled.svg
deleted file mode 100755
index 61dae0b..0000000
--- a/assets/icons/plus-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 15.968q0-6.624 4.704-11.328t11.296-4.672 11.328 4.672 4.672 11.328-4.672 11.328-11.328 4.672-11.296-4.672-4.704-11.328zM7.008 18.528h6.432v6.432h5.12v-6.432h6.432v-5.12h-6.432v-6.432h-5.12v6.432h-6.432v5.12z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-circled2.svg b/assets/icons/plus-circled2.svg
deleted file mode 100644
index 7fdf0a6..0000000
--- a/assets/icons/plus-circled2.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<path d="M0,16c0-4.4,1.6-8.2,4.7-11.3S11.6-0.1,16,0s8.2,1.6,11.3,4.7C30.5,7.7,32,11.5,32,16c0,4.5-1.6,8.2-4.7,11.3
-	S20.5,31.9,16,32s-8.2-1.5-11.3-4.7S0.1,20.4,0,16z M3.5,16c0,3.5,1.2,6.4,3.7,8.8c2.5,2.4,5.4,3.7,8.8,3.7c3.4,0,6.4-1.2,8.8-3.7
-	s3.7-5.4,3.7-8.8s-1.2-6.4-3.7-8.8S19.4,3.4,16,3.5c-3.4,0-6.4,1.2-8.8,3.7S3.5,12.5,3.5,16z M7,18.5h6.4V25h5.1v-6.4H25v-5.1h-6.4
-	V7h-5.1v6.4H7C7,13.4,7,18.5,7,18.5z"/>
-</svg>
diff --git a/assets/icons/plus-squared-alt.svg b/assets/icons/plus-squared-alt.svg
deleted file mode 100755
index f72a23e..0000000
--- a/assets/icons/plus-squared-alt.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M20.576 14.24v1.152q0 0.256-0.16 0.416t-0.416 0.16h-6.272v6.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-6.272h-6.272q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.224 0.16-0.384t0.416-0.16h6.272v-6.304q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416v6.304h6.272q0.256 0 0.416 0.16t0.16 0.416zM22.848 22.24v-14.848q0-1.184-0.832-2.016t-2.016-0.832h-14.848q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.048t2.016 0.832h14.848q1.184 0 2.016-0.832t0.832-2.048zM25.152 7.392v14.848q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h14.848q2.112 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus-squared.svg b/assets/icons/plus-squared.svg
deleted file mode 100755
index bd092ad..0000000
--- a/assets/icons/plus-squared.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M22.848 17.12v-2.304q0-0.448-0.32-0.8t-0.8-0.32h-5.728v-5.728q0-0.48-0.352-0.8t-0.8-0.352h-2.272q-0.48 0-0.8 0.352t-0.352 0.8v5.728h-5.696q-0.48 0-0.832 0.32t-0.32 0.8v2.304q0 0.448 0.32 0.8t0.832 0.32h5.696v5.728q0 0.448 0.352 0.8t0.8 0.352h2.272q0.48 0 0.8-0.352t0.352-0.8v-5.728h5.728q0.448 0 0.8-0.32t0.32-0.8zM27.424 7.392v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z" fill="#000000" />
-</svg>
diff --git a/assets/icons/plus.svg b/assets/icons/plus.svg
deleted file mode 100755
index 43a8e78..0000000
--- a/assets/icons/plus.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 20.48v-9.024h11.488v-11.488h9.024v11.488h11.488v9.024h-11.488v11.488h-9.024v-11.488h-11.488z" fill="#000000" />
-</svg>
diff --git a/assets/icons/popin.svg b/assets/icons/popin.svg
deleted file mode 100755
index 246497c..0000000
--- a/assets/icons/popin.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15 16.926l7.784 0.046-2.525-2.525 5.017-5.017-2.666-2.665-5.016 5.017-2.59-2.591-0.004 7.735zM25.926 16.944l-1.92-1.947 0.035 9.007-16.015 0.009 0.016-15.974 8.958-0.039-2-2h-7c-1.104 0-2 0.896-2 2v16c0 1.104 0.896 2 2 2h16c1.104 0 2-0.896 2-2l-0.074-7.056z" fill="#000000" />
-</svg>
diff --git a/assets/icons/popout.svg b/assets/icons/popout.svg
deleted file mode 100755
index 3999c64..0000000
--- a/assets/icons/popout.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M15.694 13.541l2.666 2.665 5.016-5.017 2.59 2.59 0.004-7.734-7.785-0.046 2.526 2.525-5.017 5.017zM25.926 16.945l-1.92-1.947 0.035 9.007-16.015 0.009 0.016-15.973 8.958-0.040-2-2h-7c-1.104 0-2 0.896-2 2v16c0 1.104 0.896 2 2 2h16c1.104 0 2-0.896 2-2l-0.074-7.056z" fill="#000000" />
-</svg>
diff --git a/assets/icons/profile.svg b/assets/icons/profile.svg
deleted file mode 100755
index 76f9e4c..0000000
--- a/assets/icons/profile.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.784 31.904h-29.664c0-3.84 4.48-7.040 10.592-8.096v-1.568c-2.528-1.472-4.224-4.192-4.224-7.296v-0.224c-1.248-0.448-2.112-1.6-2.112-2.976s0.864-2.528 2.112-2.944v-0.224c0-4.672 3.776-8.48 8.48-8.48s8.48 3.808 8.48 8.48v0.224c1.216 0.416 2.112 1.568 2.112 2.944s-0.896 2.528-2.112 2.976v0.224c0 3.104-1.728 5.824-4.256 7.296v1.568c6.112 1.056 10.592 4.256 10.592 8.096z" fill="#000000" />
-</svg>
diff --git a/assets/icons/replicate.svg b/assets/icons/replicate.svg
deleted file mode 100755
index f5c001a..0000000
--- a/assets/icons/replicate.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M12 21.952h2.016v4h-2.016v-4zM16 21.952h2.016v4h-2.016v-4zM20 21.952h2.016v4h-2.016v-4zM26.016 18.976h-2.016v9.984h2.016l5.984-4.992-5.984-4.992zM32 2.976h-9.984v9.984h9.984v-9.984zM28.992 9.952h-4v-4h4v4zM0 28.96h10.016v-9.984h-10.016v9.984zM3.008 21.952h4v4h-4v-4zM18.016 5.952h1.984v4h-1.984v-4zM14.016 5.952h1.984v4h-1.984v-4zM10.016 5.952h1.984v4h-1.984v-4zM8 12.96v-9.984h-2.016l-5.984 4.992 5.984 4.992h2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/reply-all.svg b/assets/icons/reply-all.svg
deleted file mode 100755
index bf277d2..0000000
--- a/assets/icons/reply-all.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50" height="32" viewBox="0 0 50 32">
-<g>
-</g>
-	<path d="M16.032-0.032v5.824l-10.208 10.208 10.208 10.176v5.792l-16.032-15.968zM27.712-0.032v10.208q3.52 0.48 6.528 1.44t5.088 2.176 3.776 2.624 2.752 2.912 1.824 2.88 1.12 2.688 0.576 2.208 0.224 1.504v0.544q-0.192-0.352-0.608-0.928t-2.144-2.048-4-2.432q-2.272-1.024-6.304-1.664-2.464-0.384-5.152-0.384-1.76 0-3.68 0.16v10.112l-16.032-15.968z" fill="#000000" />
-</svg>
diff --git a/assets/icons/reply.svg b/assets/icons/reply.svg
deleted file mode 100755
index c48a5f6..0000000
--- a/assets/icons/reply.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="38" height="32" viewBox="0 0 38 32">
-<g>
-</g>
-	<path d="M16.032-0.032v10.208q3.52 0.48 6.528 1.44t5.088 2.176 3.776 2.624 2.752 2.912 1.824 2.88 1.12 2.688 0.576 2.208 0.192 1.504l0.032 0.544q-0.192-0.352-0.608-0.928t-2.144-2.048-4-2.432-6.272-1.664q-2.464-0.384-5.184-0.384-1.76 0-3.68 0.16v10.112l-16.032-15.968z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-full-reverse.svg b/assets/icons/resize-full-reverse.svg
deleted file mode 100755
index c7562a4..0000000
--- a/assets/icons/resize-full-reverse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M17.9 32l4.7-4.7-6.4-6.5 4.6-4.6 6.5 6.4 4.7-4.7v14.1h-14.1zM11.2 15.8l-6.5-6.5-4.7 4.8v-14.1h14.1l-4.7 4.7 6.4 6.5-4.6 4.6z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-full.svg b/assets/icons/resize-full.svg
deleted file mode 100755
index 443bc0f..0000000
--- a/assets/icons/resize-full.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 31.968v-14.112l4.736 4.736 6.464-6.432 4.608 4.608-6.432 6.464 4.736 4.736h-14.112zM16.192 11.168l6.432-6.464-4.736-4.736h14.112v14.112l-4.736-4.736-6.464 6.432z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-small-reverse.svg b/assets/icons/resize-small-reverse.svg
deleted file mode 100755
index a60122d..0000000
--- a/assets/icons/resize-small-reverse.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M27.3 32l-6.4-6.4-4.7 4.7v-14.1h14.1l-4.7 4.7 6.4 6.5-4.7 4.6zM1.7 15.8l4.7-4.7-6.4-6.4 4.7-4.7 6.5 6.4 4.7-4.7v14.1c-0.1 0-14.2 0-14.2 0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/resize-small.svg b/assets/icons/resize-small.svg
deleted file mode 100755
index 4a4a5aa..0000000
--- a/assets/icons/resize-small.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 27.328l6.432-6.464-4.736-4.672h14.112v14.112l-4.672-4.736-6.432 6.432zM16.192 15.808v-14.112l4.672 4.736 6.464-6.432 4.672 4.672-6.432 6.464 4.736 4.672h-14.112z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-1.svg b/assets/icons/right-1.svg
deleted file mode 100755
index a708b50..0000000
--- a/assets/icons/right-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M14.848 1.664l14.304 14.272-14.304 14.336-5.024-5.12 5.6-5.632h-14.848v-7.168h14.848l-5.6-5.632z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-circled.svg b/assets/icons/right-circled.svg
deleted file mode 100755
index 9a9d85f..0000000
--- a/assets/icons/right-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M20.576 16q0 0.256-0.16 0.416l-5.728 5.696q-0.16 0.16-0.416 0.16-0.224 0-0.384-0.16t-0.16-0.384v-3.456h-6.304q-0.224 0-0.384-0.16t-0.192-0.384v-3.456q0-0.224 0.192-0.384t0.384-0.16h6.304v-3.456q0-0.224 0.16-0.384t0.384-0.16 0.448 0.16l5.696 5.696q0.16 0.16 0.16 0.416zM23.424 16q0-2.656-1.312-4.864t-3.52-3.552-4.864-1.312-4.896 1.312-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864zM27.424 16q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-dir.svg b/assets/icons/right-dir.svg
deleted file mode 100755
index c9aafd2..0000000
--- a/assets/icons/right-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="11" height="32" viewBox="0 0 11 32">
-<g>
-</g>
-	<path d="M10.272 15.968q0 0.448-0.32 0.8l-8 8q-0.352 0.352-0.8 0.352t-0.8-0.352-0.352-0.8v-16q0-0.48 0.352-0.8t0.8-0.352 0.8 0.352l8 8q0.32 0.32 0.32 0.8z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right-open.svg b/assets/icons/right-open.svg
deleted file mode 100755
index f547f22..0000000
--- a/assets/icons/right-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="32" viewBox="0 0 21 32">
-<g>
-</g>
-	<path d="M0 27.232l11.264-11.264-11.264-11.264 4.736-4.736 11.264 11.232 4.736 4.768-16 16z" fill="#000000" />
-</svg>
diff --git a/assets/icons/right.svg b/assets/icons/right.svg
deleted file mode 100755
index bc2f94b..0000000
--- a/assets/icons/right.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.848 15.904q0 0.256-0.16 0.448l-6.88 6.304q-0.288 0.256-0.608 0.128-0.352-0.16-0.352-0.544v-4h-22.272q-0.256 0-0.416-0.16t-0.16-0.384v-3.456q0-0.224 0.16-0.384t0.416-0.16h22.272v-4q0-0.384 0.352-0.544t0.608 0.096l6.88 6.272q0.16 0.16 0.16 0.384z" fill="#000000" />
-</svg>
diff --git a/assets/icons/save.svg b/assets/icons/save.svg
deleted file mode 100755
index 47e33f0..0000000
--- a/assets/icons/save.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M6.848 27.392h13.728v-6.848h-13.728v6.848zM22.848 27.392h2.304v-16q0-0.256-0.192-0.672t-0.352-0.64l-5.024-4.992q-0.16-0.192-0.608-0.384t-0.704-0.16v7.424q0 0.704-0.48 1.216t-1.216 0.512h-10.304q-0.704 0-1.184-0.512t-0.512-1.216v-7.424h-2.304v22.848h2.304v-7.424q0-0.704 0.512-1.216t1.184-0.512h14.88q0.704 0 1.216 0.512t0.48 1.216v7.424zM16 10.816v-5.696q0-0.256-0.16-0.416t-0.416-0.16h-3.424q-0.224 0-0.416 0.16t-0.16 0.416v5.696q0 0.256 0.16 0.416t0.416 0.16h3.424q0.224 0 0.416-0.16t0.16-0.416zM27.424 11.392v16.576q0 0.704-0.48 1.216t-1.216 0.512h-24q-0.736 0-1.216-0.512t-0.512-1.216v-24q0-0.704 0.512-1.216t1.216-0.512h16.544q0.736 0 1.6 0.384t1.344 0.832l4.992 5.024q0.512 0.48 0.864 1.344t0.352 1.568z" fill="#000000" />
-</svg>
diff --git a/assets/icons/search.svg b/assets/icons/search.svg
deleted file mode 100755
index 78712d9..0000000
--- a/assets/icons/search.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M30.976 26.752l-6.976-6.976c1.216-1.984 1.952-4.288 1.952-6.752 0-7.136-5.792-12.928-12.928-12.928s-12.928 5.792-12.928 12.928c0 7.136 5.792 12.928 12.928 12.928 2.496 0 4.768-0.736 6.752-1.952l6.976 6.976c1.184 1.184 3.072 1.184 4.224 0 1.184-1.152 1.184-3.040 0-4.224zM13.024 21.952c-4.96 0-8.96-4-8.96-8.928 0-4.96 4-8.96 8.96-8.96 4.928 0 8.928 4 8.928 8.96 0 4.928-4 8.928-8.928 8.928z" fill="#000000" />
-</svg>
diff --git a/assets/icons/select-all.svg b/assets/icons/select-all.svg
deleted file mode 100644
index 5877dcb..0000000
--- a/assets/icons/select-all.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
-<path d="M18,32h-4v-3h4V32z M8,3h3V0H8V3z M11,32v-3H8v3H11z M14,0v3h4V0H14z M27,3h2v2h3V0h-5V3z M3,18v-4H0v4H3z M0,11h3V8H0V11z
-	 M3,24v-3H0v3H3z M24,29h-3v3h3V29z M5,29H3v-2H0v5h5V29z M29,27v2h-2v3h5v-5H29z M29,8v3h3V8H29z M3,5V3h2V0H0v5H3z M21,0v3h3V0H21
-	z M29,14v4h3v-4H29z M32,21h-3v3h3V21z M9.2,22.9c1.8,1.8,4.1,2.8,6.8,2.8c2.7,0,4.9-0.9,6.8-2.8c1.8-1.8,2.8-4.1,2.8-6.8
-	c0-2.7-0.9-4.9-2.8-6.8c-2-1.9-4.2-2.8-6.8-2.8c-2.6,0-4.9,0.9-6.8,2.8s-2.8,4.1-2.8,6.8C6.4,18.7,7.4,21,9.2,22.9z M11.9,15.2
-	l2,2.1l6.2-6.3l2,2l-6.2,6.2l-2,2l-4-4L11.9,15.2z"/>
-</svg>
diff --git a/assets/icons/sidenav-filter-function.svg b/assets/icons/sidenav-filter-function.svg
deleted file mode 100644
index 418481d..0000000
--- a/assets/icons/sidenav-filter-function.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<path d="M15.774,12.714h-4.571v1.524h3.048v1.523h-3.048v3.048H8.156V11.19h7.619V12.714z M24.917,12.714h-4.571v1.524h3.048v1.523
-	h-3.048v3.048h-3.048V11.19h7.619V12.714z M24.904,27H7.095C3.183,27,0,23.816,0,19.904v-8.809C0,7.183,3.183,4,7.095,4h17.809
-	C28.816,4,32,7.183,32,11.095v8.809C32,23.816,28.816,27,24.904,27z M7.095,6C4.286,6,2,8.286,2,11.095v8.809
-	C2,22.714,4.286,25,7.095,25h17.809C27.714,25,30,22.714,30,19.904v-8.809C30,8.286,27.714,6,24.904,6H7.095z"/>
-</svg>
diff --git a/assets/icons/sidenav-info.svg b/assets/icons/sidenav-info.svg
deleted file mode 100644
index 034e9c6..0000000
--- a/assets/icons/sidenav-info.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<g>
-		<path d="M24.904,5H7.095C3.183,5,0,8.183,0,12.095v8.809C0,24.816,3.183,28,7.095,28h17.809C28.816,28,32,24.816,32,20.904v-8.809
-			C32,8.183,28.816,5,24.904,5z M30,20.904C30,23.714,27.714,26,24.904,26H7.095C4.286,26,2,23.714,2,20.904v-8.809
-			C2,9.286,4.286,7,7.095,7h17.809C27.714,7,30,9.286,30,12.095V20.904z"/>
-		<polygon points="19,18 19,14 15,14 12,14 12,18 15,18 15,21 12,21 12,24 15,24 19,24 20,24 20,21 19,21 		"/>
-		<rect x="16" y="9" width="3" height="3"/>
-	</g>
-</g>
-</svg>
diff --git a/assets/icons/sidenav-list-function.svg b/assets/icons/sidenav-list-function.svg
deleted file mode 100644
index 2d5f6af..0000000
--- a/assets/icons/sidenav-list-function.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<path d="M13.203,17.285h3.048v1.524h-6.095V11.19h3.047V17.285z M25.394,12.714h-4.571v1.524h3.048v1.523h-3.048v3.048h-3.048
-		V11.19h7.619V12.714z M24.904,27H7.095C3.183,27,0,23.816,0,19.904v-8.809C0,7.183,3.183,4,7.095,4h17.809
-		C28.816,4,32,7.183,32,11.095v8.809C32,23.816,28.816,27,24.904,27z M7.095,6C4.286,6,2,8.286,2,11.095v8.809
-		C2,22.714,4.286,25,7.095,25h17.809C27.714,25,30,22.714,30,19.904v-8.809C30,8.286,27.714,6,24.904,6H7.095z"/>
-</g>
-</svg>
diff --git a/assets/icons/sidenav-map-reduce.svg b/assets/icons/sidenav-map-reduce.svg
deleted file mode 100644
index 0a6b6f6..0000000
--- a/assets/icons/sidenav-map-reduce.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<path d="M17.775,12.19v7.619h-3.048v-6.095h-1.524v6.095h-3.048v-6.095H8.631v6.095H5.584V12.19H17.775z M25.394,16.762h1.523
-		v3.048H23.87v-3.048h-1.524v3.048h-3.048V12.19h7.619v3.048h-1.523V16.762z M22.346,15.238h1.463v-1.524h-1.463V15.238z M24.904,28
-		H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809
-		C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809
-		C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z"/>
-</g>
-</svg>
diff --git a/assets/icons/sidenav-search.svg b/assets/icons/sidenav-search.svg
deleted file mode 100644
index 3598fb8..0000000
--- a/assets/icons/sidenav-search.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<path d="M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809
-		C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809
-		C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z M22.428,20.333c0.223,0.223,0.334,0.492,0.334,0.81
-		s-0.111,0.587-0.334,0.81s-0.492,0.334-0.809,0.334c-0.318,0-0.588-0.111-0.811-0.334l-2.643-2.666
-		c-0.824,0.492-1.682,0.737-2.571,0.737c-1.35,0-2.508-0.479-3.477-1.439c-0.968-0.961-1.452-2.124-1.452-3.489
-		c0-1.349,0.48-2.503,1.44-3.464c0.96-0.96,2.123-1.44,3.488-1.44c1.366,0,2.528,0.48,3.489,1.44
-		c0.959,0.961,1.439,2.115,1.439,3.464c0,0.857-0.254,1.714-0.762,2.571L22.428,20.333z M13.178,17.5c0.675,0.666,1.48,1,2.417,1
-		c0.936,0,1.739-0.334,2.405-1c0.666-0.667,1-1.468,1-2.405c0-0.937-0.334-1.738-1-2.405c-0.666-0.667-1.469-1-2.405-1
-		c-0.937,0-1.742,0.333-2.417,1c-0.675,0.667-1.012,1.468-1.012,2.405C12.167,16.032,12.503,16.833,13.178,17.5z"/>
-</g>
-</svg>
diff --git a/assets/icons/sidenav-show-function.svg b/assets/icons/sidenav-show-function.svg
deleted file mode 100644
index ced3451..0000000
--- a/assets/icons/sidenav-show-function.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<path d="M15.774,13.714h-4.571v1.524h4.571v4.571H8.156v-1.523h4.571v-1.524H8.156V12.19h7.619V13.714z M24.917,13.714h-4.571
-		v1.524h3.048v1.523h-3.048v3.048h-3.048V12.19h7.619V13.714z M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809
-		C0,8.183,3.183,5,7.095,5h17.809C28.816,5,32,8.183,32,12.095v8.809C32,24.816,28.816,28,24.904,28z M7.095,7
-		C4.286,7,2,9.286,2,12.095v8.809C2,23.714,4.286,26,7.095,26h17.809C27.714,26,30,23.714,30,20.904v-8.809
-		C30,9.286,27.714,7,24.904,7H7.095z"/>
-</g>
-</svg>
diff --git a/assets/icons/sidenav-update-function.svg b/assets/icons/sidenav-update-function.svg
deleted file mode 100644
index 749fa07..0000000
--- a/assets/icons/sidenav-update-function.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
-<g id="New_Symbol">
-	<path d="M15.203,19.81H7.584V12.19h3.047v6.096h1.524V12.19h3.048V19.81z M24.346,13.714h-4.571v1.524h3.048v1.523h-3.048v3.048
-		h-3.047V12.19h7.619V13.714z M24.904,28H7.095C3.183,28,0,24.816,0,20.904v-8.809C0,8.183,3.183,5,7.095,5h17.809
-		C28.816,5,32,8.183,32,12.095v8.809C32,24.816,28.816,28,24.904,28z M7.095,7C4.286,7,2,9.286,2,12.095v8.809
-		C2,23.714,4.286,26,7.095,26h17.809C27.714,26,30,23.714,30,20.904v-8.809C30,9.286,27.714,7,24.904,7H7.095z"/>
-</g>
-</svg>
diff --git a/assets/icons/sitemap.svg b/assets/icons/sitemap.svg
deleted file mode 100755
index 4aebd4c..0000000
--- a/assets/icons/sitemap.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M32 22.24v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.704 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424h-9.12v3.424h1.696q0.736 0 1.216 0.48t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.736 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424h-9.12v3.424h1.696q0.704 0 1.216 0.48t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.512h-5.696q-0.736 0-1.216-0.512t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.48h1.696v-3.424q0-0.928 0.672-1.632t1.632-0.672h9.12v-3.424h-1.696q-0.736 0-1.216-0.48t-0.512-1.216v-5.728q0-0.704 0.512-1.216t1.216-0.512h5.696q0.736 0 1.216 0.512t0.512 1.216v5.728q0 0.704-0.512 1.216t-1.216 0.48h-1.696v3.424h9.12q0.928 0 1.632 0.672t0.672 1.632v3.424h1.696q0.736 0 1.216 0.48t0.512 1.216z" fill="#000000" />
-</svg>
diff --git a/assets/icons/stats.svg b/assets/icons/stats.svg
deleted file mode 100755
index 71dcdc3..0000000
--- a/assets/icons/stats.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M14.304 3.392h-0.064c-7.84 0.032-14.144 6.4-14.144 14.24s6.368 14.24 14.208 14.24c7.872 0 14.24-6.4 14.24-14.24-3.616 0-14.24 0-14.24 0s0-10.464 0-14.24zM31.936 15.392c0-8.448-6.88-15.328-15.328-15.328-0.064 0-0.032 15.36-0.032 15.36l15.36-0.032z" fill="#000000" />
-</svg>
diff --git a/assets/icons/support.svg b/assets/icons/support.svg
deleted file mode 100755
index 8d8d643..0000000
--- a/assets/icons/support.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M31.872 15.936c0 0.672-0.064 1.312-0.128 1.984-0.032 0.16-0.064 0.32-0.064 0.48-0.096 0.544-0.192 1.056-0.352 1.6-0.032 0.096-0.032 0.192-0.064 0.288-0.384 1.312-0.928 2.56-1.6 3.712-1.376 2.304-3.296 4.224-5.6 5.6-1.152 0.672-2.4 1.216-3.712 1.6-0.096 0.032-0.192 0.032-0.288 0.064-0.512 0.128-1.056 0.256-1.6 0.32-0.16 0.032-0.32 0.064-0.48 0.096-0.64 0.064-1.312 0.128-1.984 0.128v0 0c-0.672 0-1.312-0.064-1.984-0.128-0.16-0.032-0.288-0.064-0.448-0.064-0.544-0.096-1.088-0.224-1.632-0.352-0.064-0.032-0.16-0.032-0.256-0.064-1.312-0.384-2.56-0.928-3.712-1.6-2.336-1.376-4.256-3.296-5.632-5.6-0.672-1.152-1.216-2.4-1.6-3.712 0-0.096-0.032-0.192-0.064-0.288-0.128-0.544-0.256-1.056-0.32-1.6-0.032-0.16-0.064-0.32-0.064-0.48-0.096-0.672-0.16-1.312-0.16-1.984v0 0c0-0.672 0.064-1.344 0.128-1.984 0.032-0.16 0.064-0.32 0.096-0.48 0.064-0.544 0.192-1.056 0.32-1.6 0.032-0.096 0.032-0.192 0.064-0.288 0.384-1.312 0.928-2.56 1.6-3.712 1.376-2.304 3.296-4.224 5.632-5.6 1.12-0.672 2.4-1.216 3.712-1.6 0.064-0.032 0.16-0.032 0.256-0.064 0.544-0.128 1.056-0.256 1.6-0.32 0.16-0.032 0.32-0.064 0.48-0.096 0.672-0.064 1.312-0.128 1.984-0.128v0 0c0.672 0 1.344 0.064 1.984 0.128 0.16 0.032 0.32 0.064 0.48 0.064 0.544 0.096 1.056 0.224 1.6 0.352 0.096 0.032 0.192 0.032 0.288 0.064 1.312 0.384 2.56 0.928 3.712 1.6 2.304 1.376 4.224 3.296 5.6 5.6 0.672 1.152 1.216 2.4 1.6 3.712 0.032 0.096 0.032 0.192 0.064 0.288 0.128 0.512 0.256 1.056 0.32 1.6 0.032 0.16 0.064 0.32 0.096 0.48 0.064 0.64 0.128 1.312 0.128 1.984v0 0zM6.784 12.32l-2.944-2.944c-1.056 1.952-1.728 4.16-1.728 6.56s0.672 4.608 1.728 6.56l2.944-2.944c-0.448-1.12-0.704-2.336-0.704-3.616 0-1.28 0.256-2.496 0.704-3.616zM16 29.824c2.4 0 4.608-0.64 6.56-1.728l-2.944-2.944c-1.12 0.448-2.336 0.704-3.616 0.704-1.28 0-2.496-0.256-3.616-0.704l-2.944 2.944c1.952 1.088 4.16 1.728 6.56 1.728zM16 2.048c-2.4 0-4.608 0.672-6.56 1.728l2.944 2.944c1.12-0.448 2.336-0.704 3.616-0.704s2.496 0.256 3.616 0.704l2.944-2.944c-1.952-1.056-4.16-1.728-6.56-1.728zM23.648 13.92v0c-0.736-2.752-2.88-4.896-5.632-5.632v0 0c-0.256-0.064-0.512-0.128-0.8-0.16-0.384-0.064-0.8-0.128-1.216-0.128-0.416 0-0.832 0.064-1.216 0.128-0.288 0.032-0.544 0.096-0.8 0.16v0 0c-2.752 0.736-4.896 2.88-5.632 5.632v0 0c-0.064 0.256-0.128 0.512-0.16 0.8-0.064 0.384-0.128 0.8-0.128 1.216 0 0.416 0.064 0.832 0.128 1.216 0.032 0.288 0.096 0.544 0.16 0.8v0 0c0.736 2.752 2.88 4.896 5.632 5.632v0 0c0.256 0.064 0.512 0.128 0.8 0.16 0.384 0.064 0.8 0.128 1.216 0.128 0.416 0 0.832-0.064 1.216-0.128 0.288-0.032 0.544-0.096 0.832-0.16v0 0c2.72-0.736 4.864-2.88 5.6-5.632v0 0c0.064-0.256 0.128-0.512 0.16-0.8 0.064-0.384 0.128-0.8 0.128-1.216 0-0.416-0.064-0.832-0.128-1.216-0.032-0.288-0.096-0.544-0.16-0.8v0zM28.16 9.376l-2.944 2.944c0.448 1.12 0.704 2.336 0.704 3.616s-0.256 2.496-0.704 3.616l2.944 2.944c1.088-1.952 1.728-4.16 1.728-6.56 0-2.4-0.64-4.608-1.728-6.56z" fill="#000000" />
-</svg>
diff --git a/assets/icons/swap-arrows.svg b/assets/icons/swap-arrows.svg
deleted file mode 100644
index 48c1eae..0000000
--- a/assets/icons/swap-arrows.svg
+++ /dev/null
@@ -1,1318 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="1000px" height="1000px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
-<g id="Layer_1_3_" display="none">
-	<g id="Layer_1_2_" display="inline">
-		
-			<g id="Layer_1_1_" inkscape:version="0.48.2 r9819" sodipodi:docname="clock_scaled.svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd">
-			
-				<sodipodi:namedview  inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1916" inkscape:window-height="1036" inkscape:guide-bbox="true" inkscape:current-layer="Layer_1" inkscape:window-x="4" inkscape:window-maximized="0" inkscape:window-y="22" inkscape:zoom="0.5" pagecolor="#ffffff" showguides="true" inkscape:cx="500" inkscape:cy="451.84046" bordercolor="#666666" objecttolerance="10" gridtolerance="10" guidetolerance="10" showgrid="false" id="namedview3067" borderopacity="1">
-				</sodipodi:namedview>
-			<g id="g3061" transform="matrix(38.592158,0,0,38.593647,-11301.328,-14803.751)">
-				<path id="path3063" inkscape:connector-curvature="0" d="M305.796,383.58c-7.155,0-12.956,5.8-12.956,12.956
-					s5.801,12.955,12.956,12.955c7.155,0,12.956-5.799,12.956-12.955S312.951,383.58,305.796,383.58z M305.796,406.252
-					c-5.358,0-9.717-4.359-9.717-9.716c0-5.358,4.359-9.716,9.717-9.716c5.357,0,9.716,4.358,9.716,9.716
-					C315.513,401.893,311.153,406.252,305.796,406.252z"/>
-				<path id="path3065" inkscape:connector-curvature="0" d="M312.081,399.439l-5.125-3.461v-5.959c0-0.142-0.057-0.28-0.158-0.382
-					c-0.101-0.1-0.239-0.158-0.382-0.158H305c-0.143,0-0.281,0.059-0.382,0.158c-0.1,0.102-0.157,0.241-0.157,0.382v7.037
-					c0,0.142,0.057,0.28,0.157,0.382c0.042,0.041,0.089,0.074,0.14,0.1l5.971,4c0.09,0.06,0.194,0.092,0.3,0.092
-					c0.038,0,0.076-0.006,0.115-0.014c0.143-0.031,0.266-0.117,0.344-0.242l0.751-1.2
-					C312.391,399.928,312.322,399.602,312.081,399.439L312.081,399.439z"/>
-			</g>
-			<g id="Fork__x2F__Knife_copy_3">
-				<g>
-					<path d="M381.613,42.025h-1.729c0.042,0.626,0.064,1.254,0.064,1.882l-0.231,283.326c0,19.722-11.172,34.556-30.2,34.556
-						c-19.022,0-36.591-15.975-36.591-35.697L312.19,42.025h-68.208l-0.736,284.067c0,19.722-17.563,35.697-36.592,35.697
-						c-19.036,0-30.2-14.834-30.2-34.556l-0.231-283.326c0-0.628,0.022-1.255,0.064-1.882h-1.606
-						c-25.212,0-45.643,24.349-45.643,54.387l-21.3,278.192c0,79.535,41.597,146.895,110.692,169.892l-41.688,320.803
-						c-7.602,66.491,37.309,128.188,101.417,128.188c64.104,0,109.024-61.695,101.417-128.188l-42.148-324.34
-						c66.515-25.826,111.129-90.562,111.129-166.355L427.256,96.412C427.256,66.374,406.825,42.025,381.613,42.025z
-						 M890.619,865.298l-43.362-333.729c14.694-43.554,11.042-104.943,11.042-162.453l-0.555-200.922
-						c0-104.363,6.568-163.113-87.494-163.113c-68.325,0-117.392,260.768-117.392,391.159c0,89.035,1.854,169.086,71.265,189.463
-						L687.785,865.3c-7.604,66.491,37.312,128.188,101.432,128.188C853.318,993.484,898.236,931.789,890.619,865.298z"/>
-				</g>
-			</g>
-			<g id="Coffee_Cup_copy_5">
-				<g>
-					<path d="M868.535,346.061c-7.253,0-14.354,2.084-21.24,5.894c0.833-14.979,1.448-30.36,1.852-46.135
-						c0.365-2.916,0.557-5.852,0.557-8.803c0-1.946-0.088-3.884-0.248-5.814c0.158-9.517,0.248-19.161,0.248-28.97h-8.771
-						c-39.521-77.244-208.016-135.284-409.9-135.284c-201.875,0-370.373,58.041-409.893,135.284h-8.77
-						c0,9.818,0.087,19.477,0.245,29.006c-0.158,1.918-0.245,3.844-0.245,5.778c0,6.584,0.282,12.913,0.834,18.998
-						C26.93,749.146,208.745,872.088,431.028,872.088c148.137,0,278.296-54.593,352.718-219.193
-						c21.369,3.397,51.458-4.771,84.796-4.771c64.82,0,117.391-67.619,117.391-151.014
-						C985.926,413.679,933.355,346.061,868.535,346.061z M426.754,389.691c-180.338,0-326.557-39.579-326.557-88.406
-						c0-48.827,146.219-88.406,326.557-88.406c180.354,0,326.557,39.579,326.557,88.406
-						C753.311,350.112,607.107,389.691,426.754,389.691z M864.684,559.48c-33.391,0-40.459,0-40.459,0s9.201-137.914,42.578-137.914
-						s60.433,33.763,60.433,75.396S898.045,559.48,864.684,559.48z"/>
-				</g>
-			</g>
-			<g id="Shape_116_1_">
-				<g>
-					<path d="M499.475,168.775c-133.939,0-428.312,29.208-428.312,243.366h856.63C927.79,197.983,633.404,168.775,499.475,168.775z
-						 M499.475,830.721c133.945,0,428.315,0,428.315-155.758H71.159C71.159,830.721,365.544,830.721,499.475,830.721z
-						 M927.79,519.221h-29.207c-25.72,0-59.904,21.068-92.987,41.476c-38.479,23.72-74.848,46.137-111.436,46.137
-						c-31.129,0-67.313-16.604-109.218-35.827c-52.896-24.262-112.877-51.779-173.075-51.779H71.159
-						c-32.246,0-58.4,26.152-58.4,58.398s26.154,58.416,58.4,58.416H927.79c32.246,0,58.399-26.17,58.399-58.416
-						S960.036,519.221,927.79,519.221z M32.231,490.012c0,0,194.686,0,379.636,0c44.261,0,87.604,13.146,127.604,29.208
-						c7.896,3.162,15.627,6.449,23.238,9.771c0.155,0.062,0.264,0.125,0.419,0.202c28.216,12.319,54.322,25.108,77.359,34.463
-						c0.419,0.187,0.853,0.341,1.271,0.512c4.79,1.923,9.487,3.736,14.016,5.317c0.188,0.073,0.355,0.124,0.562,0.195
-						c4.17,1.442,8.186,2.688,12.092,3.783c0.62,0.17,1.287,0.372,1.906,0.543c3.861,1.038,7.582,1.829,11.162,2.438
-						c0.729,0.124,1.427,0.217,2.141,0.326c3.658,0.49,7.193,0.852,10.525,0.852c3.287,0,6.666-0.354,10.093-0.883
-						c0.667-0.094,1.333-0.188,2.016-0.312c3.333-0.604,6.719-1.408,10.154-2.418c0.604-0.187,1.194-0.389,1.782-0.59
-						c3.411-1.054,6.822-2.279,10.311-3.688c0.248-0.108,0.518-0.188,0.765-0.301c3.752-1.52,7.528-3.271,11.349-5.109
-						c0.604-0.295,1.178-0.574,1.768-0.869c23.504-11.627,48.523-28.494,73.577-43.146c28.267-16.557,56.539-30.292,82.615-30.292
-						c58.398,0,68.135,0,68.135,0c10.744,0,19.477-8.712,19.477-19.472c0-10.743-8.729-19.456-19.477-19.456H32.231
-						c-10.743,0-19.472,8.713-19.472,19.456C12.759,481.3,21.488,490.012,32.231,490.012z"/>
-				</g>
-			</g>
-			<g id="Shape_91">
-				<g>
-					<path d="M215.181,491.383c86.132-179.95,201.292-274.255,274.375-319.438l-60.383-83.668c0,0-202.715,71.487-333.961,345.689
-						C-36.015,708.152,35.455,910.885,35.455,910.885l103.032-5.465C127.834,820.155,129.049,671.333,215.181,491.383z
-						 M512.146,203.229c-68.189,42.077-180.192,132.183-262.697,304.55c-82.506,172.386-82.438,316.124-72.425,395.593
-						l809.335-42.875L512.146,203.229z M423.031,717.244c-18.132,37.861-63.506,53.854-101.366,35.744
-						c-37.86-18.132-53.858-63.506-35.743-101.366c18.114-37.86,63.506-53.858,101.366-35.744
-						C425.148,634.011,441.146,679.384,423.031,717.244z M576.521,748.581c-9.062,18.931-31.725,26.946-50.666,17.872
-						c-18.947-9.062-26.936-31.753-17.872-50.666c9.058-18.913,31.729-26.946,50.684-17.872
-						C577.597,706.973,585.578,729.668,576.521,748.581z M598.21,527.266c-13.586,28.393-47.611,40.411-76.016,26.812
-						c-28.422-13.604-40.396-47.646-26.812-76.021c13.586-28.387,47.601-40.405,76.021-26.808
-						C599.824,464.853,611.796,498.879,598.21,527.266z M712.902,771.729c-28.422-13.604-40.396-47.63-26.812-76.017
-						s47.6-40.411,76.021-26.808c28.422,13.603,40.395,47.646,26.809,76.016C775.332,773.307,741.307,785.331,712.902,771.729z"/>
-				</g>
-			</g>
-			<g id="Shape_85">
-				<g>
-					<path d="M555.163,569.594c144.896-35.427,254.812-201.206,254.812-362.249h-0.025v-62.184c1.183-8.377,1.684-13.05,1.684-13.05
-						h-1.684V-1.298H187.322v208.643c0,161.518,110.663,327.983,256.389,362.614c3.452,0.896,6.95,1.708,10.494,2.438v339.7
-						c-150.878,6.167-266.851,43.172-266.851,87.901h622.621c0-44.729-116.037-81.734-266.836-87.901v-339.68
-						C547.205,571.586,551.214,570.646,555.163,569.594z M765.467,43.177l0.026,88.936H231.797V43.177H765.467z"/>
-				</g>
-			</g>
-			<g id="Shape_84">
-				<g>
-					<path d="M750.273,452.651c-21.689,1.42-173.646,23.873-131.484-15.462c69.436-64.796,221.329,19.553,298.779-82.884
-						C1007.337,235.581,810.14,5.855,680.426,6.1c-98.146,13.982-146.002,96.058-157.572,186.024
-						c-17.318,134.706,1.496,183.551-35.818,47.151C442.489,76.604,376.075-46.562,208.994,73.827
-						C142.717,121.573,36.983,226.269,58.017,315.351c33.52,141.91,193.259,92.913,291.224,123.089
-						c121.457,37.396-112.069,13.646-155.037,23.477C109.258,481.332,25.55,531.002,43.256,634.188
-						c10.502,61.361,142.72,222.967,200.647,239.951c109.428,32.133,177.552-76.794,199.532-167.899
-						c28.162-116.71,48.402-145.375,36.665-1.083c-6.817,83.922-43.335,278.396,40.129,290.245
-						c61.941,0.382-16.348-302.021,4.854-374.22c24.194-82.438,41.732,90.775,55.653,120.927
-						c40.328,87.321,113.271,161.368,211.958,110.711C989.172,751.934,1040.582,433.785,750.273,452.651z"/>
-				</g>
-			</g>
-			<g id="Shape_113">
-				<g>
-					<path d="M390.73,808.576h36.259v-507.67H390.73V808.576z M535.766,808.576h36.273v-507.67h-36.273V808.576z M680.816,808.576
-						h36.271v-507.67h-36.271V808.576z M789.607,44.87c-24.037,0-46.262,7.803-64.275,20.965
-						c-26.699-34.77-68.693-57.224-115.938-57.224c-41.146,0-78.299,17.001-104.89,44.375c-12.708-5.249-26.669-8.116-41.257-8.116
-						c-22.517,0-43.451,6.831-60.844,18.567c-19.229-11.768-41.89-18.567-66.078-18.567c-70.104,0-126.906,56.801-126.906,126.921
-						c0,34.488,13.773,65.827,36.149,88.704v40.411H209.34h-36.259c0,0-72.533,0-72.533,72.518c0,72.533,0,326.361,0,326.361
-						s0,72.533,72.533,72.533c25.173,0,50.344,0,72.486,0v145.051c0,40.082,32.545,72.518,72.518,72.518h471.411
-						c40.129,0,72.533-32.436,72.533-72.518V663.525V234.829c22.312-19.947,36.369-48.904,36.369-81.167
-						C898.4,93.539,849.621,44.87,789.607,44.87z M245.569,663.525v36.259h-72.314l-0.172-1.552V373.706l1.52-0.282h34.739h36.228
-						L245.569,663.525L245.569,663.525z M789.498,409.698v217.631v217.506c0,40.082-32.404,72.533-72.518,72.533H390.62
-						c-39.988,0-72.533-32.451-72.533-72.533v-72.518c0.028,0,0.047,0,0.047,0V300.906h-0.047v-3.51
-						c5.954,0.894,12.05,1.316,18.239,1.316c37.121,0,70.512-15.983,93.729-41.398c10.498,3.321,21.607,5.14,33.188,5.14
-						c14.021,0,27.453-2.664,39.768-7.521c26.645,28.299,64.448,45.974,106.38,45.974c47.869,0,90.364-23.05,117.034-58.682
-						c17.785,12.708,39.564,20.183,63.068,20.229L789.498,409.698L789.498,409.698z"/>
-				</g>
-			</g>
-			<g id="Shape_83">
-				<g>
-					<path d="M499.475,474.65c110.623,0,200.312-27.154,200.312-71.583c0-69.062-89.699-125.049-200.322-125.049
-						c-110.595,0-200.295,55.992-200.295,125.049C299.166,447.496,388.866,474.65,499.475,474.65z M859.41,484.516
-						c0-38.002,46.492-37.02,35.742-76.509c-9.164-33.679-99.725-37.777-173.701-51.585c10.469,17.373,16.306,36.402,16.306,56.511
-						c0,58.479-89.138,96.271-227.112,96.271c-3.812,0-7.438-0.146-11.184-0.21c-3.733,0.064-7.354,0.21-11.156,0.21
-						c-137.974,0-227.14-37.791-227.14-96.271c0-20.124,5.866-39.138,16.32-56.511c-73.968,13.809-164.538,17.906-173.702,51.585
-						c-10.735,39.489,35.756,38.493,35.756,76.509c0,27.154-134.128,49.094-134.128,107.788
-						c0,96.271,371.104,129.181,494.05,129.181c122.943,0,494.078-32.908,494.078-129.181
-						C993.539,533.604,859.41,511.67,859.41,484.516z"/>
-				</g>
-			</g>
-			<g id="Shape_33">
-				<g>
-					<path d="M990.29,596.405V6.813L324.652,72.887v614.982C191.951,627.508,36.456,708.39,10.644,828.287
-						c-8.379,39.018,9.007,81.205,25.14,100.561c90.846,108.438,288.869,57.854,379.93-58.69
-						c40.396-51.712,37.012-96.895,37.012-207.709c0-130.248,0-319.392,0-465.021l409.501-33.27c0,200.781,0,457.678,0,457.678
-						c-132.719-60.36-288.215,20.521-314.029,140.419c-8.387,39.021,9.021,81.204,25.14,100.562
-						c90.854,108.438,288.896,57.867,379.931-58.695C993.657,752.402,990.29,707.226,990.29,596.405z"/>
-				</g>
-			</g>
-			<g id="Shape_86">
-				<g>
-					<path d="M91.753-1.502v1001.5h814.443V-1.502H91.753z M237.116,929.453h-74.833v-74.817h74.833V929.453z M237.116,817.229
-						h-74.833v-74.812h74.833V817.229z M237.116,705.002h-74.833v-74.814h74.833V705.002z M237.116,592.777h-74.833V517.96h74.833
-						V592.777z M237.116,480.552h-74.833v-74.833h74.833V480.552z M237.116,368.311h-74.833v-74.817h74.833V368.311z
-						 M237.116,256.086h-74.833v-74.817h74.833V256.086z M237.116,143.86h-74.833V69.044h74.833V143.86z M709.234,929.453H288.714
-						V517.96h420.521L709.234,929.453L709.234,929.453z M709.234,480.552H288.714V69.044h420.521L709.234,480.552L709.234,480.552z
-						 M835.666,929.453H760.85v-74.817h74.816V929.453L835.666,929.453z M835.666,817.229H760.85v-74.812h74.816V817.229
-						L835.666,817.229z M835.666,705.002H760.85v-74.814h74.816V705.002L835.666,705.002z M835.666,592.777H760.85V517.96h74.816
-						V592.777L835.666,592.777z M835.666,480.552H760.85v-74.833h74.816V480.552L835.666,480.552z M835.666,368.311H760.85v-74.817
-						h74.816V368.311L835.666,368.311z M835.666,256.086H760.85v-74.817h74.816V256.086L835.666,256.086z M835.666,143.86H760.85
-						V69.044h74.816V143.86L835.666,143.86z"/>
-				</g>
-			</g>
-			<g id="Shape_106">
-				<g>
-					<path d="M540.389,207.571c-45.938,0-83.215,37.308-83.215,83.232c0,45.908,37.273,83.216,83.215,83.216
-						c45.942,0,83.232-37.308,83.232-83.216C623.621,244.879,586.331,207.571,540.389,207.571z M540.439,915.974V527.209
-						L986.381,57.916L12.678,57.354L450.1,527.226h7.104v388.747c-141.174,5.779-249.681,40.401-249.681,82.27H790.12
-						C790.12,956.375,681.529,921.753,540.439,915.974z M499.138,467.993L141.495,124.339h714.572L512.446,466.923L499.138,467.993z
-						"/>
-				</g>
-			</g>
-			<g id="Shape_105">
-				<g>
-					<path d="M465.875,4.779C182.97,22.61-29.022,287.27,8.874,566.536c34.72,255.992,267.902,443.421,524.738,427.192
-						C791.934,977.453,993.128,755.486,995.46,499.26C992.912,215.2,750.186-13.168,465.875,4.779z M243.329,620.659
-						c-7.758-1.837-15.499-3.656-23.257-5.492c-39.848-9.396-56.77,51.856-16.889,61.269c7.989,1.892,15.979,3.771,23.952,5.657
-						c-1.489,4.698-3.027,9.379-4.632,14.044c-8.783-3.474-17.566-6.941-26.35-10.438c-16.111-6.401-34.853,6.848-39.07,22.197
-						c-4.962,18.062,6.104,32.687,22.198,39.088c6.567,2.597,13.15,5.188,19.717,7.808c-1.985,4.317-4.102,8.585-6.203,12.869
-						c-6.914-3.806-13.828-7.626-20.743-11.414c-7.725-4.251-15.201-4.896-21.917-3.357c-24.001-33.028-43.52-69.341-57.448-107.812
-						c-47.325-130.646-25.837-276.173,50.897-390.82c2.067-3.077,4.218-6.054,6.352-9.048c6.468,1.24,13.597,0.446,20.941-3.59
-						c7.642-4.218,15.301-8.419,22.959-12.638c2.118,4.317,4.251,8.618,6.27,12.985c-6.931,2.746-13.862,5.491-20.792,8.254
-						c-16.095,6.352-27.177,21.008-22.198,39.07c4.218,15.334,22.959,28.566,39.07,22.182c9.164-3.622,18.311-7.245,27.475-10.867
-						c1.621,4.714,3.242,9.445,4.764,14.226c-8.75,2.051-17.467,4.118-26.218,6.17c-39.864,9.412-22.943,70.697,16.889,61.285
-						c8.403-1.985,16.79-3.97,25.208-5.938c0.91,4.466,1.771,8.966,2.581,13.448c-5.955,0.761-11.91,1.505-17.881,2.266
-						c-17.187,2.184-31.776,12.819-31.776,31.776c0,15.664,14.54,33.959,31.776,31.759c8.568-1.071,17.153-2.167,25.721-3.237
-						c0.348,4.812,0.811,9.645,1.026,14.475h-26.764c-40.973,0-40.973,63.552,0,63.552h26.483
-						c-0.281,4.813-0.811,9.596-1.208,14.424c-9.958-1.271-19.932-2.525-29.89-3.787c-17.203-2.185-31.775,16.1-31.775,31.774
-						c0,18.957,14.623,29.593,31.775,31.76c7.196,0.909,14.358,1.837,21.537,2.729C245.082,611.743,244.255,616.209,243.329,620.659
-						z M722.115,869.836c-105.616,63.204-234.456,77.529-352.857,41.568c-32.504-9.875-63.387-23.919-92.201-41.369
-						c18.973-10.951,26.632-41.389,1.803-55.05c-9.975-5.479-19.965-10.973-29.939-16.458c3.259-6.688,6.468-13.399,9.527-20.187
-						c10.239,4.059,20.479,8.089,30.718,12.157c16.111,6.401,34.869-6.848,39.07-22.182c4.962-18.079-6.104-32.702-22.198-39.09
-						c-8.139-3.229-16.276-6.438-24.415-9.657c2.613-7.595,5.111-15.201,7.46-22.876c9.396,2.216,18.791,4.433,28.187,6.646
-						c39.854,9.412,56.771-51.854,16.895-61.269c-9.729-2.283-19.47-4.604-29.212-6.883c1.39-6.637,2.68-13.281,3.87-19.969
-						c10.967,1.395,21.934,2.778,32.885,4.169c17.235,2.169,31.771-16.107,31.771-31.771c0-18.956-14.591-29.594-31.771-31.775
-						c-8.188-1.021-16.376-2.062-24.581-3.094c0.629-7.443,1.142-14.903,1.521-22.38h28.604c40.989,0,40.989-63.535,0-63.535h-28.16
-						c-0.033-0.744-0.017-1.488-0.05-2.25c-0.312-6.765-0.761-13.497-1.273-20.213c9.825-1.24,19.651-2.481,29.479-3.723
-						c17.187-2.188,31.771-12.808,31.771-31.775c0-15.681-14.539-33.942-31.771-31.775c-12.423,1.588-24.861,3.159-37.301,4.73
-						c-1.18-6.731-2.438-13.431-3.821-20.081c9.347-2.216,18.709-4.416,28.038-6.616c39.881-9.429,22.959-70.697-16.891-61.285
-						c-8.97,2.117-17.945,4.251-26.934,6.368c-2.398-7.741-4.929-15.416-7.592-23.025c7.758-3.076,15.532-6.153,23.29-9.213
-						c16.095-6.386,27.16-21.024,22.198-39.087c-4.223-15.334-22.959-28.584-39.07-22.198c-10.024,3.97-20.031,7.939-30.056,11.909
-						c-3.126-6.799-6.368-13.53-9.71-20.197c8.718-4.797,17.435-9.594,26.136-14.391c24.134-13.266,17.533-42.329-0.281-54.007
-						c104.789-62.374,235.3-79.263,354.977-42.889c33.691,10.223,65.318,24.646,94.48,42.527
-						c-18.162,11.463-25.105,40.973-0.761,54.371c8.701,4.797,17.418,9.594,26.119,14.391c-3.325,6.667-6.567,13.396-9.693,20.181
-						c-10.008-3.953-20.031-7.923-30.039-11.893c-16.128-6.402-34.869,6.864-39.087,22.198c-4.963,18.062,6.104,32.701,22.186,39.07
-						c7.771,3.06,15.551,6.153,23.309,9.229c-2.663,7.609-5.178,15.268-7.576,23.009c-8.979-2.117-17.964-4.251-26.929-6.352
-						c-39.864-9.412-56.786,51.84-16.895,61.269c9.329,2.2,18.691,4.417,28.021,6.617c-1.373,6.649-2.646,13.332-3.807,20.064
-						c-12.438-1.572-24.882-3.144-37.304-4.715c-17.23-2.167-31.792,16.095-31.792,31.776c0,18.973,14.605,29.592,31.792,31.771
-						c9.812,1.24,19.638,2.481,29.479,3.728c-0.517,6.716-0.979,13.442-1.274,20.213c-0.03,0.745-0.03,1.483-0.062,2.25h-28.142
-						c-41.006,0-41.006,63.534,0,63.534h28.583c0.397,7.461,0.896,14.938,1.521,22.358c-8.188,1.042-16.396,2.085-24.58,3.11
-						c-17.188,2.167-31.775,12.814-31.775,31.771c0,15.665,14.561,33.942,31.775,31.775c10.967-1.389,21.934-2.778,32.884-4.168
-						c1.19,6.683,2.48,13.332,3.871,19.948c-9.729,2.3-19.47,4.599-29.195,6.896c-39.881,9.396-22.976,70.687,16.894,61.271
-						c9.38-2.22,18.791-4.438,28.17-6.649c2.35,7.658,4.848,15.284,7.461,22.859c-8.144,3.226-16.276,6.448-24.438,9.677
-						c-16.074,6.368-27.145,21.008-22.182,39.087c4.218,15.334,22.959,28.584,39.087,22.183
-						c10.239-4.053,20.479-8.104,30.717-12.152c3.062,6.777,6.271,13.497,9.528,20.164c-9.978,5.508-19.967,11-29.925,16.475
-						C695.964,828.565,703.391,858.736,722.115,869.836z M827.417,756.264c-6.914,3.811-13.846,7.626-20.76,11.414
-						c-2.104-4.284-4.201-8.552-6.203-12.869c6.584-2.608,13.146-5.211,19.718-7.808c16.111-6.385,27.177-21.023,22.198-39.087
-						c-4.201-15.352-22.942-28.6-39.07-22.198c-8.783,3.49-17.562,6.964-26.334,10.438c-1.621-4.665-3.143-9.352-4.646-14.044
-						c7.984-1.892,15.963-3.771,23.946-5.657c39.864-9.396,22.942-70.664-16.889-61.271c-7.741,1.836-15.479,3.654-23.257,5.491
-						c-0.927-4.45-1.737-8.916-2.58-13.382c7.179-0.91,14.357-1.82,21.536-2.713c17.17-2.188,31.772-12.819,31.772-31.776
-						c0-15.681-14.559-33.959-31.772-31.771c-9.978,1.257-19.935,2.515-29.892,3.771c-0.385-4.812-0.931-9.594-1.209-14.405h26.479
-						c40.989,0,40.989-63.554,0-63.554H743.7c0.229-4.812,0.689-9.644,1.042-14.474c8.562,1.075,17.137,2.167,25.722,3.242
-						c17.236,2.194,31.776-16.101,31.776-31.765c0-18.957-14.606-29.593-31.776-31.771c-5.971-0.744-11.926-1.505-17.881-2.266
-						c0.794-4.483,1.654-8.966,2.581-13.465c8.402,1.985,16.806,3.97,25.208,5.955c39.849,9.412,56.753-51.857,16.889-61.269
-						c-8.729-2.068-17.479-4.136-26.218-6.188c1.506-4.781,3.127-9.512,4.747-14.226c9.164,3.622,18.328,7.262,27.492,10.884
-						c16.128,6.385,34.869-6.864,39.064-22.198c4.979-18.062-6.087-32.719-22.192-39.07c-6.937-2.746-13.861-5.509-20.812-8.254
-						c2.034-4.351,4.151-8.668,6.271-12.985c7.656,4.218,15.334,8.437,22.976,12.638c6.933,3.821,13.729,4.797,19.916,3.838
-						c52.271,72.881,82.541,161.812,83.385,253.812c-0.811,91.897-30.089,180.525-82.651,253.604
-						C842.535,751.368,835.075,752.029,827.417,756.264z"/>
-				</g>
-			</g>
-			<g id="Shape_89">
-				<g>
-					<path d="M710.807,331.839c-46.459-12.13-86.855-26.955-121.222-41.932c4.8,36.162,8.813,77.943,10.191,121.919
-						c33.134,2.71,67.706-13.462,67.706-13.462s-27.41,54.271-67.561,65.616c-1.09,46.41-5.812,88.401-14.144,125.729
-						c17.653-6.208,37.222-8.329,58.438-2.786c91.146,23.854,89.754,153.25,89.754,153.25s-48.05-64.465-108.771-80.271
-						c-19.812-5.164-40.917-5.136-60.438-2.808c-17.34,41.613-40.896,74.823-70.562,99.021
-						c23.271,25.938,53.026,45.598,91.354,55.637C852.865,881.537,990.778,353.02,990.778,353.02S874.143,374.482,710.807,331.839z
-						 M766.777,515.118c-54.668-14.25-50.7-104.08-50.7-104.08s28.56,39.918,64.979,49.442c36.45,9.521,80.854-11.326,80.854-11.326
-						S821.475,529.398,766.777,515.118z M543.791,176.393c0,0-92.404,74.354-256.345,114.483
-						c-163.987,40.13-280.272,16.93-280.272,16.93s129.914,530.53,398.238,464.792C673.752,706.908,543.791,176.393,543.791,176.393
-						z M155.518,491.237c0,0-2.65-89.875,52.244-103.292c54.879-13.432,94.085,67.448,94.085,67.448s-44.052-21.519-80.653-12.563
-						C184.607,451.789,155.518,491.237,155.518,491.237z M385.983,693.34c-91.481,22.381-151.875-92.087-151.875-92.087
-						s72.96,33.876,133.942,18.929c60.967-14.961,110.021-78.639,110.021-78.639S477.464,670.928,385.983,693.34z M418.087,397.999
-						c-36.768,8.087-66.782,46.899-66.782,46.899s-0.545-89.906,54.622-102.083c55.167-12.16,92.496,69.583,92.496,69.583
-						S454.87,389.868,418.087,397.999z"/>
-				</g>
-			</g>
-			<g id="Shape_120">
-				<g>
-					<path d="M812.992,241.865c-76.589,0-138.329-14.593-177.104,4.792c0,0-95.729,19.14-114.884,19.14
-						c-19.14,0-100.508-4.792-148.373-14.362c-47.863-9.57-263.27-19.141-359,23.932v52.657c0,0,19.154,14.362,23.932,19.141
-						c4.792,4.792,33.517,57.435,43.086,90.951c9.57,33.503,38.295,119.662,224.962,100.508c0,0,18.762-2.212,44.094-12.983
-						c-10.086,22.481-17.188,48.232-14.951,70.885c2.003,20.191,11.154,36.265,26.464,46.471c3.438,2.292,7.18,4.687,11.151,7.145
-						c-28.188,28.314-43.93,50.475-75.598,52.903c-41.76,3.235-53.063-22.483-46.646-40.677c6.01-17.021,36.995-2.234,40.148,5.896
-						c-1.326-7.77-8.73-42.667-36.318-45.51c-31.053-3.208-38.187,31.854-38.187,48.979s4.075,90.188,129.341,90.188
-						c83.39,0,129.389-35.084,150.829-58.539c3.355,0.46,6.545,0.729,9.47,0.729c3.208,0,6.24-0.271,8.988-0.826
-						c2.06-0.413,5.354-1.469,9.579-3.077c20.312,23.312,67.021,61.717,154.289,61.717c125.252,0,130.127-73.065,130.127-90.188
-						c0-17.123-7.178-52.188-38.217-48.979c-27.567,2.844-35.027,37.713-36.346,45.51c3.143-8.136,34.031-22.897,40.014-5.896
-						c6.444,18.188-5.062,43.912-46.816,40.677c-37.356-2.87-52.873-33.158-92.521-68.641
-						c19.869-17.592,34.096-36.749,34.096-55.205c0-16.688-7.438-34.566-17.481-51.701c24.354,6.919,87.404,21.376,147.501,6.354
-						c76.589-19.153,90.952-28.729,124.454-110.097c33.503-81.367,38.295-71.797,43.071-76.589
-						c4.794-4.778,19.15-4.778,19.15-47.865v-23.933C985.311,275.368,889.581,241.865,812.992,241.865z M602.479,611.091
-						c-46.147-21.688-91.174,10.58-91.174,10.58s-55.932-40.678-107.33,0c-0.683,0.541-1.334,1.079-2.004,1.618
-						c-6.8-3.981-13.367-8.062-19.505-12.15c-3.574-2.383-8.46-6.89-9.598-18.396c-2.992-30.279,22.254-76.75,36.454-90.95
-						c25.524-25.53,50.024-69.402,51.059-71.256l0.866-1.543l0.569-1.692c0.771-2.328,2.024-6.562,3.668-12.114
-						c1.188-4.021,2.344-7.859,3.467-11.55c6.713-14.134,8.78-23.204,9.642-30.157c3.775-11.157,7.034-19.93,9.834-26.82
-						c5.69-3.554,14.562-6.617,23.062-6.028c5.845,9.472,10.411,21.106,8.993,29.599c-4.209,25.313,14.146,54.322,36.732,86.863
-						c4.55,6.565,10.809,15.559,11.858,18.071c2.409,7.242,8.104,14.863,19.722,30.038c15.526,20.291,41.521,54.254,41.521,73.989
-						C630.317,582.206,624.613,593.302,602.479,611.091z M323.014,509.062c-47.865,9.564-201.042,38.295-229.754-119.667
-						c0,0-28.724-81.367,23.933-105.3c52.643-23.932,191.459-14.362,220.184-9.57c28.71,4.779,100.508,19.141,95.729,100.508
-						c-0.594,9.989-1.979,19.397-4.033,28.241c-0.104,0.352-0.208,0.692-0.312,1.052c-1.137,3.844-2.058,6.998-2.748,9.188
-						c-4.413,7.7-24.433,41.854-43.771,61.196c-3.58,3.581-7.604,8.454-11.758,14.292
-						C355.064,499.325,338.536,505.957,323.014,509.062z M910.48,384.647C881.754,542.605,728.59,513.894,680.725,504.309
-						c-26.891-5.376-56.806-21.323-78.707-48.698c-2.854-5.178-7.145-11.429-13.341-20.351c-0.227-0.326-0.467-0.672-0.707-1.018
-						c-9.505-17.839-15.878-39.104-17.337-63.943c-4.792-81.381,67.005-95.729,95.729-100.521
-						c28.724-4.792,167.521-14.362,220.185,9.57C939.191,303.28,910.48,384.647,910.48,384.647z"/>
-				</g>
-			</g>
-			<g id="Shape_117">
-				<g>
-					<path d="M784.293,331.32c-36.211,0-74.01,10.757-110.783,35.085c0-7.497,6.074-8.938,7.354-14.994
-						c19.146-42.747,33.018-55.026,37.48-89.78C739.395,101.432,615.869,18.585,494.18,18.585
-						c-111.544,0-221.581,69.607-217.443,213.058c1.439,51.999,34.292,89.632,37.468,127.266
-						c-35.234-19.048-69.607-27.438-101.746-27.438c-117.766,0-206.355,112.205-205.082,222.011
-						C8.817,690.711,119.003,773.47,238.375,773.47c12.759,0,25.519-0.96,38.362-2.857
-						c98.718-14.685,159.636-94.249,209.715-172.164c0.646,201.59-94.896,298.719-239.686,344.328
-						c-23.765,7.479-72.09-1.758-81.986,37.138h666.314l7.021-7.166c-89.473-39.868-177.99-47.845-239.395-112.271
-						c-60.121-62.84-78.625-146.729-89.94-262.026c45.543,108.929,158.924,168.408,264.262,168.408
-						c103.896,0,199.818-57.896,214.812-183.319C1004.137,447.415,903.102,331.32,784.293,331.32z"/>
-				</g>
-			</g>
-			<g id="Shape_35_2_">
-				<g>
-					<path d="M359.044,692.846c-38.815,0-70.215,31.398-70.215,70.229c0,38.73,31.396,70.207,70.215,70.207
-						c38.744,0,70.215-31.477,70.215-70.207C429.259,724.244,397.788,692.846,359.044,692.846z M745.225,692.846
-						c-38.795,0-70.209,31.398-70.209,70.229c0,38.73,31.414,70.207,70.209,70.207c38.75,0,70.229-31.477,70.229-70.207
-						C815.447,724.244,783.975,692.846,745.225,692.846z M201.57,271.554l-70.727-105.333H60.621
-						c-29.104,0-52.66,23.592-52.66,52.667c0,29.075,23.556,52.667,52.66,52.667h31.025l179.627,351.069h601.474l118.241-351.069
-						L201.57,271.554L201.57,271.554z M675.016,324.207c9.691,0,17.562,7.82,17.562,17.556c0,9.677-7.865,17.556-17.562,17.556
-						c-9.705,0-17.555-7.879-17.555-17.556C657.461,332.027,665.311,324.207,675.016,324.207z M639.904,394.429
-						c9.707,0,17.557,7.82,17.557,17.556c0,9.661-7.85,17.541-17.557,17.541c-9.691,0-17.561-7.879-17.561-17.541
-						C622.35,402.249,630.213,394.429,639.904,394.429z M604.809,324.207c9.691,0,17.541,7.82,17.541,17.556
-						c0,9.677-7.85,17.556-17.541,17.556c-9.707,0-17.541-7.879-17.541-17.556C587.268,332.027,595.102,324.207,604.809,324.207z
-						 M569.727,394.429c9.77,0,17.541,7.82,17.541,17.556c0,9.661-7.771,17.541-17.541,17.541c-9.678,0-17.556-7.879-17.556-17.541
-						C552.171,402.249,560.049,394.429,569.727,394.429z M464.363,324.207c9.706,0,17.556,7.82,17.556,17.556
-						c0,9.677-7.85,17.556-17.556,17.556c-9.699,0-17.548-7.879-17.548-17.556C446.815,332.027,454.665,324.207,464.363,324.207z
-						 M394.155,324.207c9.693,0,17.548,7.82,17.548,17.556c0,9.677-7.854,17.556-17.548,17.556c-9.706,0-17.562-7.879-17.562-17.556
-						C376.6,332.027,384.449,324.207,394.155,324.207z M323.933,324.207c9.706,0,17.562,7.82,17.562,17.556
-						c0,9.677-7.854,17.556-17.562,17.556s-17.556-7.879-17.556-17.556C306.377,332.027,314.227,324.207,323.933,324.207z
-						 M253.718,359.318c-9.772,0-17.556-7.879-17.556-17.556c0-9.735,7.784-17.556,17.556-17.556c9.699,0,17.556,7.82,17.556,17.556
-						C271.273,351.439,263.417,359.318,253.718,359.318z M288.829,429.526c-9.706,0-17.556-7.879-17.556-17.541
-						c0-9.735,7.85-17.556,17.556-17.556c9.699,0,17.548,7.82,17.548,17.556C306.377,421.647,298.528,429.526,288.829,429.526z
-						 M323.933,499.748c-9.706,0-17.556-7.879-17.556-17.556c0-9.735,7.85-17.562,17.556-17.562s17.562,7.821,17.562,17.562
-						C341.489,491.869,333.639,499.748,323.933,499.748z M359.044,394.429c9.699,0,17.556,7.82,17.556,17.556
-						c0,9.661-7.854,17.541-17.556,17.541c-9.706,0-17.555-7.879-17.555-17.541C341.489,402.249,349.338,394.429,359.044,394.429z
-						 M359.044,569.971c-9.706,0-17.526-7.894-17.526-17.556c0-9.735,7.821-17.556,17.526-17.556
-						c9.699,0,17.556,7.814,17.556,17.556C376.6,562.077,368.743,569.971,359.044,569.971z M394.155,499.748
-						c-9.706,0-17.562-7.879-17.562-17.556c0-9.735,7.854-17.562,17.562-17.562c9.693,0,17.548,7.821,17.548,17.562
-						C411.704,491.869,403.854,499.748,394.155,499.748z M429.259,394.429c9.699,0,17.562,7.82,17.562,17.556
-						c0,9.661-7.857,17.541-17.562,17.541c-9.706,0-17.556-7.879-17.556-17.541C411.704,402.249,419.553,394.429,429.259,394.429z
-						 M429.259,569.971c-9.706,0-17.519-7.894-17.519-17.556c0-9.735,7.812-17.556,17.519-17.556
-						c9.699,0,17.562,7.814,17.562,17.556C446.815,562.077,438.958,569.971,429.259,569.971z M464.363,499.748
-						c-9.699,0-17.548-7.879-17.548-17.556c0-9.735,7.85-17.562,17.548-17.562c9.706,0,17.556,7.821,17.556,17.562
-						C481.919,491.869,474.069,499.748,464.363,499.748z M499.475,569.971c-9.705,0-17.521-7.894-17.521-17.556
-						c0-9.735,7.815-17.556,17.521-17.556c9.699,0,17.562,7.814,17.562,17.556C517.03,562.077,509.174,569.971,499.475,569.971z
-						 M499.475,429.526c-9.705,0-17.556-7.879-17.556-17.541c0-9.735,7.851-17.556,17.556-17.556c9.699,0,17.562,7.82,17.562,17.556
-						C517.03,421.647,509.174,429.526,499.475,429.526z M534.586,324.207c9.706,0,17.556,7.82,17.556,17.556
-						c0,9.677-7.85,17.556-17.556,17.556s-17.556-7.879-17.556-17.556C517.03,332.027,524.88,324.207,534.586,324.207z
-						 M534.586,499.748c-9.706,0-17.526-7.879-17.526-17.556c0-9.735,7.82-17.562,17.526-17.562s17.556,7.821,17.556,17.562
-						C552.142,491.869,544.292,499.748,534.586,499.748z M569.58,569.971c-9.662,0-17.438-7.894-17.438-17.556
-						c0-9.735,7.776-17.556,17.438-17.556c9.779,0,17.57,7.814,17.57,17.556C587.15,562.077,579.359,569.971,569.58,569.971z
-						 M604.809,499.748c-9.707,0-17.541-7.879-17.541-17.556c0-9.735,7.834-17.562,17.541-17.562
-						c9.691,0,17.541,7.821,17.541,17.562C622.35,491.869,614.5,499.748,604.809,499.748z M639.803,569.971
-						c-9.677,0-17.453-7.894-17.453-17.556c0-9.735,7.776-17.556,17.453-17.556c9.77,0,17.562,7.814,17.562,17.556
-						C657.358,562.077,649.566,569.971,639.803,569.971z M674.914,499.748c-9.677,0-17.453-7.879-17.453-17.556
-						c0-9.735,7.776-17.562,17.453-17.562c9.764,0,17.541,7.821,17.541,17.562C692.455,491.869,684.678,499.748,674.914,499.748z
-						 M710.127,394.429c9.691,0,17.557,7.82,17.557,17.556c0,9.661-7.859,17.541-17.557,17.541c-9.705,0-17.555-7.879-17.555-17.541
-						C692.572,402.249,700.422,394.429,710.127,394.429z M710.127,569.971c-9.705,0-17.525-7.894-17.525-17.556
-						c0-9.735,7.82-17.556,17.525-17.556c9.691,0,17.557,7.814,17.557,17.556C727.684,562.077,719.818,569.971,710.127,569.971z
-						 M745.137,499.748c-9.678,0-17.453-7.879-17.453-17.556c0-9.735,7.775-17.562,17.453-17.562c9.77,0,17.541,7.821,17.541,17.562
-						C762.678,491.869,754.9,499.748,745.137,499.748z M745.225,359.318c-9.707,0-17.541-7.879-17.541-17.556
-						c0-9.735,7.834-17.556,17.541-17.556c9.705,0,17.57,7.82,17.57,17.556C762.795,351.439,754.93,359.318,745.225,359.318z
-						 M780.336,569.971c-9.707,0-17.512-7.894-17.512-17.556c0-9.735,7.805-17.556,17.512-17.556
-						c9.705,0,17.555,7.814,17.555,17.556C797.891,562.077,790.041,569.971,780.336,569.971z M780.336,429.526
-						c-9.707,0-17.512-7.879-17.512-17.541c0-9.735,7.805-17.556,17.512-17.556c9.705,0,17.555,7.82,17.555,17.556
-						C797.891,421.647,790.041,429.526,780.336,429.526z M815.447,499.748c-9.707,0-17.518-7.879-17.518-17.556
-						c0-9.735,7.811-17.562,17.518-17.562c9.705,0,17.555,7.821,17.555,17.562C833.002,491.869,825.152,499.748,815.447,499.748z
-						 M815.447,359.318c-9.707,0-17.518-7.879-17.518-17.556c0-9.735,7.811-17.556,17.518-17.556c9.705,0,17.555,7.82,17.555,17.556
-						C833.002,351.439,825.152,359.318,815.447,359.318z M850.558,429.526c-9.706,0-17.521-7.879-17.521-17.541
-						c0-9.735,7.814-17.556,17.521-17.556s17.562,7.82,17.562,17.556C868.113,421.647,860.264,429.526,850.558,429.526z
-						 M885.669,359.318c-9.706,0-17.556-7.879-17.556-17.556c0-9.735,7.85-17.556,17.556-17.556s17.541,7.82,17.541,17.556
-						C903.21,351.439,895.375,359.318,885.669,359.318z"/>
-				</g>
-			</g>
-			<g id="Shape_101_2_">
-				<g>
-					<path d="M697.507,227.15c-0.096-106.755-12.133-141.453-14.778-147.828C658.545,11.063,594.662,8.856,589.37,8.787
-						c-1.097-0.027-2.193-0.027-3.263-0.027c-25.259,0-45.666,8.034-60.664,23.868c-26.336,27.803-25.486,69.945-25.295,75.086
-						v98.173l-21.062-2.262l-0.247-33.767c1.206-52.85-10.118-91.866-33.684-116.009c-22.188-22.716-48.202-24.485-55.646-24.485
-						c-0.754,0-1.396,0.027-1.858,0.041c-1.144-0.041-2.268-0.055-3.392-0.055c-27.235,0-49.773,9.13-66.979,27.104
-						c-36.426,38.043-35.042,102.697-34.835,108.62v48.161l-104.726,14.999l-0.165-0.014v625.646l453.164,136.669l0.658,0.206
-						l189.93-92.251V240.503l0.102-0.014L697.507,227.15z M282.428,240.86l-80.392-11.104l80.392-11.516V240.86z M344.038,82.16
-						c10.896-11.091,24.636-16.013,42.485-15.094l0.768,0.055l1.535-0.083c4.14,0,18.618,1.028,31.491,14.23
-						c16.104,16.506,24.109,46.584,23.149,87.055l-0.014,0.219l0.206,31.298l-38.757-4.181l-87.041,12.462v-44.254
-						C317.839,163.32,317.291,109.318,344.038,82.16z M317.839,245.727v-32.574l87.151-12.489l38.702,4.017l0.384,58.47
-						L317.839,245.727z M534.338,107.838c-0.014-0.315-1.221-31.751,16.054-50.053c8.705-9.171,20.646-13.627,36.535-13.627
-						c0.796,0,1.591,0.027,2.742,0.027c1.823,0.014,45.159,1.069,61.528,47.805l0.188,0.548
-						c0.123,0.302,11.652,32.135,11.892,130.911l-128.979-13.888l0.068-100.956L534.338,107.838z M631.25,288.98l-151.722-20.934
-						l-0.439-59.718l328.464,34.041L631.25,288.98z"/>
-				</g>
-			</g>
-			<g id="Shape_110_2_">
-				<g>
-					<path d="M575.712,422.511V159.448H422.236V422.51H159.174v153.479h263.062v263.079h153.476v-263.08h263.08V422.511H575.712z
-						 M498.975,7.371C227.754,7.371,7.097,228.028,7.097,499.248c0,271.221,220.657,491.878,491.875,491.878
-						c271.226,0,491.878-220.657,491.878-491.878C990.852,228.028,770.194,7.371,498.975,7.371z M498.975,938.018
-						c-241.938,0-438.75-196.819-438.75-438.77c0-241.927,196.808-438.752,438.75-438.752
-						c241.933,0,438.752,196.825,438.752,438.752C937.727,741.192,740.901,938.018,498.975,938.018z"/>
-				</g>
-			</g>
-			<g id="Shape_121_2_">
-				<g>
-					<path d="M821.111,934.699H177.838c-16.39,0-29.703,13.297-29.703,29.702c0,16.39,13.313,29.687,29.703,29.687h643.273
-						c16.401,0,29.703-13.297,29.703-29.687C850.814,947.996,837.518,934.699,821.111,934.699z M177.838,232.035h643.273
-						c16.401,0,29.703-13.298,29.703-29.688c0-16.39-13.302-29.687-29.703-29.687H699.994l28.389-40.229
-						c2.82,0.384,5.688,0.641,8.619,0.641c35.518,0,64.324-28.806,64.324-64.324c0-35.534-28.812-64.34-64.324-64.34
-						c-35.535,0-64.34,28.806-64.34,64.34c0,10.622,2.627,20.619,7.193,29.463l-52.555,74.449H177.838
-						c-16.39,0-29.703,13.297-29.703,29.687C148.135,218.737,161.448,232.035,177.838,232.035z M789.822,271.622
-						c-24.592,0-156.748,0-289.546,0c-0.545,0-1.062,0-1.586,0c-132.814,0-264.958,0-289.563,0
-						c-29.687,0-23.519,21.597-19.786,29.688c32.442,70.557,118.748,192.988,118.748,282.065
-						c0,89.061-86.305,211.492-118.748,282.049c-3.733,8.107-9.901,29.688,19.786,29.688c24.592,0,156.749,0,289.563,0
-						c0.523,0,1.041,0,1.586,0c132.798,0,264.938,0,289.546,0c29.688,0,23.52-21.58,19.787-29.688
-						c-32.443-70.557-118.748-192.986-118.748-282.049c0-89.077,86.305-211.509,118.748-282.065
-						C813.342,293.219,819.51,271.622,789.822,271.622z"/>
-				</g>
-			</g>
-			<g id="Shape_111_2_">
-				<g>
-					<path d="M712.756,918.966V681.912L440.343,403.979L167.916,681.912v237.039h213.345V722.109
-						c0-31.655,25.669-57.312,57.324-57.312c31.654,0,57.31,25.655,57.31,57.312v196.854L712.756,918.966L712.756,918.966z
-						 M314,835.333h-77.255v-27.805H314V835.333z M314,791.868h-77.255v-82.209H314V791.868z M438.585,580.077
-						c-17.897,0-32.396-14.513-32.396-32.396c0-17.896,14.493-32.404,32.396-32.404s32.396,14.513,32.396,32.404
-						C470.98,565.564,456.483,580.077,438.585,580.077z M563.155,709.659h77.255v82.209h-77.255V709.659z M563.155,807.528h77.255
-						v27.805h-77.255V807.528z M440.343,385.951l307.075,314.033l18.914-18.514l-228.657-233.84V238.806l-97.332-99.758
-						l-97.332,99.758v208.828L114.354,681.479l18.914,18.512L440.343,385.951z M123.812,959.482h633.063v-26.875H123.812V959.482z
-						 M871.377,338.651c-16.183-16.561-42.434-16.561-58.631,0v-16.503h-11.375v650.989H67.926v26.861h744.82V414.846
-						c16.197-16.546,42.448-16.546,58.646,0h-0.017c16.213,16.546,42.463,16.546,58.646,0v-76.208
-						C913.826,355.197,887.59,355.197,871.377,338.651z M440.343,121.078L584.191,268.18l18.896-18.508L446.038,89.046V-1.502
-						h-11.389v90.533L277.581,249.672l18.915,18.508L440.343,121.078z"/>
-				</g>
-			</g>
-			<g id="Shape_122_2_">
-				<g>
-					<path d="M67.386,225.596l403.275,331.261l460.918-331.261c28.812-23.666,57.608-43.219,0-43.219H67.386
-						C9.761,182.377,38.573,201.93,67.386,225.596z M470.661,643.277L9.761,268.798v489.714c0,28.795,29.174,57.608,52.221,57.608
-						h875.003c23.023,0,52.202-28.813,52.202-57.608V268.798L470.661,643.277z"/>
-				</g>
-			</g>
-			<g id="Shape_112_2_">
-				<g>
-					<path d="M256.099,378.068l0.094,0.094l237.603-237.603l-0.078-0.078c14.507-14.507,14.507-38.273,0-52.796
-						c-14.507-14.507-38.289-14.507-52.796,0L203.303,325.272c-14.521,14.507-14.521,38.289,0,52.795
-						C217.81,392.59,241.576,392.59,256.099,378.068z M836.928,430.896c-14.507-14.513-38.271-14.513-52.795,0l-0.146-0.15
-						l-238.9,239.321c-13.026,14.61-12.543,37.235,1.459,51.258c14.521,14.507,38.289,14.507,52.795,0L836.928,483.69
-						C851.436,469.184,851.436,445.417,836.928,430.896z M533.404,180.182l-238.112,237.08l66.428,66.434L18.511,826.916
-						c-14.507,14.507-14.507,38.289,0,52.796l26.405,26.405c14.507,14.508,38.273,14.508,52.796,0l343.21-343.229l65.612,65.612
-						l236.671-238.534L533.404,180.182z"/>
-				</g>
-			</g>
-			<g id="Shape_118_4_">
-				<g>
-					<path d="M783.93,839.049c-114.461,0-207.229,18.567-207.229,41.459c0,22.896,92.771,41.443,207.229,41.443
-						c114.444,0,207.231-18.551,207.231-41.443C991.161,857.616,898.374,839.049,783.93,839.049z"/>
-				</g>
-			</g>
-			<g id="Shape_114">
-				<g>
-					<path d="M234.065,514.635c0-60.592-49.24-109.671-109.944-109.671c-60.576,0-109.67,49.095-109.67,109.688
-						c0,60.672,49.095,109.928,109.67,109.928C184.826,624.578,234.065,575.322,234.065,514.635z M755.447,815.854
-						c-3.735-5.009-10.521-5.952-15.635-2.513L590.74,921.646c-4.831,3.857-5.926,10.781-2.479,15.635l20.337,28.227
-						c3.725,4.814,10.771,5.926,15.604,2.334l149.104-108.285c4.814-3.752,5.931-10.788,2.479-15.635L755.447,815.854z
-						 M481.069,592.633l59.062,104.275l31.108-23.234l-59.207-103.713L481.069,592.633z M433.214,431.371l-230-403.838
-						l-43.975,0.274L401.82,454.316L433.214,431.371z M908.416,628.572l-213.673-0.258c-17.021,0-31.963,7.311-44.957,16.729
-						l-165.255,116.16L370.835,648.908l158.234-115.886c24.604-20.61,27.921-57.274,7.311-81.884
-						c-20.724-24.324-57.242-27.519-81.862-7.053L207.239,620.295c-35.956,30.146-42.332,98.448-12.463,134.42l178.7,178.812
-						c0,0,48.692,63.484,128.896,5.684l227.779-160.713l178.265,0.273c41.479,0,75.083-33.479,75.083-75.104
-						C983.499,662.306,949.895,628.572,908.416,628.572z"/>
-				</g>
-			</g>
-			<g id="Shape_93">
-				<g>
-					<path d="M405.976,348.398h-2.713c-4.517,37.967-14.476,71.685-26.347,97.231h55.359
-						C422.191,418.766,411.214,389.533,405.976,348.398z M913.79,436.769h-6.649c-11.087,51.93-35.53,98.079-64.653,133.021H978.37
-						C953.593,533.028,926.648,493.038,913.79,436.769z M261.211,477.982h-6.665c-11.071,36.964-35.521,69.804-64.674,94.688
-						h135.904C300.998,546.516,274.055,518.021,261.211,477.982z M563.553,445.63h55.376c-10.1-26.864-21.078-56.097-26.312-97.231
-						H589.9C585.384,386.366,575.425,420.083,563.553,445.63z M740.154,477.982c-11.062,36.964-35.521,69.804-64.66,94.688h135.89
-						c-24.763-26.157-51.721-54.653-64.55-94.688H740.154L740.154,477.982z M89.927,436.769h-6.665
-						c-11.087,51.93-35.537,98.079-64.675,133.021h135.904C129.714,533.028,102.771,493.038,89.927,436.769z M959.96,816.63
-						l-0.096-145.108l29.405-31.853l-0.078-46.294H837.056l-0.126,15.479l-27.35,0.077v-15.556H678.914v41.166h-19.18v-31.773
-						h-55.453l-0.173,32.187h-13.189l-0.36-87.461h20.438l0.785-86.396h-41.104l-0.172,43.377h-2.854
-						c-25.249-55.797-51.68-117.163-65.442-200.516v-96.62c2.822-2.133,60.094-44.585,129.443-8.124c0,0,46.146,24.872,88.81,3.105
-						c0,0,45.307-21.768,67.92-12.17c0,0-33.215-29.529-90.707-3.387c0,0-28.59,14.694-65.161-27.993
-						c0,0-15.965-46.922-130.305-21.281v-21.391h-12.8V319.28c-12.646,70.994-34.896,134.853-61.82,185.19h-3.654v-43.377h-38.673
-						v86.396h17v87.461h-15.896v-32.187h-47.728l-0.33,21.521l-12.854-0.078l0.188-30.831H187.927l-0.031,16.043l-24.731-0.111
-						l0.188-15.932H9.743L9.68,639.669l30.487,31.854L39.289,816.63l-22.411,32.683l181.07,0.579l-16.545,32.517h216.512v-73.729
-						c0-56.062,45.872-101.92,101.92-101.92c56.065,0,101.92,45.855,101.92,101.92v73.729H827.3l-26.723-32.517l181.446-0.376
-						L959.96,816.63z"/>
-				</g>
-			</g>
-			<g id="Shape_46">
-				<g>
-					<path d="M499.475,6.066C226.821,6.066,5.793,227.095,5.793,499.748c0,272.654,221.028,493.683,493.682,493.683
-						c272.64,0,493.688-221.049,493.688-493.683C993.157,227.095,772.108,6.066,499.475,6.066z M552.809,340.471
-						c-43.812,0-79.348-35.535-79.348-79.348c0-43.832,35.536-79.347,79.348-79.367c43.812,0,79.354,35.535,79.354,79.367
-						S596.62,340.471,552.809,340.471z M728.297,512.283c-41.903,0-75.893-33.989-75.893-75.912
-						c0-41.924,33.983-75.913,75.913-75.913c41.923,0,75.892,34.01,75.892,75.913C804.209,478.294,770.24,512.283,728.297,512.283z
-						 M759.875,288.222c-32.441,0-58.757-26.314-58.757-58.757c0-32.462,26.312-58.758,58.757-58.777
-						c32.462,0,58.758,26.315,58.758,58.777C818.633,261.907,792.337,288.222,759.875,288.222z"/>
-				</g>
-			</g>
-			<g id="Shape_39">
-				<g>
-					<path d="M737.659,647.434c-95.929-96.052-72.961-253.299-238.128-262.708c-165.202,9.412-142.311,166.659-238.216,262.708
-						c-45.849,45.854-142.339,63.146-169.662,129.749c-33.486,81.729,21.563,155.638,63.04,187.503
-						c83.32,63.854,217.319,0.726,307.102-8.604c12.89-1.457,25.409-1.703,37.684-1.703c12.293,0,24.812,0.246,37.688,1.703
-						c89.782,9.324,223.781,72.452,307.155,8.604c41.423-31.865,96.484-105.773,63.021-187.503
-						C879.998,710.579,783.508,693.282,737.659,647.434z M916.031,239.942c-60.851-16.331-127.817,36.278-149.486,117.352
-						c-21.771,81.161,9.921,160.075,70.73,176.478c60.896,16.265,127.812-36.274,149.539-117.438
-						C1008.57,335.257,976.875,256.343,916.031,239.942z M161.664,533.771c60.862-16.243,92.505-95.314,70.783-176.394
-						c-21.738-81.161-88.642-133.612-149.521-117.439c-60.861,16.4-92.521,95.314-70.818,176.476
-						C33.829,497.491,100.784,550.03,161.664,533.771z M386.78,301.226c60.845-16.33,92.558-95.314,70.801-176.317
-						C435.859,43.747,368.922-8.774,308.06,7.557c-60.845,16.243-92.54,95.227-70.783,176.388
-						C258.998,264.947,325.918,317.486,386.78,301.226z M612.177,301.226c60.845,16.419,127.817-36.278,149.539-117.281
-						C783.473,102.784,751.742,23.8,690.88,7.557c-60.845-16.331-127.765,36.19-149.485,117.352
-						C519.637,205.911,551.367,284.895,612.177,301.226z"/>
-				</g>
-			</g>
-			<g id="Shape_44">
-				<g>
-					<path d="M990.266,292.161c-17.127-40.57-74.188-60.328-155.67-60.328c-26.521,0-55.731,2.232-86.937,6.484
-						c-11.056-10.418-22.771-20.151-35.021-29.199c-59.725-44.02-133.453-70.339-213.292-70.339
-						c-182.146,0-332.34,135.201-356.632,310.616c-2.12,15.028-3.57,30.244-3.792,45.784
-						C38.688,573.894-13.954,652.318,8.704,706.026c17.098,40.538,74.316,60.267,155.641,60.267c43.958,0,95.437-6.096,151.138-17.5
-						c78.441-16.029,165.683-42.844,255.332-80.646c89.318-37.688,169.428-81.309,235.613-126.158
-						C940.66,450.927,1016.617,354.732,990.266,292.161z M855.127,425.752c-0.837,0.754-1.699,1.508-2.549,2.262
-						c-0.135-0.674-0.29-1.34-0.43-2.013C564.775,663.979,193.526,705.547,193.526,705.547l-1.118-2.656
-						c-9.639,0.562-19.012,0.861-28.063,0.861c-72.954,0-96.256-17.701-98.066-22.018c-5.97-14.126,19.074-56.812,79.866-110.773
-						c8.521,42.203,24.37,81.721,46.229,117.172c433.799-86.588,628.037-275.378,650.335-298.326
-						c-10.709-33.727-26.232-65.312-45.833-93.919c13.067-0.986,25.674-1.515,37.72-1.515c0,0,0,0,0.107,0
-						c72.877,0,96.07,17.686,97.896,22.095C934.596,321.218,929.289,359.374,855.127,425.752z M285.744,789.115
-						c59.771,44.159,133.53,70.603,213.602,70.603c182.083,0,332.355-135.294,356.648-310.802
-						c-76.869,52.112-169.876,102.771-273.684,146.527C478.179,739.37,376.879,770.502,285.744,789.115z"/>
-				</g>
-			</g>
-			<g id="Shape_51_2_">
-				<g>
-					<path d="M163.088,425.002V761.38h112.126V425.002H163.088z M349.968,425.002V761.38h112.134V425.002H349.968z M536.855,425.002
-						V761.38H648.98V425.002H536.855z M723.727,425.002V761.38h112.127V425.002H723.727z M88.335,836.143h822.279v-37.381H88.335
-						V836.143z M13.582,873.508v37.38h971.794v-37.38H13.582z M947.995,350.242L536.855,88.609H499.47H462.1L50.962,350.242v37.38
-						h897.033V350.242z"/>
-				</g>
-			</g>
-			<g id="Shape_97_2_">
-				<g>
-					<path d="M982.645,782.662c-35.586-42.6-73.823-86.88-82.422-145.84c-8.604-58.979,16.275-106.413,38.229-157.382
-						l-12.622-86.656c-35.585-42.583-72.782-79.608-81.374-138.534c-8.593-58.978,15.229-113.685,37.18-164.671l-12.623-86.64
-						L786.49,14.978C745.43,46.722,696.075,68.691,641.111,76.7c-54.947,8.009-108.522,1.046-156.891-17.682l-91.692,13.377
-						c-40.953,31.727-95.458,54.45-150.385,62.459c-54.913,7.991-108.54,1.046-156.885-17.682l-82.575,12.04l12.622,86.64
-						c37.867,43.457,77.242,85.371,86.177,146.681c8.936,61.258-18.093,104.062-41.981,156.521l12.622,86.657
-						c37.866,43.371,76.195,78.134,85.13,139.393c8.918,61.24-17.047,111.354-40.936,163.812l12.639,86.64l86.623-12.639
-						c42.41-35.104,82.129-57.485,140.54-66.009c58.429-8.507,112.073,0.343,162.682,21.812l91.698-13.354
-						c42.377-35.036,86.194-58.085,144.604-66.592c58.407-8.522,102.859,1.572,153.541,23.135l86.617-12.622L982.645,782.662z
-						 M313.965,747.402l-63.145-433.18l433.167-63.128l63.145,433.188L313.965,747.402z"/>
-				</g>
-			</g>
-			<g id="Shape_53_2_">
-				<g>
-					<path d="M421.637,110.541C162.155,110.541,6.478,318.12,6.478,421.91c0,103.789,51.903,181.628,155.676,181.628
-						c103.79,0,155.693,25.935,155.693,103.789c0,103.79,77.838,181.628,181.627,181.628c337.321,0,492.997-181.628,492.997-363.256
-						C992.472,214.33,733.006,110.541,421.637,110.541z M175.13,499.748c-35.812,0-64.863-29.034-64.863-64.862
-						s29.051-64.862,64.863-64.862c35.828,0,64.862,29.034,64.862,64.862S210.958,499.748,175.13,499.748z M356.758,344.071
-						c-35.828,0-64.862-29.05-64.862-64.879c0-35.828,29.034-64.862,64.862-64.862s64.879,29.034,64.879,64.862
-						C421.637,315.021,392.586,344.071,356.758,344.071z M499.475,785.165c-42.981,0-77.838-34.851-77.838-77.838
-						s34.854-77.854,77.838-77.854c42.988,0,77.845,34.867,77.845,77.854S542.463,785.165,499.475,785.165z M564.354,344.071
-						c-35.845,0-64.879-29.05-64.879-64.879c0-35.828,29.034-64.862,64.879-64.862c35.802,0,64.852,29.034,64.852,64.862
-						C629.199,315.021,600.149,344.071,564.354,344.071z M771.917,447.845c-35.829,0-64.879-29.032-64.879-64.862
-						c0-35.828,29.05-64.862,64.879-64.862c35.828,0,64.879,29.034,64.879,64.862C836.796,418.812,807.745,447.845,771.917,447.845z
-						"/>
-				</g>
-			</g>
-			<g id="Shape_81_2_">
-				<g>
-					<path d="M499.475,197.479c0,0-120.918-120.918-483.637-120.918v725.473c366.501,0,483.637,120.896,483.637,120.896
-						s117.141-120.896,483.643-120.896V76.561C620.393,76.561,499.475,197.479,499.475,197.479z M439.024,761.643
-						c-54.323-28.685-148.593-64.25-302.292-77.223V197.479c153.695,12.854,247.965,48.401,302.292,77.206V761.643z M862.211,684.42
-						c-153.745,13.007-248.015,48.538-302.286,77.224V274.686c54.271-28.805,148.541-64.353,302.286-77.206V684.42z"/>
-				</g>
-			</g>
-			<g id="Shape_1_2_">
-				<g>
-					<path d="M350.242,117.661c16.812,0,30.574-13.033,31.803-29.534c0.6-1.85-23.154-82.915-30.185-82.915h-3.153
-						c-7.021,0-30.815,80.77-30.29,82.515C319.458,104.429,333.289,117.661,350.242,117.661z M737.678,632.005l-55.999-63.646
-						c-0.841-0.988-1.934-1.65-3.062-2.081c-0.831-0.295-1.729-0.494-2.618-0.494c-1.775,0-3.573,0.604-5.014,1.882l-64.658,56.85
-						l-4.229,3.709l-17.005,14.973v-98.229v-3.352c0-4.699,3.808-8.503,8.503-8.503c4.698,0,8.502,3.804,8.502,8.503v3.352v71.943
-						l63.267-55.61c2.938-2.584,6.702-4.005,10.625-4.005c0.895,0,1.766,0.084,2.604,0.242V477.85
-						c0-25.046-20.001-45.356-44.71-45.356H403.434c-8.04,0-15.276-5.58-17.205-13.074v-53.561l35.451,2.188
-						c6.527,30.931,33.975,54.138,66.834,54.138c32.854,0,60.297-23.207,66.834-54.117l47.999-2.964
-						c5.876,0,10.626-4.771,10.626-10.637c0-5.843-4.75-10.604-10.342-10.604c0,0,0,0-0.021,0l-48.017-2.954
-						c-1.546-8.051-4.478-15.597-8.598-22.365l32.854-34.306c1.944-1.786,2.854-4.445,2.491-7.293
-						c-0.284-2.354-1.419-4.709-3.163-6.59c-2.261-2.429-5.256-3.815-8.193-3.815c-2.139,0-4.12,0.756-5.37,1.934l-37.006,30.059
-						c-7.269-5.266-15.576-9.133-24.572-11.215l-4.32-69.808c0-5.844-4.771-10.625-10.636-10.625
-						c-5.854,0-10.605,4.771-10.605,10.342l-4.309,69.808c-9.406,2.018-18.098,5.949-25.613,11.394l-36.698-29.765
-						c-1.479-1.367-3.479-2.123-5.595-2.123c-2.953,0-5.946,1.387-8.208,3.826c-1.755,1.892-2.88,4.226-3.164,6.58
-						c-0.336,2.848,0.567,5.507,2.312,7.115l32.886,34.315c-4.149,6.811-7.125,14.431-8.681,22.534l-35.209,2.176V233.8
-						c0-13.41-6.896-25.182-17.341-32.024l7.767-40.559c0-0.873-0.084-1.734-0.188-2.564c5.748-0.294,10.312-4.436,10.312-9.533
-						v-11.992c0-5.297-4.908-9.606-10.961-9.606H323.79c-6.054,0-10.962,4.299-10.962,9.606v11.992
-						c0,5.108,4.572,9.239,10.311,9.533c-0.104,0.83-0.188,1.691-0.188,2.564l7.41,38.625c-12.275,6.369-20.688,19.18-20.688,33.958
-						v632.72c-10.09,0.945-17.973,9.42-17.973,19.738v22.428h-8.397c-13.212,0-23.932,8.896-23.932,19.854v45.233
-						c0,10.948,10.72,19.846,23.932,19.846h330.06c13.223,0,23.938-8.896,23.938-19.846V928.54c0-10.963-10.71-19.854-23.938-19.854
-						H605v-22.428c0-10.962-8.87-19.842-19.844-19.842h-0.062V700.741l17.551,19.969l14.932,16.943
-						c1.492,1.702,3.594,2.569,5.69,2.569c1.786,0,3.573-0.614,5.003-1.897l50.365-44.271l58.372-51.331
-						C740.158,639.973,740.452,635.159,737.678,632.005z M633.899,744.747c-2.927,2.554-6.679,3.962-10.558,3.995
-						c5.145,2.553,10.899,4.021,17.025,4.021c21.127,0,38.269-17.132,38.269-38.257l-0.01-9.123L633.899,744.747z"/>
-				</g>
-			</g>
-			<g id="Shape_98_2_">
-				<g>
-					<path d="M574.609,257.319c12.188-18.391,24.771-35.099,38.358-51.091c7.396-8.646,14.326-16.209,21.179-23.155
-						c8.356-8.496,15.903-15.442,21.284-19.624c1.521-1.199,3.114-2.632,4.447-4.081c6.769-7.279,10.295-16.775,9.912-26.703
-						c-0.367-9.929-4.598-19.124-11.878-25.888c-14.492-13.427-39.113-12.561-52.657,2.066
-						c-9.628,10.378-16.042,18.907-24.065,29.818c-6.696,9.278-13.243,19.057-20.013,29.951
-						c-12.261,19.808-23.536,40.764-33.5,62.286c-10.428,22.389-18.688,44.095-25.271,66.4
-						c-5.298,18.308-11.628,42.862-13.493,70.415c-0.566,8.229,5.047,15.759,13.076,17.542c1.217,0.266,2.433,0.399,3.682,0.399
-						c7.796,0,14.676-5.53,16.525-13.894c3.932-17.591,11.022-37.465,21.104-59.087
-						C552.021,294.085,562.565,275.444,574.609,257.319z M689.303,325.836l-6.479,2.016c-23.561,7.246-45.211,15.626-66.217,25.688
-						c-17.158,8.329-39.614,20.073-61.309,37.098c-6.348,4.981-8.13,14.026-4.182,21.04c2.915,5.197,8.429,8.435,14.376,8.435
-						c2.812,0,5.614-0.732,8.746-2.471c15.573-8.763,35.133-16.759,58.104-23.738c19.341-5.831,40.27-10.412,62.169-13.61
-						c20.846-3.065,41.663-4.831,63.688-5.397c10.523-0.267,21.021,0.15,31.351,0.616c6.58,0.317,19.524,2.716,27.271,4.148
-						c4.108,0.75,7.046,1.216,8.439,1.249c22.272,0,37.415-12.743,37.665-31.684c0.316-21.356-19.474-31.968-36.479-34.566
-						c-12.729-1.949-39.53-6.047-70.521-3.398C728.7,313.542,708.677,319.789,689.303,325.836z M858.985,562.585
-						c-10.628-9.412-19.273-15.625-30.368-23.388c-9.412-6.52-19.357-12.827-30.368-19.357
-						c-19.974-11.728-41.18-22.556-63.036-32.101c-22.639-9.912-44.511-17.708-66.967-23.822
-						c-27.836-7.379-49.042-10.944-71.647-11.96c-8.273,0-15.403,5.896-16.985,14.01c-1.816,9.361,4.312,18.479,14.486,20.479
-						c17.681,3.465,37.721,10.045,59.487,19.521c18.729,8.185,37.615,18.229,56.089,29.836
-						c18.624,11.646,35.649,23.738,52.074,36.998c8.846,7.146,16.575,13.859,23.688,20.523c8.529,7.963,15.858,15.521,20.189,20.756
-						c1.167,1.433,2.683,3.016,4.132,4.298c6.797,6.014,15.542,9.296,24.604,9.296c10.688,0,20.854-4.598,27.896-12.594
-						c6.58-7.446,9.862-17.025,9.246-26.953C870.88,578.229,866.432,569.132,858.985,562.585z M658.701,831.269
-						c18.724-2.382,31.451-20.021,29.686-41.062c-0.017-16.092-2.349-27.887-4.896-38.281c-1.2-4.695-2.021-9.361-2.832-13.993
-						c-1.199-6.69-2.438-13.604-4.715-20.557c-7.246-21.938-16.075-44.012-26.236-65.65c-10.445-22.271-21.773-42.546-34.667-61.98
-						c-10.661-15.825-25.438-36.438-45.294-55.479c-5.683-5.497-15.126-5.997-21.356-1.229c-3.515,2.665-5.764,6.547-6.347,10.895
-						c-0.583,4.364,0.566,8.685,3.682,12.744c10.911,14.312,21.562,32.566,31.651,54.256c8.562,18.562,16.025,38.632,22.139,59.654
-						c6.047,20.539,10.745,40.93,14.326,62.285c1.604,9.562,2.882,19.724,3.938,31.118c0.933,9.846,0.578,33.111,0.562,34.11
-						c-0.134,9.185,2.965,17.242,8.962,23.322c6.381,6.48,15.859,10.178,25.973,10.178
-						C655.069,831.604,656.886,831.502,658.701,831.269z M196.78,307.345c2.798,0,5.313-0.233,7.479-0.732
-						c9.545-2.199,23.105-4.082,27.869-4.365c10.212-0.6,20.69-0.35,31.201,0.767c20.557,2.116,41.846,7.812,61.503,16.476
-						c20.673,9.361,40.396,20.973,58.654,34.482c20.34,15.176,36.526,31.318,47.41,47.644c2.979,4.464,7.979,7.13,13.354,7.13
-						c2.398,0,4.73-0.517,6.896-1.55c3.858-1.854,6.773-5.063,8.212-9.102c1.433-4.042,1.197-8.375-0.649-12.243
-						c-12.993-27.237-31.201-47.544-47.354-63.952c-18.312-18.107-38.813-34.399-61.021-48.676
-						c-23.505-14.76-48.875-25.471-75.379-32.268c-13.577-3.498-27.47-4.348-41.33-5.563c-6.763-0.6-13.593,1.083-21.422,1.083
-						c-0.034,0-0.051,0-0.084,0c-7.629,0-24.721-1.999-34.149,1.249c-9.428,3.248-16.642,10.145-20.657,19.29
-						c-3.998,9.162-4.198,19.058-0.566,28.353C162.713,300.665,181.671,307.361,196.78,307.345z M436.278,518.273
-						c-0.483-9.278-8.13-15.358-18.357-15.358c-0.034,0-0.051,0-0.062,0c-25.604,0-50.823,6.13-77.132,16.975
-						c-24.688,10.245-48.061,24.394-67.602,42.602c-19.39,17.891-36.165,37.896-51.274,61.369
-						c-7.113,11.095-13.727,22.733-19.69,34.85c-5.53,11.527-10.911,23.122-15.858,38.812c-0.517,1.636-0.999,3.611-1.266,5.312
-						c-1.55,9.812,0.799,19.624,6.613,27.67c5.847,8.029,14.442,13.327,24.271,14.876c1.981,0.316,3.931,0.483,5.88,0.483
-						c18.357,0,33.8-13.183,36.682-31.336c1.217-7.479,4.115-18.439,7.713-29.284c3.582-10.628,7.613-20.74,12.027-30.138
-						c9.129-19.737,20.923-38.578,34.167-54.604c13.776-16.792,29.618-30.318,48.376-41.479
-						c19.096-11.312,40.58-19.227,61.354-23.225C430.681,534.133,436.761,526.953,436.278,518.273z M488.552,543.461
-						c-8.429-5.062-20.4-2.032-25.454,6.397c-14.188,23.688-22.788,46.594-29.335,65.896c-7.33,22.089-12.96,44.661-17.208,69.032
-						c-4.099,23.487-6.812,47.144-8.079,70.312c-0.684,12.85-0.896,24.621-0.694,36.065c0.277,11.411,0.6,23.222,2.665,38.215
-						c0.25,1.732,0.667,3.698,1.166,5.38c4.632,15.692,19.291,26.672,35.666,26.672c3.548,0,7.097-0.518,10.522-1.55
-						c19.657-5.812,30.938-26.555,25.154-46.228c-2.615-8.779-4.798-21.506-5.864-28.286c-1.532-9.712-2.781-20.174-3.715-31.104
-						c-1.749-21.09-2.231-41.979-1.466-63.812c0.75-21.756,3.032-42.995,6.729-63.056c4.314-23.173,10.045-43.326,17.441-60.732
-						C499.713,558.204,496.48,548.226,488.552,543.461z M673.644,874.131c-3.798,0-7.606,0.5-11.311,1.5
-						c-11.161,3.031-20.457,10.194-26.204,20.206s-7.246,21.673-4.215,32.8c5.064,18.791,22.206,31.938,41.68,31.938
-						c3.814,0,7.603-0.499,11.312-1.499c22.982-6.214,36.646-30.002,30.418-53.008C710.242,887.258,693.101,874.131,673.644,874.131
-						z M915.374,607.446c-23.389,4.598-38.681,27.354-34.1,50.741c3.965,20.224,21.771,34.916,42.379,34.916
-						c2.749,0,5.547-0.271,8.357-0.834c11.312-2.22,21.105-8.717,27.535-18.289c6.437-9.579,8.746-21.106,6.52-32.418
-						C961.602,618.624,939.296,602.782,915.374,607.446z M985.706,307.778c-7.563-8.713-18.074-13.96-29.604-14.776
-						c-24.006-1.865-44.489,16.525-46.155,40.063c-0.806,11.511,2.914,22.655,10.479,31.368
-						c7.579,8.729,18.091,13.977,29.604,14.775c1.028,0.084,2.05,0.101,3.081,0.101c22.568,0,41.479-17.642,43.062-40.164
-						C996.982,327.651,993.252,316.507,985.706,307.778z M722.636,105.028c2.732,0,5.521-0.25,8.296-0.8
-						c23.355-4.547,38.688-27.27,34.15-50.658c-4.448-22.955-27.054-38.797-50.642-34.183c-11.328,2.183-21.123,8.662-27.604,18.241
-						c-6.446,9.562-8.795,21.072-6.597,32.417C684.172,90.319,702.013,105.028,722.636,105.028z M78.355,323.637
-						c3.415,0,6.83-0.399,10.162-1.199c23.172-5.581,37.464-28.969,31.901-52.141c-4.698-19.49-21.973-33.101-41.996-33.101
-						c-3.398,0-6.813,0.417-10.145,1.216c-11.228,2.699-20.723,9.596-26.737,19.457c-6.03,9.846-7.863,21.439-5.147,32.668
-						C41.074,310.027,58.349,323.637,78.355,323.637z M180.354,759.055c-6.68,0-13.093,1.521-19.124,4.498
-						c-10.345,5.103-18.091,13.959-21.789,24.871c-3.698,10.944-2.916,22.672,2.215,33c7.312,14.859,22.156,24.104,38.747,24.104
-						c6.681,0,13.11-1.521,19.107-4.498c10.361-5.08,18.107-13.942,21.806-24.871c3.715-10.928,2.916-22.655-2.182-33
-						C211.806,768.316,196.946,759.055,180.354,759.055z M434.762,894.454c-3.798,0-7.606,0.517-11.311,1.517
-						c-22.989,6.214-36.648,29.984-30.418,52.979c5.062,18.842,22.205,31.968,41.679,31.968c3.798,0,7.613-0.499,11.312-1.499
-						c11.128-3.016,20.438-10.211,26.187-20.207c5.747-9.994,7.247-21.639,4.231-32.815
-						C471.344,907.581,454.202,894.454,434.762,894.454z M163.08,513.493c0.833-1.283,4.364-5.271,8.163-8.979
-						c3.515-3.479,7.313-6.796,11.228-10.022c7.962-6.53,16.608-12.35,25.67-17.593c17.858-10.382,38.415-18.156,59.354-22.688
-						c21.256-4.398,43.095-6.229,64.901-6.229h2.729c25.305,0,47.812,3.447,66.234,10.229c7.546,2.799,16.541-1.049,20.39-8.195
-						c4.331-8.062,1.299-18.125-6.78-22.473c-26.67-14.312-53.474-19.956-76.262-23.638c-25.571-3.805-51.625-4.887-78.095-3.271
-						c-27.687,1.982-54.64,8.163-80.094,18.374c-13.043,5.231-25.671,11.528-37.515,18.708c-6.43,3.881-12.26,7.796-18.891,12.71
-						c-5.597,4.248-10.445,7.936-17.225,14.693l-1.816,1.812c-1.849,1.866-3.498,3.915-4.848,6.063
-						c-11.161,17.325-6.146,40.497,11.161,51.675c6.047,3.897,13.044,5.964,20.224,5.964
-						C144.406,530.635,156.167,524.254,163.08,513.493z M73.841,534.232c-17.542-14.849-46.077-12.493-60.903,4.979
-						c-15.425,18.174-13.21,45.479,4.964,60.953c7.813,6.597,17.741,10.244,27.953,10.244c12.727,0,24.738-5.547,32.951-15.259
-						C94.231,576.995,91.982,549.675,73.841,534.232z"/>
-				</g>
-			</g>
-			<g id="Shape_96_2_">
-				<g>
-					<path d="M908.312,213.563h-49.065c0-18.053-14.639-32.709-32.709-32.709h-32.71c-18.053,0-32.71,14.656-32.71,32.709H450.41
-						c-32.71,0-32.71-81.773-65.402-81.773H205.121c-32.71,0-32.71,81.773-65.419,81.773H90.638
-						c-45.142,0-81.758,36.616-81.758,81.774v490.595c0,45.159,36.616,81.774,81.758,81.774h817.674
-						c45.142,0,81.758-36.615,81.758-81.774V295.338C990.069,250.18,953.453,213.563,908.312,213.563z M335.943,344.402
-						c0,18.054-14.646,32.693-32.71,32.693h-98.112c-18.07,0-32.71-14.64-32.71-32.693v-16.354c0-18.053,14.64-32.71,32.71-32.71
-						h98.112c18.07,0,32.71,14.64,32.71,32.71V344.402z M663.023,785.95c-135.458,0-245.312-109.865-245.312-245.312
-						c0-135.459,109.854-245.307,245.312-245.307c135.438,0,245.289,109.848,245.306,245.307
-						C908.329,676.104,798.465,785.95,663.023,785.95z M663.023,360.758c-99.336,0-179.893,80.534-179.893,179.889
-						c0,99.339,80.557,179.89,179.893,179.89c99.335,0,179.886-80.555,179.886-179.89
-						C842.909,441.292,762.358,360.758,663.023,360.758z"/>
-				</g>
-			</g>
-			<g id="Shape_117_2_">
-				<g>
-					<path d="M499.504,304.683c-107.706,0-195.04,87.334-195.04,195.049c0,107.658,87.334,195.048,195.04,195.048
-						c107.714,0,195.049-87.386,195.049-195.048C694.553,392.017,607.218,304.683,499.504,304.683z M499.504,207.15
-						c26.941,0,48.768-21.809,48.768-48.75V60.868c0-26.991-21.82-48.767-48.768-48.767c-26.925,0-48.758,21.775-48.758,48.767
-						V158.4C450.746,185.342,472.579,207.15,499.504,207.15z M740.877,307.107c12.49,0,24.965-4.717,34.481-14.234l68.941-68.997
-						c19.058-19.001,19.058-49.862,0-68.964c-19.051-19.051-49.896-19.051-68.941,0l-68.946,68.964
-						c-19.052,19.035-19.052,49.896,0,68.997C715.929,302.391,728.42,307.107,740.877,307.107z M938.367,451.015h-97.532
-						c-26.925,0-48.767,21.858-48.767,48.771c0,26.938,21.842,48.749,48.767,48.749h97.532c26.924,0,48.766-21.812,48.766-48.749
-						C987.133,472.873,965.291,451.015,938.367,451.015z M775.259,706.722c-19.034-19.051-49.896-19.051-68.946,0
-						c-19.052,19.002-19.052,49.863,0,68.897l68.946,68.964c9.534,9.518,22.009,14.334,34.482,14.334
-						c12.473,0,24.941-4.816,34.479-14.334c19.035-19.001,19.035-49.862,0-68.964L775.259,706.722z M499.362,792.346
-						c-26.925,0-48.771,21.858-48.771,48.771v97.516c0,26.958,21.843,48.771,48.771,48.771c26.934,0,48.759-21.812,48.759-48.771
-						v-97.516C548.121,814.204,526.296,792.346,499.362,792.346z M223.508,706.539l-68.956,68.947
-						c-19.043,19.052-19.043,49.896,0,68.997c9.526,9.517,22,14.229,34.482,14.229c12.474,0,24.948-4.718,34.474-14.229
-						l68.955-68.997c19.044-19.002,19.044-49.862,0-68.947C273.412,687.488,242.551,687.488,223.508,706.539z M206.865,499.632
-						c0-26.958-21.834-48.767-48.758-48.767H60.583c-26.933,0-48.766,21.809-48.766,48.767c0,26.907,21.833,48.771,48.766,48.771
-						h97.524C185.031,548.396,206.865,526.539,206.865,499.632z M223.699,292.724c9.525,9.534,21.999,14.334,34.474,14.334
-						c12.474,0,24.956-4.8,34.481-14.334c19.043-19.002,19.043-49.846,0-68.897l-68.955-68.947
-						c-19.052-19.051-49.904-19.051-68.956,0c-19.043,18.985-19.043,49.847,0,68.947L223.699,292.724z"/>
-				</g>
-			</g>
-			<g id="Shape_118_2_">
-				<g>
-					<path d="M122.342,411.566l-63.774-36.168c-16.408-9.309-37.265-3.55-46.574,12.858c-9.309,16.423-3.55,37.28,12.874,46.589
-						l78.339,44.41v355.938c0,30.182,24.467,54.664,54.648,54.664c30.196,0,54.664-24.482,54.664-54.664v-144.17L315.95,863.24
-						c0,0.023,0,0.045,0.015,0.076c15.525,25.863,49.104,34.264,75.002,18.708c25.869-15.54,34.27-49.118,18.729-75.003
-						l-89.78-149.477h206.892v177.646c0,30.182,24.472,54.659,54.663,54.659c30.187,0,54.663-24.479,54.663-54.659V656.287
-						c7.938-2.818,13.666-10.346,13.666-19.242V493.562l0.274-0.29L458.26,411.567L122.342,411.566L122.342,411.566z
-						 M854.737,329.586v27.316h136.659v-27.316H854.737z M946.422,201.398l-118.529,68.04l13.605,23.69l118.529-68.025
-						L946.422,201.398z M846.754,107.642L778.9,226.247l23.722,13.574l67.854-118.605L846.754,107.642z M759.122,261.256
-						l-68.36-109.312L566.84,290.462l-67.369-15.54l17.749,71.011l-29.922,33.441l191.733,81.69L772.758,356.9h-68.312
-						L759.122,261.256z M629.273,315.92c-11.311,0-20.512-9.171-20.512-20.491c0-11.319,9.201-20.491,20.512-20.491
-						c11.314,0,20.506,9.172,20.506,20.491C649.779,306.733,640.608,315.92,629.273,315.92z"/>
-				</g>
-			</g>
-			<g id="Shape_95">
-				<g>
-					<polygon points="873.006,752.66 961.497,752.66 853.963,627.225 914.485,627.225 808.624,509.64 843.943,509.64 
-						773.369,415.568 702.828,509.64 738.163,509.64 632.334,627.225 692.824,627.225 585.322,752.66 673.797,752.66 
-						561.825,893.695 726.325,893.695 726.325,979.982 820.381,979.982 820.381,893.695 985.043,893.695 					"/>
-				</g>
-			</g>
-			<g id="Shape_95_copy">
-				<g>
-					<polygon points="548.556,594.094 700.688,594.094 515.826,378.479 619.87,378.479 437.886,176.311 498.617,176.311 
-						377.284,14.593 255.983,176.311 316.746,176.311 134.811,378.479 238.79,378.479 53.992,594.094 206.092,594.094 
-						13.606,836.566 296.401,836.566 296.401,984.904 458.104,984.904 458.104,836.566 741.171,836.566 					"/>
-				</g>
-			</g>
-			<g id="Shape_57">
-				<g>
-					<path d="M785.441,512.893c-106.83,0-194.191,87.363-194.191,194.182c0,106.83,87.361,194.188,194.191,194.188
-						c106.825,0,194.489-87.356,194.489-194.188C979.936,600.256,892.271,512.893,785.441,512.893z M785.441,832.154
-						c-69.504,0-125.086-55.564-125.086-125.086c0-69.504,55.582-125.069,125.086-125.069S910.83,637.564,910.83,707.068
-						C910.83,776.59,854.945,832.154,785.441,832.154z M487.812,229.889c33.896-18.909,46.146-61.763,27.211-95.679
-						c-13.021-23.338-37.268-36.257-62.229-35.971c-11.342,0.144-22.876,3.154-33.454,9.062
-						c-33.868,18.909-46.146,61.763-27.209,95.694C411.061,236.915,453.945,248.798,487.812,229.889z M530.284,612.012
-						L673.18,507.891c5.932-5.146,9.908-12.276,11.27-20.021c1.338-7.71,0.047-15.979-3.766-22.829L561.857,252.096
-						c-2.994-5.433-7.455-10.021-12.823-13.143c-5.368-3.106-11.613-4.764-17.826-4.684c-5.799,0.144-11.55,1.769-16.567,4.684
-						c-4.923,2.788-9.155,6.802-12.188,11.581l-82.248,132.573l-110.063,58.48c-4.231,1.96-8.156,4.668-11.263,8.141
-						c-3.107,3.479-5.385,7.773-6.882,12.188c-1.497,4.429-2.246,9.112-1.879,13.764c0.382,4.652,1.896,9.32,4.062,13.446
-						c2.183,4.126,5.13,7.694,8.762,10.625c3.632,2.931,8.013,5.001,12.505,6.261c4.493,1.258,9.144,1.863,13.764,1.242
-						c4.62-0.604,9.128-2.295,13.126-4.684l118.522-62.862c5.336-2.819,9.925-7.073,13.126-12.187l56.298-90.692l76.604,137.289
-						L469.92,572.932c-4.636,3.983-8.027,9.208-10.004,15.013c-1.976,5.777-2.484,12.139-1.259,18.129l42.853,209.813
-						c0.748,4.571,2.501,8.922,5.002,12.823c2.485,3.92,5.863,7.396,9.688,10.005c3.84,2.628,7.966,4.413,12.506,5.321
-						c4.557,0.908,9.224,0.955,13.764,0c4.541-0.94,9.021-2.66,12.824-5.321c3.808-2.645,6.914-6.063,9.383-10.005
-						c2.453-3.918,4.285-8.538,5.002-13.126c0.72-4.571,0.516-9.271-0.62-13.764L530.284,612.012z M213.189,512.893
-						c-106.813,0-194.176,87.363-194.176,194.182c0,106.83,87.362,194.188,194.176,194.188c106.83,0,194.192-87.356,194.192-194.188
-						C407.381,600.256,320.02,512.893,213.189,512.893z M213.189,832.154c-69.504,0-125.07-55.564-125.07-125.086
-						c0-69.504,55.565-125.069,125.07-125.069c69.521,0,125.086,55.565,125.086,125.069
-						C338.275,776.59,282.709,832.154,213.189,832.154z"/>
-				</g>
-			</g>
-			<g id="Shape_61">
-				<g>
-					<path d="M432,166.023c41.952,0,76.881-33.755,76.881-76.854c0-41.924-34.929-76.854-76.881-76.854
-						c-41.91,0-76.839,34.93-76.839,76.854C355.16,132.268,390.09,166.023,432,166.023z M660.295,522.398
-						c12.799-18.647,19.766-41.93,20.955-68.719c-3.498-31.44-15.137-66.39-25.613-98.998c-10.492-20.969-1.188,0,6.952,2.336
-						c34.972,11.639,54.771,0,65.243-26.788c-32.621-72.209-60.585-143.258-94.34-214.292
-						c-26.816,1.161-47.771,10.492-61.718,26.774l45.421,124.625c-26.816-61.718-61.746-104.817-119.966-103.67
-						c-20.955,0-43.085,10.478-65.229,32.622c-1.161,1.175-2.336,2.336-3.469,3.483c-18.661,53.577-37.28,108.314-55.913,161.891
-						L210.755,472.319l22.116,44.259l24.466-8.146L400.595,753l-39.616,206.139L432,977.757l15.15,3.511l24.466-101.348
-						l55.913,89.682l41.908-3.479l-86.197-153.74l17.457-86.184l68.74-82.674L733.65,987.073l29.105-24.452l25.627-22.13
-						L660.295,522.398z M432,641.189l-20.941,44.271L294.575,492.126L430.852,423.4c0-1.161,1.147-2.322,1.147-2.322
-						c8.156-12.813,16.311-24.466,23.305-36.104c25.613,31.446,43.085,64.054,52.401,95.5L432,641.189z"/>
-				</g>
-			</g>
-			<g id="Shape_59">
-				<g>
-					<path d="M872.604,826.424L499.475,91.199L126.36,826.424H13.581v81.874h971.788v-81.874H872.604z M341.096,826.424
-						L499.475,520.67l158.379,305.754H341.096L341.096,826.424z"/>
-				</g>
-			</g>
-			<g id="Shape_54">
-				<g>
-					<path d="M728.842,272.859L766.15,8.063C681.85,29.212,555.02,83.06,474.587,164.568
-						C330.19,310.885,247.79,522.525,303.222,634.338l-57.841,60.98l-28.898,30.363c-7.254,7.154-16.804,13.979-26.503,18.771
-						c-19.828,9.947-41.688,13.004-62.226,7.518c-10.343-2.627-20.373-7.562-30.072-14.045c-9.286-5.859-20.521-16.07-24.801-22.422
-						c-25.693-33.898-16.226-97.303,3.751-147.168l0.38-1.041c2.825-7.104,0.396-15.516-6.279-19.762
-						c-7.435-4.793-17.316-2.463-22.042,5.055c-17.101,27.495-28.932,56.212-36.053,88.73c-6.659,31.84-6.031,70.104,12.987,104.188
-						c11.055,19.04,21.679,29.384,35.575,41.479c13.598,11.385,29.741,20.786,47.388,26.943c21.381,7.771,44.497,9.286,66.868,6.659
-						c-2.577,22.72-1.057,46.05,6.56,67.729c6.13,17.855,15.383,34.198,26.618,48.027c11.946,14.027,22.19,24.771,40.944,36.035
-						c33.624,19.282,71.438,19.91,102.854,13.138c32.061-7.233,60.408-19.218,87.572-36.496c6.41-4.136,9.22-12.431,6.229-19.798
-						c-3.271-8.263-12.606-12.239-20.753-8.924l-0.991,0.413c-49.238,20.19-111.827,29.812-145.271,3.784
-						c-6.262-4.346-16.324-15.779-22.19-25.132c-6.411-9.852-11.235-20.009-13.83-30.485c-5.453-20.783-2.379-42.938,7.418-62.949
-						c4.759-9.883,11.5-19.497,18.539-26.885l29.56-28.781l0.446-0.479l2.462-2.396l57.696-56.228
-						c110.35,56.15,319.229-27.276,463.729-173.645C901.09,438.463,968.09,318.342,990.151,235L728.842,272.859z M635.587,300.916
-						c-21.86,22.141-57.318,22.141-79.179,0.033c-21.859-22.125-21.859-58.095,0-80.236c21.854-22.124,57.352-22.124,79.179,0
-						C657.479,242.854,657.479,278.791,635.587,300.916z"/>
-				</g>
-			</g>
-			<g id="Shape_65">
-				<g>
-					<path d="M845.676,616.973c-20.965,0-41.036,4.854-58.784,13.146c-17.521,7.618-36.874,12.228-57.186,12.228
-						c-20.276,0-39.642-4.604-57.167-12.228c-17.749-8.29-37.803-13.146-58.784-13.146c-20.759,0-40.812,4.854-58.784,13.146
-						c-17.302,7.618-36.667,12.228-56.938,12.228c-20.294,0-39.9-4.604-57.188-12.228c-17.729-8.29-37.803-13.146-58.781-13.146
-						c-20.968,0-41.033,4.854-58.781,13.146c-17.525,7.618-36.891,12.228-57.168,12.228c-20.294,0-39.659-4.604-57.185-12.228
-						c-17.749-8.29-37.579-13.146-58.561-13.146s-41.036,4.854-58.784,13.146c-17.525,7.618-36.891,12.228-57.168,12.228v85.528
-						c20.277,0,39.643-4.627,57.168-12.229c17.748-8.288,37.802-13.143,58.784-13.143c20.981,0,40.812,4.854,58.561,13.143
-						c14.756,6.446,31.112,10.146,47.966,11.303l-71.012,70.788c-22.599-14.068-52.576-11.54-72.165,8.062L32.316,887.18
-						c-22.616,22.582-22.616,59.271,0,82.071c22.805,22.6,59.472,22.6,82.054,0l81.383-81.383
-						c18.471-18.454,21.687-46.109,10.146-68.021l97.997-97.756c6.69-2.062,13.14-3.68,19.365-6.446
-						c17.731-8.286,37.808-13.143,58.784-13.143c20.982,0,41.053,4.854,58.784,13.143c17.284,7.604,36.874,12.229,57.185,12.229
-						c20.277,0,39.646-4.627,56.944-12.229c17.989-8.286,38.025-13.143,58.784-13.143c20.979,0,41.035,4.854,58.784,13.143
-						c17.521,7.604,36.891,12.229,57.168,12.229c20.312,0,39.654-4.627,57.185-12.229c17.749-8.286,37.819-13.143,58.784-13.143
-						c20.979,0,40.829,4.854,58.784,13.143c17.302,7.604,36.891,12.229,57.185,12.229V642.34c-20.294,0-39.883-4.604-57.185-12.228
-						C886.487,621.822,866.657,616.973,845.676,616.973z M942.279,477.114c-12.899,0.465-393.775,0-393.775,0l116.657-116.536
-						l15.667,5.985c19.83,7.154,41.965-3.01,49.343-22.822c5.073-14.052,1.152-29.272-8.53-39.419l95.451-95.796
-						c21.896,11.558,49.565,8.548,68.003-9.889l81.399-81.383c22.822-22.822,22.822-59.489,0-82.071
-						c-22.604-22.839-59.489-22.839-82.07,0l-81.383,81.383c-19.606,19.59-22.152,49.566-7.86,71.924L693.968,289.824
-						l-201.032-74.47c-5.297-2.992-10.853-5.538-17.061-7.378c-43.805-13.14-90.154,11.764-103.294,55.568l-61.776,207.019
-						c-0.929,2.43-1.146,4.511-1.394,6.592H34.614v111.114c14.98,0,30.425-3.438,44.028-9.46
-						c22.375-10.353,47.262-15.891,71.7-15.891c24.439,0,49.102,5.521,70.995,15.668c14.533,6.449,29.513,9.683,44.733,9.683
-						c15.444,0,30.441-3.229,44.269-9.46c22.604-10.369,47.262-15.925,71.7-15.925c24.663,0,48.878,5.313,71.253,15.688
-						c14.052,6.443,29.513,9.683,44.716,9.683c15.221,0,30.218-3.231,44.271-9.459c22.354-10.371,47.272-15.908,71.459-15.908
-						c24.921,0,48.896,5.297,71.253,15.688c14.292,6.447,29.73,9.665,44.716,9.665c15.238,0,30.439-3.222,44.286-9.441
-						c22.354-10.371,47.262-15.926,71.684-15.926c4.162,0,20.981,1.29,37.578-9.786c29.514-12.898,40.571-20.294,66.403-36.082
-						C970.863,503.978,988.405,475.618,942.279,477.114z M506.54,477.149h-24.663l49.79-165.879l102.829,38.025L506.54,477.149z
-						 M505.852,106.54l-10.594,22.582c-6.932,14.068-21.224,23.751-37.579,23.751h-24.92c14.312,20.294,37.819,33.434,64.321,33.434
-						c43.354,0,78.632-35.033,78.632-78.391v-4.162h-66.18C507.915,103.754,506.316,104.924,505.852,106.54z M457.662,133.043
-						c8.53,0,16.132-5.073,19.589-12.452l10.388-22.581c3.921-8.53,12.229-14.292,21.896-14.292h81.159
-						c-10.611-41.74-48.654-72.405-93.611-72.405c-53.246,0-96.362,43.116-96.362,96.604c0,8.53,0.935,17.061,3.233,25.127
-						L457.662,133.043L457.662,133.043z"/>
-				</g>
-			</g>
-			<g id="Shape_115_2_">
-				<g>
-					<path d="M955.043,960.077C498.044,816.275,139.233,656.928,57.386,619.883c-8.459-3.412-18.289,0.482-21.482,8.692
-						c-3.442,8.458,0.218,17.618,8.459,20.812c20.345,9.146,40.457,18.062,59.898,26.521l-64.462,49.146
-						c-7.337,10.77-4.128,24.479,6.621,31.779c8.007,5.479,19.441,4.797,27.215-0.234l110.869-46.401
-						c271.261,114.071,477.234,180.62,767.346,272.049c5.938,0.919,11.438-3.194,12.354-9.378
-						C965.105,966.932,960.994,961.215,955.043,960.077z M255.134,660.479c8.256,0.473,16.232-1.366,23.087-4.812l169.988-76.801
-						c12.104-6.402,21.264-18.07,24.224-32.23l-0.218-85.509l117.958,105.62l-21.716,179.927c0,1.144-0.234,2.274-0.234,3.427
-						c-1.137,26.529,19.433,48.916,45.956,50.068c24.925,0.903,46.173-17.151,49.616-41.609l25.377-205.304
-						c0-0.903,0.218-1.823,0.218-2.741c0.452-14.404-5.265-27.434-14.855-36.578l-109.271-97.155l164.604-80.929l152.71,140.59
-						c6.854,6.636,16.248,10.765,26.296,10.765c20.578-0.25,37.045-16.936,36.812-37.278c0-10.967-5.027-20.797-12.567-27.667
-						L722.26,228.639c1.465,0.078,2.935,0.218,4.408,0.218c42.763,0,77.283-34.739,77.283-77.485
-						c0-42.762-34.521-77.517-77.283-77.517c-42.965,0-77.485,34.755-77.485,77.517c0,16.295,5.032,31.437,13.662,43.931
-						l-143.054-51.034L442.508,32.478c-5.951-8.24-15.106-13.724-25.829-15.095c-20.105-2.274-38.634,12.354-40.938,32.714
-						c-0.904,8.443,1.147,16.669,5.265,23.539l78.872,114.312c3.661,4.562,8.241,8.443,13.709,10.967l91.458,35.893L414.84,311.623
-						c-21.031,11.886-35.892,32.932-40.005,57.374l0.67,137.399l-138.879,62.64c-15.547,7.54-26.732,23.087-27.433,41.594
-						C208.057,637.158,228.636,659.342,255.134,660.479z"/>
-				</g>
-			</g>
-			<g id="Shape_75">
-				<g>
-					<path d="M888.713,892.24c-16.998-7.8-36.293-12.477-56.42-12.477c-20.018,0-39.295,4.654-56.326,12.477
-						c-16.871,7.642-35.475,12.123-54.973,12.123c-19.264,0-38.117-4.481-54.722-12.123c-17.099-7.8-36.394-12.477-56.53-12.477
-						c-19.907,0-39.232,4.654-56.295,12.477c-16.812,7.642-35.479,12.123-54.957,12.123c-19.514,0-38.104-4.481-54.753-12.123
-						c-17.092-7.8-36.402-12.477-56.451-12.477c-20.128,0-39.438,4.654-56.452,12.477c-16.7,7.642-35.396,12.123-54.895,12.123
-						c-19.373,0-38.085-4.481-54.816-12.123c-17.124-7.8-36.371-12.477-56.452-12.477c-20.018,0-39.296,4.654-56.389,12.477
-						c-16.747,7.642-35.302,12.123-54.8,12.123v83.168c19.499,0,38.054-4.529,54.8-12.124c17.093-8.104,36.355-12.771,56.389-12.771
-						c20.081,0,39.328,4.688,56.452,12.771c16.731,7.595,35.443,12.124,54.816,12.124c19.515,0,38.195-4.529,54.895-12.124
-						c16.999-8.104,36.324-12.771,56.452-12.771c20.033,0,39.359,4.688,56.451,12.771c16.646,7.595,35.239,12.124,54.753,12.124
-						c19.479,0,38.146-4.529,54.957-12.124c17.078-8.104,36.388-12.771,56.311-12.771c20.127,0,39.422,4.688,56.521,12.771
-						c16.604,7.595,35.458,12.124,54.753,12.124c19.479,0,38.064-4.529,54.957-12.124c17.047-8.104,36.309-12.771,56.311-12.771
-						c20.127,0,39.438,4.688,56.438,12.771c16.646,7.595,35.459,12.124,54.732,12.124v-83.168
-						C924.188,904.363,905.381,899.882,888.713,892.24z M634.367,158.983V640.22h302.951
-						C960.559,415.971,783.484,229.084,634.367,158.983z M873.287,685.479H734.988H199.156v123.678
-						c7.579,2.023,15.096,4.246,21.983,7.596c16.715,7.358,35.443,11.902,54.8,11.902c19.53,0,38.227-4.544,54.911-11.902
-						c16.999-8.035,36.312-12.754,56.438-12.754c20.062,0,39.354,4.702,56.451,12.754c16.684,7.358,35.271,11.902,54.769,11.902
-						c19.467,0,38.133-4.544,54.941-11.902c17.094-8.035,36.388-12.754,56.311-12.754c20.127,0,39.453,4.702,56.521,12.754
-						c16.604,7.358,35.476,11.902,54.753,11.902c3.758,0,7.312-0.934,10.834-1.354c0.426,0,0.426,0.424,0.859,0.424
-						c2.475,0,4.268-1.1,6.688-1.1c4.449-0.598,8.852-1.117,13.334-2.201c39.855-8.335,65.588-39.721,65.588-39.721l77.521-99.191
-						h-22.55v-0.025L873.287,685.479L873.287,685.479z M79.507,643.885c168.914,0,337.844,0,506.774,0
-						c2.013,0,3.664-1.667,3.664-3.646c0-208.511,0-417.002,0-625.495c0-1.604-0.865-2.61-1.982-3.13
-						c-1.242-0.88-2.861-1.006-4.166,0.473l-0.047,0.031c-0.017,0.016-0.032,0.016-0.048,0.031
-						c-168.931,208.507-337.844,417-506.774,625.509C75.01,640,76.079,643.885,79.507,643.885z"/>
-				</g>
-			</g>
-			<g id="Shape_94_2_">
-				<g>
-					<path d="M499.52,251.556c67.033-0.033,121.269-54.313,121.269-121.214c0-66.983-54.248-121.247-121.269-121.279
-						C432.561,9.095,378.41,63.359,378.41,130.342C378.405,197.242,432.561,251.522,499.52,251.556z M904.143,603.831
-						c-1.254-5.731-3.666-10.902-6.688-15.577l0.166-0.082l-0.414-0.363c-3.979-6.046-9.283-11.002-15.328-14.636l-93.43-88.854
-						l-94.521-175.824l-4.395-8.177l-0.197,0.148c-11.299-17.195-31.057-27.388-52.133-26.083H361.754
-						c-21.095-1.305-40.851,8.888-52.124,26.083l-0.198-0.148l-4.402,8.177l-94.536,175.824l-93.405,88.854
-						c-6.087,3.617-11.381,8.573-15.354,14.636l-0.396,0.363l0.148,0.082c-3.031,4.675-5.426,9.846-6.682,15.577
-						c-5.699,25.786,10.58,51.34,36.366,57.021c1,0.221,1.933,0.198,2.924,0.353c-5.979,11.646-9.68,24.608-9.68,38.588
-						c0,36.407,22.944,67.229,55.057,79.405l-0.149,0.312l141.778,61.354l-28.966,14.586c-2.998,1.205-5.806,2.771-8.572,4.354
-						l-0.355,0.188c-20.962,12.104-35.284,34.485-35.284,60.458c0,38.648,31.376,69.984,70.047,69.984
-						c8.581,0,16.749-1.768,24.364-4.625l0.1,0.247l2.062-0.854c0.495-0.248,1.021-0.463,1.544-0.711l153.434-66.395l153.442,66.395
-						c0.512,0.248,1.041,0.463,1.535,0.711l2.062,0.854l0.104-0.247c7.611,2.857,15.771,4.625,24.35,4.625
-						c38.67,0,70.039-31.336,70.039-69.984c0-25.973-14.289-48.354-35.268-60.458l-0.33-0.188c-2.793-1.585-5.584-3.151-8.594-4.354
-						l-28.977-14.586l141.765-61.354l-0.134-0.298c32.111-12.174,55.039-43.014,55.039-79.388c0-14.011-3.698-26.979-9.68-38.621
-						c1.021-0.148,1.934-0.132,2.924-0.33C893.57,655.171,909.842,629.617,904.143,603.831z M251.484,625.934l-0.074,0.148
-						c-11.621-6.591-24.827-10.638-39.033-11.134l83.097-72.853l40.726-65.892L350.01,675.6L251.484,625.934z M747.547,626.082
-						l-0.062-0.132l-84.74,42.684l14.223-169.432l26.518,42.896l83.09,72.853C772.391,615.444,759.16,619.475,747.547,626.082z"/>
-				</g>
-			</g>
-			<g id="Shape_103_2_">
-				<g>
-					<path d="M67.104,58.769H40.908c-8.845,0-15.987,7.143-15.987,15.987v197.389c0,8.845,7.143,16.004,15.987,16.004h26.196
-						c8.828,0,16.004-7.159,16.004-16.004V74.756C83.108,65.912,75.932,58.769,67.104,58.769z M958.008,58.769h-26.18
-						c-8.844,0-16.004,7.159-16.004,15.987v197.389c0,8.845,7.16,16.004,16.004,16.004h26.18c8.846,0,16.021-7.159,16.021-16.004
-						V74.756C974.029,65.912,966.854,58.769,958.008,58.769z M868.133,20.528h-34.889c-11.812,0-21.361,9.552-21.361,21.344v109.569
-						h-78.084c-2.812-5.694-6.822-10.934-12.01-15.263c-19.93-16.61-49.512-13.966-66.141,5.946c0,0-3.02,3.555-7.867,9.316h-81.906
-						c-11.625-25.084-36.928-42.504-66.392-42.504c-29.498,0-54.807,17.42-66.408,42.504h-88.479l-7.918-9.316
-						c-16.594-19.912-46.208-22.557-66.156-5.946c-5.188,4.329-9.198,9.568-11.994,15.263h-71.496V41.872
-						c0-11.792-9.552-21.344-21.345-21.344h-34.905c-11.793,0-21.328,9.552-21.328,21.344v263.175
-						c0,11.775,9.535,21.327,21.328,21.327h34.905c11.793,0,21.345-9.552,21.345-21.327v-109.57h72.793
-						c1.364,2.409,2.914,4.734,4.751,6.924l134.08,160.479v156.621c0,4.348-19.593,408.172-19.593,408.172
-						c-1.903,26.415,18.06,49.343,44.438,51.18c26.398,1.785,49.275-18.01,51.111-44.475l16.291-314.473
-						c2.896,0.186,15.529,0.305,18.917-0.117l21.582,314.59c1.752,26.448,24.68,46.26,51.158,44.479
-						c26.312-1.854,46.324-24.78,44.438-51.185c0,0-26.717-404.633-26.717-408.172V354.962l94.438-113.107l33.069-39.454
-						c1.816-2.189,3.388-4.531,4.75-6.924h79.359v109.569c0,11.792,9.552,21.344,21.345,21.344h34.905
-						c11.791,0,21.356-9.568,21.356-21.344V41.872C889.494,30.08,879.926,20.528,868.133,20.528z M557.166,258.55
-						c-16.375,14.454-37.77,23.281-61.254,23.281c-21.984,0-42.1-7.665-57.968-20.451l-55.98-65.903h45.502
-						c6.232,34.098,36.021,59.99,72.001,59.99c35.95,0,65.771-25.893,71.985-59.99h39.168
-						C584.742,226.137,557.283,258.634,557.166,258.55z"/>
-				</g>
-			</g>
-			<g id="Shape_66_2_">
-				<g>
-					<path d="M954.828,536.588c-56.789-64.501-140.688-90.534-227.962-90.534c-98.066,0-200.427,32.868-273.302,80.896
-						c-74.257,48.827-112.235,132.598-183.81,183.979c-18.285,13.115-39.022,21.131-60.761,26.91
-						c-10.467,2.791-21.148,5.027-31.92,7.104V308.357l452.396-139.2l-452.39-139.2h-34.8v721.299
-						c-44.104,8.194-86.454,18.807-115.636,53.908c-65.252,78.528,17.427,144.621,98.245,156.216
-						c41.349,5.958,83.18,8.158,125.118,8.158c73.646,0,147.663-6.834,220.396-12.292c111.557-8.444,229.441-23.832,328.891-76.273
-						c75.916-40.06,159.955-92.604,188.977-175.181C1008.665,647.679,996.016,583.375,954.828,536.588z M63.985,866.229
-						c0-25.729,33.368-47.307,78.295-53.152v106.312C97.354,913.572,63.985,891.994,63.985,866.229z M177.08,920.676V811.82
-						c51.727,2.827,92.108,26.141,92.108,54.408C269.188,894.535,228.807,917.849,177.08,920.676z"/>
-				</g>
-			</g>
-			<g id="Shape_119_2_">
-				<g>
-					<path d="M212.583,472.83c72.156,18.039,172.655,54.117,252.531,154.615l11.169,12.896l3.435,3.438
-						c-18.9-59.271-42.096-112.534-69.587-160.634c-48.084-82.46-118.538-168.374-221.605-184.69
-						c-11.155,40.364-6.003,83.326,3.435,116.821C197.112,435.035,203.981,453.94,212.583,472.83z M522.666,640.348l11.184-12.896
-						c79.877-100.498,180.361-136.576,252.531-154.615c8.587-18.89,15.471-37.795,21.459-57.551
-						c9.453-33.495,15.471-76.457,2.604-116.821c-101.354,16.335-173.513,102.23-221.621,184.69
-						c-27.491,48.108-50.668,101.359-69.572,160.633L522.666,640.348z M549.291,645.484l-11.141,13.754l20.604,11.17
-						c115.971-69.573,237.062-62.719,299.779-48.965c13.736-11.156,26.626-24.043,39.513-37.781
-						c21.488-23.205,44.665-55.834,55.819-93.646c-109.085-27.477-211.286,12.902-284.312,58.417
-						C625.748,575.062,586.235,607.705,549.291,645.484z M140.427,621.443c62.704-13.756,183.825-20.608,299.779,48.965
-						l20.622-11.17l-11.155-13.754c-36.944-37.779-76.438-70.43-120.255-97.055c-73.022-45.516-175.238-85.895-284.323-58.417
-						c11.155,37.812,34.346,70.439,55.819,93.646C113.801,597.386,126.688,610.287,140.427,621.443z M982.227,731.396l-3.434-2.584
-						c-16.322-18.896-65.287-57.557-134.009-78.18c-68.728-20.604-158.05-24.057-260.271,38.662
-						c-19.756,11.169-36.93,24.062-57.551,40.378l-9.453,7.727L508.045,746l8.604,7.721
-						c50.691,36.936,103.081,62.725,156.331,77.312c91.062,23.205,208.729,20.621,314.386-94.481
-						C986.514,733.963,984.811,733.963,982.227,731.396z M471.998,729.691c-20.623-16.322-37.795-29.229-57.552-40.396
-						c-101.365-61.838-190.694-59.255-260.281-38.646c-69.572,20.622-115.103,59.27-133.993,78.176l-3.435,2.582l-5.152,5.138
-						c105.636,115.118,223.322,117.688,314.383,94.495c53.251-14.604,105.651-40.378,156.333-77.322l8.586-7.721l-9.438-8.586
-						L471.998,729.691z M577.634,465.124c0-36.944-2.562-73.022-8.587-109.951c-9.438-62.718-28.342-140.012-69.558-199.295
-						c-40.378,59.283-60.136,136.577-69.604,199.295c-6.003,36.929-8.586,73.007-8.586,109.951c0,7.72,72.171,45.53,72.171,159.768
-						h12.021C505.492,510.641,577.634,472.845,577.634,465.124z"/>
-				</g>
-			</g>
-			<g id="Shape_102_2_">
-				<g>
-					<path d="M787.021,203.933c45.07,0,81.694-36.608,81.694-81.618c0-45.126-36.624-81.733-81.694-81.733
-						c-45.062,0-81.688,36.607-81.688,81.733C705.338,167.341,741.962,203.933,787.021,203.933z M975.197,429.71l-230.12-211.492
-						c-7.673-7.491-16.621-13.49-26.498-17.849L539.318,136.5L457.883,18.457c-6.297-8.451-15.926-14.467-27.261-15.926
-						c-21.428-2.402-40.718,13.026-43.354,34.471c-0.979,9.131,1.21,17.781,5.783,25.057l83.146,120.23
-						c3.845,5.055,8.667,8.933,14.468,11.584l96.35,38.033l-158.522,80.971c-21.931,12.794-37.854,34.735-42.182,60.737
-						l0.979,144.817l-146.381,66.013c-16.655,7.756-28.455,24.354-29.167,43.86c-0.497,11.534,3.066,22.206,9.181,30.989
-						c-48.274-18.356-78.949-30.022-78.949-30.022c-14.799-5.688-26.383-17.732-31.454-33.018
-						c-9.032-26.847-38.199-41.298-65.062-32.299c-26.865,9.049-41.332,38.199-32.284,65.096
-						c14.931,44.437,48.655,79.52,92.306,96.118L791,985.868c43.833,16.771,92.271,12.993,132.644-10.24
-						c24.609-14.037,33.017-45.375,18.908-69.969c-14.086-24.646-45.405-33.044-69.979-18.941
-						c-13.605,7.822-30.128,9.064-45.062,3.248c-0.033,0-72.304-27.492-169.88-64.581c17.583-6.099,30.975-21.727,33.492-40.884
-						l26.729-216.646c0.249-0.979,0.249-1.956,0.249-2.917c0.714-15.146-5.284-29.117-15.655-38.812l-115.2-102.148l173.51-85.579
-						l161.181,148.485c7.241,6.994,16.893,11.271,27.729,11.271c21.659-0.216,39.011-17.782,38.795-39.513
-						C988.472,447.078,983.169,436.704,975.197,429.71z M613.528,581.825L590.64,771.971c0,0.961-0.229,2.144-0.229,3.298
-						c-0.437,9.86,2.121,19.097,6.646,27.079C489.553,761.483,365.494,714.3,274.082,679.534c3.663-0.911,7.176-2.144,10.44-3.745
-						l179.377-80.954c12.771-6.978,22.389-19.307,25.531-33.956l-0.479-90.169L613.528,581.825z"/>
-				</g>
-			</g>
-			<g id="Shape_72_2_">
-				<g>
-					<path d="M99.477,483.251c-21.05,0-38.322,17.271-38.322,38.322c0,21.062,17.272,38.073,38.322,38.073
-						c21.066,0,38.075-17.013,38.075-38.073C137.551,500.522,120.543,483.251,99.477,483.251z M630.69,164.219
-						c45.69,0,82.99-37.052,82.99-82.996c0-45.943-37.3-83.242-82.99-83.242c-45.933,0-83.242,37.315-83.242,83.242
-						C547.448,127.15,584.764,164.219,630.69,164.219z M987.798,904.58L852.771,745.188c0,0-42.139-246.194-42.139-246.711
-						c0-0.242-6.335-27.93-6.335-27.93c0.247,0.266-17.009-77.65-30.223-138.573c21.083,12.191,40.104,23.112,41.127,23.607
-						c1.006,2.293,71.58,136.544,71.58,136.544c5.328,9.898,14.203,17.256,24.854,20.555c10.926,3.305,22.354,2.312,32.253-3.052
-						c9.896-5.062,17.259-13.956,20.56-24.86c3.547-10.674,2.54-22.089-2.788-31.981l-77.42-147.449c0,0-3.068-5.328-7.11-9.387
-						c-5.592-5.575-17.767-12.438-17.767-12.438l-150.253-85.52c-19.038-9.65-40.104-12.95-61.172-8.38
-						c-8.631,1.781-16.766,5.081-25.888,10.162c-1.04,0.247-34.275,14.962-53.562,60.147l-77.145,155.317
-						c0,0-117.508,22.848-121.58,23.604c-1.009,0.248-2.025,0.513-2.786,1.023l-109.62-77.669
-						c-24.63-17.272-27.682-69.039-27.929-71.085c-3.052-35.534-23.359-69.022-55.842-92.135
-						c-29.43-20.803-64.964-29.694-97.447-24.366c-25.372,4.322-46.95,17.52-60.659,36.805
-						c-10.684,14.994-16.26,33.025-16.26,52.294c0,0.247,1.534,16.744,1.534,16.744c5.576,32.746,25.636,63.199,55.066,84.266
-						c29.694,21.066,64.965,29.942,97.463,24.366l7.605-1.518c0.775-0.512,49.491-15.49,73.345,0.759
-						c0,0.247,81.989,58.135,103.814,73.604c-2.293,3.553-6.352,11.416-6.088,19.532c0,2.541,0.248,5.081,0.759,7.622
-						c4.312,22.831,26.659,38.062,49.491,33.488l145.685-28.424c0,0,12.438-3.812,17.771-7.622
-						c6.847-4.816,11.928-14.962,11.928-14.962l38.321-77.156c0,0,26.379,124.617,26.891,126.894
-						c-3.036,3.059-119.536,126.663-119.536,126.663l-2.013,2.524c-11.433,10.409-17.784,24.102-17.784,38.586v261.938
-						c0,27.913,22.854,50.497,50.777,50.497c27.666,0,50.514-22.584,50.514-50.497c0,0,0-215.229,0-218.775
-						c10.646-11.168,100.004-105.332,123.842-130.209c2.54,14.715,25.642,147.443,25.642,147.443
-						c2.023,11.685,7.604,22.354,15.979,30.969c0,0.243,160.415,189.599,160.415,189.599c8.876,10.162,21.066,16.497,34.517,17.768
-						c13.463,1.022,26.396-3.3,36.784-11.928c11.685-9.896,17.782-24.35,17.782-38.586
-						C999.725,925.63,995.914,914.214,987.798,904.58z M187.306,333.525c-8.892,12.422-22.601,20.556-39.592,23.591
-						c-23.854,4.058-50.514-2.788-72.85-19.037c-22.584-15.986-37.827-38.817-41.886-62.688l-1.006-11.91
-						c0-12.439,3.3-23.624,10.146-33.258c22.089-30.965,72.586-32.994,112.689-4.57
-						C194.663,254.077,209.378,302.545,187.306,333.525z"/>
-				</g>
-			</g>
-			<g id="Shape_62_2_">
-				<g>
-					<path d="M930.303,749.494c-18.771-8.887-40.047-14.092-62.305-14.092c-22.307,0-43.584,5.221-62.389,14.092
-						c-18.379,8.146-38.9,13.142-60.422,13.142c-21.512,0-42.1-4.985-60.43-13.142c-19.1-8.887-40.391-14.092-62.387-14.092
-						c-22.229,0-43.535,5.221-62.404,14.092c-18.297,8.146-39.109,13.142-60.402,13.142c-21.537,0-42.027-4.985-60.604-13.142
-						c-18.854-8.887-40.081-14.092-62.126-14.092c-22.258,0-43.55,5.221-62.403,14.092c-18.33,8.146-39.164,13.142-60.685,13.142
-						c-21.21,0-42.012-4.985-60.342-13.142c-18.854-8.887-40.146-14.092-62.387-14.092c-22.078,0-43.288,5.221-62.158,14.092
-						c-18.625,8.146-39.147,13.142-60.652,13.142v91.688c21.538,0,42.028-4.861,60.652-13.355
-						c18.87-8.592,40.081-13.828,62.158-13.828c22.242,0,43.534,5.204,62.387,13.828c18.33,8.494,39.148,13.355,60.342,13.355
-						c21.538,0,42.355-4.861,60.685-13.355c18.854-8.592,40.162-13.828,62.403-13.828c22.045,0,43.272,5.204,62.126,13.828
-						c18.575,8.494,39.065,13.355,60.604,13.355c21.293,0,42.105-4.861,60.402-13.355c18.869-8.592,40.184-13.828,62.404-13.828
-						c22.012,0,43.303,5.204,62.387,13.828c18.33,8.494,38.918,13.355,60.43,13.355c21.521,0,42.043-4.861,60.422-13.355
-						c18.805-8.592,40.082-13.828,62.389-13.828c22.258,0,43.533,5.204,62.305,13.828c18.412,8.494,38.918,13.355,60.439,13.355
-						v-91.688C969.221,762.636,948.715,757.646,930.303,749.494z M731.504,476.525c0,65.251,47.658,118.424,116.938,118.424
-						c64.497,0,116.866-53.173,116.866-118.424c0-65.307-52.354-118.229-116.865-118.229
-						C783.795,358.297,731.504,411.225,731.504,476.525z M193.439,670.609c18.297,8.38,39.131,13.354,60.358,13.354
-						c21.505,0,42.339-4.975,60.653-13.354c18.854-8.646,40.146-14.107,62.403-14.107c22.062,0,43.271,5.467,62.142,14.107
-						c18.543,8.38,39.05,13.354,60.571,13.354c21.292,0,42.104-4.975,60.422-13.354c18.871-8.646,40.18-14.107,62.42-14.107
-						c21.979,0,43.271,5.467,62.389,14.107c18.312,8.38,38.885,13.354,60.422,13.354c15.646,0,30.771-2.684,44.979-7.185
-						L595.225,321.016l226.771-41.849c33.271-6.432,57.439-32.862,57.439-66.74c0-37.331-30.062-67.248-66.758-67.248
-						c-2.646,0-5.104,0-7.604,0.229L454.79,209.889c-24.582,5.695-57.15,42.094-38.607,86.789c1.03,2.472,1.97,4.746,2.994,7.201
-						l91.42,166.9L167.679,661.51C176.746,663.703,185.289,666.896,193.439,670.609z"/>
-				</g>
-			</g>
-			<g id="Shape_104_2_">
-				<g>
-					<path d="M341.78,867.945c7.268,38.908,17.563,76.15,30.974,111.188c40.469,10.685,82.926,16.421,126.737,16.421
-						c57.521,0,112.717-9.901,164.087-27.938c-72.299-16.354-125.641-36.612-173.549-54.867
-						C440.699,893.965,396.631,877.219,341.78,867.945z M163.639,864.38c51.695,47.634,113.505,84.354,181.875,106.649
-						c-11.896-33.99-21.026-69.683-27.665-106.546C275.43,859.358,226.116,858.604,163.639,864.38z M314.013,841.446
-						c-3.462-22.951-5.999-46.297-7.729-69.917C180.487,746.83,80.798,701.339,24.748,642.872
-						C47.751,719.285,88.717,787.83,142.692,843.81C212.267,836.287,267.305,836.338,314.013,841.446z M265.316,627.634
-						c11.381,5.937,24.477,11.159,39.338,14.775C316.464,368.811,418.279,92.127,500.862,3.99c-0.463-0.018-0.908-0.052-1.371-0.052
-						c-148.215,0-281.175,65.135-372.037,168.252C81.243,300.951,123.066,553.501,265.316,627.634z M304.843,747.927
-						c-1.354-27.305-1.629-54.867-0.96-82.53c-18.718-4.047-35.069-10.423-49.022-17.688
-						C117.805,576.298,67.6,361.149,92.813,216.276C36.695,296.632,3.665,394.316,3.665,499.748c0,29.585,2.742,58.482,7.713,86.646
-						C48.505,658.916,158.462,717.914,304.843,747.927z M875.334,176.63C791.207,78.86,669.681,14.292,532.881,5.189
-						c-79.892,56.136-192.677,352.531-204.83,641.299C434.837,657.904,614.848,583.223,875.334,176.63z M456.057,790.059
-						c-44.062-2.531-86.303-7.354-126.172-14.188c1.783,23.26,4.395,46.177,7.902,68.683
-						c61.346,9.376,108.945,27.493,160.265,47.033c54.216,20.654,115.479,43.914,203.545,60.852
-						c125.475-56.104,223.312-162.804,267.616-294.187C854.662,769.593,630.463,800.154,456.057,790.059z M890.4,195.005
-						C628.183,602.077,441.213,679.861,327.331,668.994c-0.651,28.021-0.343,55.913,1.097,83.438
-						c40.709,7.308,83.903,12.444,128.938,15.032c187.262,10.816,433.07-25.419,526.217-160.812
-						c7.576-34.438,11.707-70.179,11.707-106.906C995.283,384.82,956.031,279.114,890.4,195.005z"/>
-				</g>
-			</g>
-			<g>
-				<path fill="#231F20" d="M730.357,111.158c0-54.18,38.338-98.086,85.604-98.086c47.33,0,85.688,43.906,85.688,98.086
-					c0,54.248-57.328,141.225-85.688,140.821C788.021,251.498,730.357,165.406,730.357,111.158z"/>
-				<path fill="none" stroke="#231F20" stroke-linecap="square" d="M815.967,259.104c-34.244,105.201,15.764,172.054,15.764,172.054
-					s28.497,123.7-21.446,180.556"/>
-				<path fill="#231F20" d="M219.732,966.231c11.641,26.303,59.109,23.016,67.936,0V640.534v-7.113h14.396l0.069,7.113V966.23
-					c8.758,23.017,56.295,26.304,67.877,0V404.166c26.913,59.867,40.817,124.044,63.146,185.349c1.229,1.78,2.539,3.429,3.837,4.791
-					l-0.896,0.827c0,0,56.787,49.312,68.708,45.953c20.487-0.609,31.434-8.562,35.817-12.802c8.089,2.332,15.135,0.479,18.362-9.318
-					v127.812v34.174v170.617c0,18.834,15.351,34.116,34.238,34.116c18.977,0,34.322-15.282,34.322-34.116V780.952h8.562v170.617
-					c0,18.834,15.331,34.116,34.24,34.116c18.896,0,34.242-15.282,34.242-34.116V780.952v-34.174V606.843l77.126,46.104l0.748-1.171
-					c2.48,0.758,5.078,1.171,7.813,1.171c14.17,0,25.683-11.444,25.683-25.624c0-11.699-7.872-21.579-18.696-24.591l-84.107-62.804
-					l-22.396-6.436H576.715l-17.729,6.298c-28.359,15.616-44.398,20.062-51.503,32.473l-20.556-12.403
-					c-11.646-44.104-58.765-195.483-64.861-206.917c-10.411-19.454-28.64-43.907-54.121-44.31
-					c-12.871-0.147-32.051-0.286-46.297-0.354l-0.069-4.172h-68.625l-0.079,4.241c-10.883,0.069-22.396,0.138-31.026,0.286
-					c-25.476,0.403-43.69,24.856-54.11,44.31c-6.917,12.939-66.44,205.417-67.464,218.223c-0.688,31.37,36.576,46.849,56.374,18.354
-					c22.327-61.308,36.231-125.479,63.085-185.352L219.732,966.231L219.732,966.231z M296.169,141.633
-					c-40.413,0-73.013,32.462-73.013,72.748c0,39.931,32.6,72.325,73.013,72.325c40.758,0,72.61-32.394,72.61-72.325
-					C368.779,174.095,336.927,141.633,296.169,141.633z M630.895,380.678c-36.015,0-65.062,29.107-65.062,65.279
-					c0,35.818,29.048,64.925,65.062,64.925c36.312,0,64.674-29.104,64.674-64.925C695.562,409.785,667.205,380.678,630.895,380.678z
-					"/>
-			</g>
-			<path fill="#231F20" d="M856.168,447.81c-15.576,121.438-130.451,293.075-275.441,293.075h-43.47v-87.934
-				C522.785,521.12,754.66,403.898,841.683,403.898C856.168,418.508,861.76,404.271,856.168,447.81z M899.637,389.179
-				c0-205.114-188.46-380.967-391.392-380.967l-7.235,0.069l-7.231-0.069C290.832,8.212,102.4,184.065,102.4,389.179
-				c0,86.829,211.935,587.766,398.615,600.538C687.688,976.944,899.637,476.007,899.637,389.179z M145.878,447.81
-				c-5.62-43.534,0-29.302,14.444-43.907c87.05,0,318.924,117.222,304.458,249.053v87.934H421.28
-				C276.329,740.885,161.427,569.243,145.878,447.81z"/>
-		</g>
-		<g id="weather">
-			<g>
-				<path d="M739.76,595.529c10.271,0,19.916,2.457,28.938,7.385c4.521,2.873,8.812,6.37,12.922,10.465
-					c11.506,11.492,17.252,25.649,17.252,42.484c0,16.419-5.746,30.576-17.252,42.471c-11.896,11.09-25.844,16.628-41.859,16.628
-					c-16.42,0-30.562-5.538-42.459-16.628c-11.908-11.895-17.858-26.052-17.858-42.471c0-16.835,5.951-30.992,17.858-42.484
-					c5.33-4.914,10.868-8.812,16.614-11.688C721.689,597.57,730.334,595.529,739.76,595.529z"/>
-				<path d="M695.429,744.511c2.059-2.47,4.537-4.104,7.397-4.927c3.289-2.055,6.979-3.068,11.089-3.068s8.19,1.018,12.312,3.068
-					c1.625,1.65,3.483,3.302,5.524,4.927c4.94,4.927,7.385,11.089,7.385,18.478c0,6.968-2.44,13.13-7.385,18.473
-					c-5.33,4.512-11.284,6.773-17.836,6.773c-7.384,0-13.546-2.266-18.486-6.773c-5.33-5.343-7.995-11.505-7.995-18.473
-					C687.434,755.6,690.099,749.438,695.429,744.511z"/>
-				<path d="M590.181,750.049c0,10.674-3.719,19.903-11.103,27.703c-7.8,6.981-16.822,10.479-27.066,10.479
-					c-10.686,0-19.916-3.497-27.716-10.479c-7.8-7.8-11.7-17.029-11.7-27.703c0-11.076,3.9-20.307,11.7-27.703
-					c3.276-3.271,6.994-5.746,11.089-7.384c4.901-2.873,10.465-4.312,16.627-4.312c6.557,0,12.714,1.638,18.46,4.938
-					c2.86,2.041,5.746,4.303,8.606,6.76C586.462,729.742,590.181,738.973,590.181,750.049z"/>
-				<path d="M637.565,829.467c3.288,2.055,6.366,4.511,9.229,7.384c8.229,7.804,12.324,17.853,12.324,30.188
-					c0,11.466-4.097,21.541-12.324,30.16c-8.203,7.787-18.058,11.695-29.55,11.695s-21.541-3.908-30.16-11.695
-					c-8.203-8.619-12.298-18.694-12.298-30.16c0-12.338,4.095-22.387,12.298-30.188c3.692-3.688,7.801-6.354,12.324-8.008
-					c5.33-2.856,11.271-4.304,17.836-4.304C624.631,824.539,631.417,826.178,637.565,829.467z"/>
-				<path d="M556.926,948.664c4.914,4.939,7.384,11.09,7.384,18.474c0,6.972-2.47,13.13-7.384,18.478
-					c-5.33,4.51-11.297,6.771-17.857,6.771c-7.389,0-13.54-2.263-18.471-6.771c-5.33-5.348-8.002-11.506-8.002-18.478
-					c0-7.384,2.672-13.529,8.002-18.474c2.062-2.457,4.523-4.107,7.395-4.927c3.302-2.041,6.979-3.067,11.076-3.067
-					c4.117,0,8.216,1.026,12.319,3.067C553.026,945.389,554.872,947.039,556.926,948.664z"/>
-				<path d="M461.505,836.24c2.873,2.062,5.746,4.312,8.619,6.771c7.384,7.384,11.083,16.614,11.083,27.703
-					c0,10.688-3.699,19.916-11.083,27.703c-7.793,6.968-16.841,10.479-27.099,10.479c-10.66,0-19.894-3.514-27.69-10.479
-					c-7.812-7.787-11.713-17.017-11.713-27.703c0-11.089,3.896-20.317,11.713-27.703c3.283-3.272,6.981-5.746,11.063-7.384
-					c4.934-2.887,10.479-4.314,16.627-4.314C449.604,831.312,455.753,832.963,461.505,836.24z"/>
-				<path d="M197.174,553.188c4.842,0,9.692,1.226,14.534,3.644c1.931,1.938,4.115,3.888,6.539,5.812
-					c5.811,5.824,8.716,13.095,8.716,21.806c0,8.239-2.905,15.508-8.716,21.812c-6.305,5.33-13.325,7.995-21.073,7.995
-					c-8.729,0-15.997-2.665-21.808-7.995c-6.292-6.306-9.445-13.569-9.445-21.812c0-8.711,3.153-15.979,9.445-21.806
-					c2.424-2.896,5.33-4.849,8.73-5.812C187.964,554.41,192.338,553.188,197.174,553.188z"/>
-				<path d="M452.978,555.373c13.562,13.572,20.349,30.303,20.349,50.154c0,19.369-6.786,36.088-20.348,50.141
-					c-14.048,13.078-30.521,19.617-49.404,19.617c-19.385,0-36.107-6.539-50.161-19.617c-14.053-14.053-21.062-30.771-21.062-50.141
-					c0-19.854,7.011-36.582,21.062-50.154c6.306-5.812,12.845-10.414,19.631-13.807c9.21-4.836,19.37-7.271,30.53-7.271
-					c12.097,0,23.498,2.912,34.147,8.725C443.064,546.416,448.141,550.523,452.978,555.373z"/>
-				<path d="M379.579,734.878c1.937,1.938,4.127,3.888,6.539,5.824c5.814,5.812,8.723,13.078,8.723,21.801
-					c0,8.229-2.905,15.496-8.723,21.788c-6.292,5.344-13.312,7.995-21.073,7.995c-8.704,0-15.971-2.651-21.795-7.995
-					c-6.305-6.292-9.458-13.559-9.458-21.788c0-8.723,3.152-15.989,9.458-21.801c2.411-2.925,5.33-4.862,8.717-5.824
-					c3.88-2.418,8.229-3.64,13.078-3.64C369.887,731.238,374.729,732.46,379.579,734.878z"/>
-				<path d="M192.078,690.547c7.755,0,15.022,1.951,21.808,5.812c3.387,2.431,6.786,5.097,10.173,7.994
-					c8.723,8.724,13.078,19.614,13.078,32.709c0,12.606-4.355,23.505-13.078,32.707c-9.197,8.229-19.864,12.352-31.98,12.352
-					c-12.59,0-23.497-4.121-32.695-12.352c-9.204-9.202-13.806-20.101-13.806-32.707c0-13.095,4.602-23.985,13.806-32.709
-					c3.874-3.873,8.236-6.784,13.085-8.713C178.285,692.238,184.812,690.547,192.078,690.547z"/>
-			</g>
-			<path d="M165.539,210.012c9.678,0,19.006,0.845,27.989,2.6c0-2.444,0-4.849,0-7.267c0-54.952,21.255-101.934,63.759-140.999
-				c42.848-39.04,94.328-58.565,154.46-58.565s111.443,19.526,153.94,58.565c5.877,5.174,11.411,10.712,16.589,16.601
-				c8.632,9.659,16.064,19.864,22.278,30.576c4.498,7.254,8.479,14.859,11.938,22.802c3.458,7.969,6.228,16.419,8.294,25.389
-				c17.265-5.863,35.751-8.788,55.459-8.788c46.645,0,86.555,15.184,119.729,45.591c31.101,28.691,47.688,62.557,49.769,101.622
-				c0,2.392,0,4.992,0,7.761c0,2.405,0,4.836,0,7.254c-0.364,3.107-0.702,6.383-1.04,9.841c11.414-4.823,23.842-7.241,37.311-7.241
-				c24.882,0,46.15,8.099,63.769,24.349c5.876,5.187,10.713,10.881,14.521,17.095c7.931,12.103,11.908,25.766,11.908,40.95
-				c0,22.824-8.813,42.325-26.43,58.591c-3.106,2.756-21.774,5.174-55.991,7.254c-255.352-14.456-510.715-14.456-766.082,0
-				c-30.063-6.214-51.663-15.379-64.786-27.495c-28.34-25.909-42.51-57.175-42.51-93.809c0-36.621,14.17-67.886,42.51-93.809
-				C91.243,222.973,125.459,210.012,165.539,210.012z"/>
-		</g>
-	</g>
-	<g id="Layer_2" display="inline">
-		<g>
-			<path d="M526.923,683.594c-4.379,1.785-8.624,4.058-12.604,6.96c0,0-24.979,18.234-24.998,18.248
-				c-37.046,23.867-85.829-16.771-115.271-41.513c-51.757-43.492-86.174-93.638-112.446-155.558
-				c-13.26-31.261-7.401-68.262,19.107-87.61l25.035-18.276c7.236-5.279,12.873-11.946,16.938-19.341
-				c0.312-0.548,0.604-1.116,0.896-1.679c0.354-0.701,0.729-1.393,1.058-2.108c16.877-35.828,2.646-99.832-38.491-158.604
-				c-49.215-70.314-118.652-107.01-157.018-83.714c-4.233,1.762-8.339,3.979-12.194,6.794L81.74,172.881
-				c-6.987,5.101-13.5,11.177-19.323,17.55c-11.683,12.782-20.792,27.815-27.031,43.952c-11.192,28.961-12.741,60.659-8.94,91.228
-				c6.333,50.953,26.219,99.717,48.612,145.512c53.494,109.391,117.015,209.58,201.69,297.451
-				c43.627,45.272,102.77,110.104,151.493,149.942c18.749,15.332,38.436,29.521,59.303,41.844
-				c38.99,23.019,83.437,38.169,129.062,31.276c12.522-1.893,26.509-4.637,38.241-9.591c1.695-0.671,3.363-1.429,5.009-2.267
-				c1.396-0.686,2.339-1.19,2.813-1.46c0.089-0.053,0.178-0.1,0.264-0.146c0.083-0.048,0.125-0.072,0.119-0.078
-				c1.662-0.979,3.297-2.039,4.888-3.198l35.193-25.688c12.354-9.021,20.157-21.997,23.076-35.958
-				c8.803-37.051-6.507-93.32-43.008-145.479C634.305,697.918,565.441,661.226,526.923,683.594z M238.01,377.108
-				c-1.679-0.741-3.393-1.498-5.139-2.269c-1.691-0.889-3.414-1.794-5.165-2.715c-0.875-0.459-1.759-0.924-2.65-1.392
-				c-0.859-0.525-1.723-1.053-2.596-1.585c-1.743-1.068-3.51-2.152-5.304-3.25c-6.94-4.741-14.147-9.959-20.899-16.186
-				c-6.906-6.05-13.442-12.951-19.745-20.232c-3.03-3.746-6.23-7.406-9.038-11.398l-4.337-5.902l-4.084-6.098
-				c-5.31-8.222-10.146-16.75-14.317-25.44c-4.099-8.722-7.556-17.575-10.249-26.347c-5.474-17.523-7.401-34.853-6.112-49.481
-				c0.717-7.309,2.287-13.912,4.417-19.479c2.137-5.574,4.841-10.07,7.429-13.479c2.691-3.333,5.135-5.67,6.914-7.115
-				c1.811-1.408,2.776-2.16,2.776-2.16s-0.585,1.211-1.683,3.482c-0.591,1.017-1.059,2.516-1.669,4.061
-				c-0.316,0.765-0.563,1.648-0.791,2.589c-0.252,0.884-0.52,1.823-0.803,2.815c-0.373,2.08-0.86,4.172-1.065,6.542
-				c-0.174,1.13-0.19,2.374-0.242,3.616c-0.093,1.236-0.139,2.479-0.001,3.642c0.041,0.574,0.081,1.158,0.122,1.752l0.052,1.061
-				l0.007,1.231c0.004,0.827,0.008,1.666,0.014,2.516l0.003,0.641c-0.12,0.462,0.161-0.54,0.137-0.412l0.01,0.067l0.02,0.134
-				l0.04,0.268l0.161,1.077c0.212,1.405,0.43,2.847,0.652,4.323c0.28,1.458,0.568,2.953,0.86,4.478
-				c0.834,3.079,1.454,6.159,2.492,9.393c0.407,1.588,1.046,3.219,1.587,4.867c0.516,1.643,1.016,3.288,1.706,4.977
-				c1.242,3.336,2.693,6.754,4.037,10.214c1.575,3.427,3.186,6.929,4.822,10.489c3.502,7.027,7.179,14.252,11.412,21.37
-				c2.094,3.583,4.147,7.198,6.486,10.704l3.25,5.099l1.562,2.455l0.775,1.232l1.049,1.505c2.504,3.574,5.01,7.147,7.504,10.706
-				c2.299,3.562,5.138,6.625,7.447,10.115c2.464,3.341,5.095,6.507,7.598,9.719c2.557,3.136,5.003,6.402,7.685,9.253
-				c1.264,1.515,2.475,3.114,3.764,4.558c1.307,1.433,2.603,2.851,3.884,4.255c2.485,2.958,5.093,5.539,7.609,8.251
-				c2.589,2.429,4.979,5.335,7.562,7.476c1.272,1.135,2.47,2.399,3.699,3.581c1.261,1.083,2.499,2.146,3.711,3.188
-				c4.859,4.387,9.637,7.867,14.18,11.073c2.246,1.411,4.487,2.868,6.611,4.083c2.211,1.15,4.243,2.206,6.077,3.161
-				c1.931,0.849,3.656,1.609,5.156,2.27c1.643,0.727,3.276,0.939,4.479,1.321c1.232,0.298,2.197,0.635,2.843,0.833
-				c0.646,0.204,0.979,0.31,0.979,0.31s-1.199,0.243-3.448,0.696c-1.132,0.178-2.496,0.619-4.157,0.726
-				c-1.66,0.115-3.567,0.248-5.704,0.397c-2.137,0.017-4.506-0.185-7.084-0.282c-2.567-0.232-5.314-0.778-8.264-1.199
-				c-2.882-0.76-6.001-1.403-9.18-2.439C244.718,379.678,241.327,378.699,238.01,377.108z M686.726,923.926
-				c0.681,0.063,1.024,0.1,1.024,0.1s-1.121,0.485-3.225,1.404c-1.068,0.41-2.312,1.129-3.91,1.584
-				c-1.602,0.461-3.438,0.994-5.491,1.588c-2.087,0.469-4.445,0.771-6.987,1.218c-2.559,0.312-5.355,0.355-8.33,0.563
-				c-2.978-0.136-6.163-0.105-9.485-0.452c-3.312-0.455-6.834-0.696-10.411-1.557c-1.798-0.369-3.633-0.749-5.503-1.135
-				c-1.84-0.517-3.713-1.038-5.619-1.568c-0.954-0.267-1.915-0.535-2.883-0.805c-0.949-0.33-1.906-0.666-2.872-1.002
-				c-1.928-0.68-3.887-1.365-5.869-2.064c-7.781-3.172-15.926-6.76-23.837-11.427c-8.022-4.46-15.864-9.832-23.562-15.626
-				c-3.749-3.021-7.646-5.93-11.23-9.24l-5.483-4.854l-5.272-5.104c-6.92-6.923-13.444-14.24-19.35-21.858
-				c-5.844-7.663-11.083-15.595-15.562-23.603c-9.035-15.979-14.565-32.517-16.38-47.088c-0.835-7.296-0.688-14.083,0.222-19.975
-				c0.916-5.896,2.611-10.86,4.423-14.74c1.934-3.823,3.827-6.623,5.267-8.408c1.475-1.759,2.26-2.697,2.26-2.697
-				s-0.319,1.311-0.913,3.76c-0.363,1.116-0.505,2.685-0.777,4.321c-0.146,0.813-0.202,1.729-0.228,2.697
-				c-0.062,0.916-0.125,1.89-0.194,2.919c0.072,2.115,0.039,4.263,0.336,6.621c0.069,1.141,0.313,2.361,0.527,3.585
-				c0.169,1.229,0.386,2.453,0.763,3.561c0.161,0.558,0.325,1.115,0.489,1.688l0.271,1.025l0.27,1.202
-				c0.177,0.811,0.354,1.626,0.541,2.456l0.139,0.624c-0.02,0.478,0.044-0.555,0.047-0.427l0.022,0.062l0.05,0.125l0.095,0.256
-				l0.384,1.019c0.503,1.329,1.021,2.692,1.549,4.088c0.58,1.368,1.175,2.771,1.78,4.198c1.462,2.833,2.718,5.714,4.409,8.658
-				c0.732,1.468,1.701,2.928,2.575,4.426c0.853,1.496,1.688,3,2.717,4.504c1.914,3.002,4.052,6.038,6.095,9.14
-				c2.263,3.02,4.569,6.103,6.92,9.238c4.899,6.134,10.017,12.421,15.65,18.489c2.8,3.062,5.569,6.166,8.594,9.102l4.248,4.302
-				l2.045,2.07l1.019,1.04l1.341,1.252c3.202,2.969,6.404,5.936,9.593,8.891c2.994,3,6.416,5.396,9.404,8.32
-				c3.112,2.746,6.352,5.288,9.474,7.902c3.16,2.527,6.238,5.205,9.46,7.428c1.556,1.219,3.074,2.522,4.643,3.666
-				c1.578,1.124,3.141,2.239,4.688,3.344c3.054,2.367,6.146,4.346,9.175,6.469c3.045,1.828,5.99,4.165,8.968,5.716
-				c1.479,0.844,2.919,1.826,4.368,2.724c1.461,0.794,2.896,1.572,4.301,2.337c5.672,3.268,11.073,5.663,16.188,7.844
-				c2.492,0.905,4.989,1.856,7.323,2.6c2.403,0.661,4.612,1.267,6.604,1.812c2.065,0.426,3.912,0.806,5.521,1.136
-				c1.756,0.361,3.398,0.228,4.656,0.347C685.039,923.742,686.055,923.87,686.726,923.926z"/>
-			<path d="M544.217,491.371c0-32.957-26.712-59.672-59.645-59.672c-32.955,0-59.672,26.716-59.672,59.672
-				s26.717,59.67,59.672,59.67C517.505,551.041,544.217,524.327,544.217,491.371z"/>
-			<path d="M487.68,4.391c-1.01-0.103-2.036-0.157-3.07-0.157c-16.479,0-29.836,13.358-29.836,29.836s13.355,29.836,29.836,29.836
-				h0.001v0.036c114.771,0,222.691,42.166,303.88,123.382c81.195,81.228,125.915,189.218,125.915,304.081
-				c0,62.366-13.036,122.485-38.746,178.691l54.264,24.822c28.354-61.979,44.154-130.897,44.154-203.517
-				C974.075,221.969,756.537,6.016,487.68,4.391z"/>
-			<path d="M467.543,194.92c-22.248,0-43.945,2.361-64.854,6.846l0.034,0.173c-12.823,3.341-22.306,14.968-22.306,28.84
-				c0,16.478,13.359,29.836,29.836,29.836c2.771,0,5.443-0.406,7.989-1.114c16.123-3.244,32.688-4.909,49.298-4.909
-				c136.761,0,248.021,111.326,248.021,248.165c0,41.945-10.641,83.375-30.771,119.812l0.019,0.009
-				c-2.443,4.329-3.854,9.312-3.854,14.638c0,16.479,13.357,29.836,29.836,29.836c11.413,0,21.322-6.413,26.34-15.825
-				c24.28-44.024,38.104-94.634,38.104-148.47C775.238,332.741,637.438,194.92,467.543,194.92z"/>
-		</g>
-	</g>
-	<path display="inline" d="M456.415,678.788c0,0,2.938-387.358,292.077-511.137L591.166,49.354h404.861v404.662l-96.785-121.05
-		C899.242,332.966,704.182,224.591,456.415,678.788z M6.637,948.5V139.176h449.778v172.287H178.913v464.762h644.838V633.894h172.276
-		V948.5H6.637z"/>
-</g>
-<g id="Layer_2_1_" display="none">
-	<path display="inline" d="M767.914,560.297c49.297,0,89.299,39.841,89.299,89.139c0,49.299-40.002,88.994-89.299,88.994
-		c-49.459,0-89.318-39.695-89.318-88.994C678.596,600.138,718.455,560.297,767.914,560.297z M234.379,560.297
-		c49.172,0,89.299,39.841,89.299,89.139c0,49.299-40.127,88.994-89.299,88.994c-49.459,0-89.442-39.695-89.442-88.994
-		C144.937,600.138,184.92,560.297,234.379,560.297z M636.926,387.02c-19.687-16.017-55.11-47.467-104.569-66.857
-		c-50.5-19.849-182.261-16.789-188.522-16.789c-1.812,0-17.712-1.678-22.576,12.508c-5.205,14.814-20.315,63.968-25.035,79.231
-		c-3.518,11.145,0.144,23.509,16.167,23.509h151.592H638.92C648.232,418.471,671.274,415.105,636.926,387.02z M231.185,314.366
-		c-12.831,5.339-37.399,21.822-47.162,29.611c-8.399,6.865-79.842,74.646-32.662,74.646h56.01c24.119,0,30.526-10.382,36.018-23.509
-		c4.899-12.051,27.35-69.765,30.688-79.231C280.788,297.568,257.745,303.221,231.185,314.366z M978.42,615.392
-		c-3.213,5.798-20.764,19.851-29.02,26.704c-9.295,7.34-21.967,22.611-28.086,29.61c-3.805,4.45-23.49,7.034-31.745,7.034
-		c14.501-75.267-35.712-154.945-121.979-154.945c-101.664,0-135.527,90.986-127.9,152.057c0.756,4.396-1.221,9.906-10.229,9.906
-		h-63.816H407.486c-35.856,0-40.289-38.925-56.619-82.121c-11.611-30.849-50.231-79.842-116.918-79.842
-		c-41.832,0-82.749,19.238-105.199,55.418c-20.297,32.984-21.212,76.021-22.594,91.596c-6.245-0.628-42.586-8.396-57.983-17.405
-		c-11.45-6.712-19.866-17.267-23.976-25.196c-9.637-18.467-15.416-51.9-17.103-79.357c0-26.271,20.62-27.798,27.17-46.576
-		c6.425-18.772-7.932-61.055,2.746-92.045c10.085-29.458,25.053-38.917,30.239-43.808c24.712-23.662,63.026-51.899,102.723-70.824
-		c13.729-6.568-8.686-7.035-15.434-14.509c-4.253-4.576-6.245-11.754-4.702-14.348c1.059-1.831,2.89-1.525,28.534-1.525
-		c7.322,0,11.001,0,27.314-0.924c4.576-0.144,11.145-2.593,16.349-3.203c26.094-3.509,70.061-3.509,114.942-3.509
-		c122.876,0,186.692,16.483,222.871,28.696c12.67,4.28,9.297,5.958,26.256,16.035c9.764,5.949,45.799,30.221,56.926,38.314
-		c48.096,34.645,81.224,61.519,81.224,61.519c5.958,6.104,87.469,17.553,179.514,50.52c13.585,4.89,39.696,19.085,52.043,38.934
-		c4.146,6.561,16.654,21.374,25.809,34.043c9.009,12.67,13.729,25.492,14.519,30.681
-		C997.801,569.755,987.268,599.061,978.42,615.392z"/>
-</g>
-<g id="Layer_3" display="none">
-	<polygon display="inline" points="123.801,4.172 123.801,992.159 879.045,498.166 	"/>
-</g>
-<g id="wrench" display="none">
-	<path display="inline" d="M982.192,178.811L826.938,334.066H664.679V169.273L818.003,16.01
-		c-22.576-6.822-46.118-11.59-70.867-11.59c-136.543,0-247.25,110.768-247.25,247.25c0,38.088,9.296,73.703,24.749,105.998
-		L29.531,852.65c-14.85,14.971-24.146,35.494-24.146,58.432c0,45.395,36.822,82.338,82.457,82.338
-		c22.817,0,43.462-9.176,58.19-24.146L641.258,474.23c32.113,15.332,67.85,24.688,105.878,24.688
-		c136.543,0,247.25-110.768,247.25-247.25C994.386,226.135,989.436,201.99,982.192,178.811z"/>
-</g>
-<path display="none" d="M801.92,543.083C899.197,596.99,975.73,692.571,994.9,806.324c0,102.729-83.347,186.076-186.075,186.076
-	h-85.77c37.009-32.315,64.146-75.05,76.925-124.052h8.845c34.283,0,62.023-27.741,62.023-62.024
-	c-15.989-61.781-58.238-113.631-113.024-147.006c-28.894-50.094-67.84-95.279-115.146-131.804
-	c7.117-12.205,13.387-24.955,18.747-38.069c49.487-16.385,85.376-62.417,85.376-117.295V248.1
-	c0-54.937-35.889-100.972-85.406-117.295c-20.229-49.184-53.362-91.251-94.311-123.99C585.014,2.666,603.548,0,622.75,0
-	c137.013,0,248.1,111.087,248.1,248.1v124.05C870.85,438.596,844.381,498.562,801.92,543.083z M560.725,992.4H188.575
-	C85.786,992.4,2.5,909.055,2.5,806.324l0,0C21.671,692.571,98.203,596.99,195.541,543.083
-	c-42.521-44.521-68.99-104.487-68.99-170.933V248.1C126.55,111.087,237.638,0,374.65,0c137.012,0,248.1,111.087,248.1,248.1v124.05
-	c0,66.446-26.47,126.413-68.931,170.933c97.277,53.907,173.81,149.488,192.98,263.241l0,0
-	C746.801,909.055,663.454,992.4,560.725,992.4z M498.7,372.15V248.1c0-68.476-55.575-124.049-124.05-124.049
-	c-68.477,0-124.05,55.573-124.05,124.049v124.05c0,68.476,55.574,124.049,124.05,124.049
-	C443.125,496.199,498.7,440.626,498.7,372.15z M622.75,806.324C595.068,699.477,490.099,620.25,374.65,620.25l0,0l0,0
-	c-115.509,0-220.419,79.227-248.101,186.074l0,0c0,34.284,27.802,62.024,62.025,62.024h372.148
-	C595.009,868.35,622.75,840.608,622.75,806.324L622.75,806.324z"/>
-<path display="none" d="M647.504,998.062H274.168c-103.117,0-186.668-83.611-186.668-186.668l0,0
-	c19.232-114.115,96.008-210.003,193.656-264.082c-42.656-44.662-69.21-104.818-69.21-171.478V251.391
-	C211.945,113.941,323.387,2.5,460.836,2.5s248.891,111.441,248.891,248.891v124.445c0,66.658-26.555,126.814-69.149,171.477
-	c97.588,54.08,174.362,149.968,193.596,264.082l0,0C834.172,914.451,750.561,998.062,647.504,998.062z M585.281,375.836V251.391
-	c0-68.693-55.752-124.445-124.445-124.445c-68.694,0-124.445,55.752-124.445,124.445v124.445
-	c0,68.693,55.751,124.445,124.445,124.445C529.529,500.281,585.281,444.529,585.281,375.836z M709.727,811.395
-	c-27.77-107.188-133.073-186.668-248.891-186.668l0,0l0,0c-115.877,0-221.121,79.48-248.891,186.668l0,0
-	c0,34.394,27.891,62.224,62.223,62.224h373.336C681.896,873.617,709.727,845.787,709.727,811.395L709.727,811.395z"/>
-<path display="none" d="M145.955,419.761L21.881,295.688C9.765,283.6,3.707,267.698,3.707,251.825
-	c0-15.902,6.058-31.775,18.174-43.861L145.955,83.892c17.751-17.66,44.407-23.021,67.61-13.48
-	c23.143,9.572,38.289,32.291,38.289,57.342v62.098h62.036v124.072h-62.036v61.977c0,25.051-15.146,47.77-38.289,57.342
-	C190.362,442.753,163.706,437.481,145.955,419.761z M854.045,580.214l124.073,124.074c12.116,12.055,18.175,27.928,18.175,43.861
-	c0,15.872-6.059,31.743-18.175,43.86L854.045,916.085c-17.751,17.689-44.468,22.961-67.61,13.449
-	c-23.202-9.572-38.288-32.291-38.288-57.312v-62.034H686.11V686.112h62.036v-62.037c0-25.08,15.086-47.799,38.288-57.371
-	C809.577,557.192,836.294,562.524,854.045,580.214z M437.963,686.112H500v124.073h-62.037V686.112z M375.927,189.851h62.036v124.072
-	h-62.036V189.851z M313.89,562.04H65.743c-34.229,0-62.036,27.807-62.036,62.035v248.146c0,34.353,27.807,62.037,62.036,62.037
-	H313.89c34.229,0,62.037-27.686,62.037-62.037V624.075C375.927,589.847,348.119,562.04,313.89,562.04z M251.854,810.188H127.78
-	V686.112h124.073L251.854,810.188L251.854,810.188z M500,189.851h62.036v124.072H500V189.851z M934.256,65.776H686.109
-	c-34.289,0-62.036,27.777-62.036,62.037V375.96c0,34.26,27.747,62.037,62.036,62.037h248.146c34.29,0,62.037-27.777,62.037-62.037
-	V127.813C996.293,93.554,968.546,65.776,934.256,65.776z M872.22,313.923H748.146V189.851H872.22V313.923z M562.036,686.112h62.037
-	v124.073h-62.037V686.112z"/>
-<path display="none" d="M996,499c0,20.92-1.696,41.534-4.238,61.817c-0.636,4.904-1.453,9.868-2.24,14.773
-	c-2.692,16.953-6.114,33.784-10.442,50.192c-0.818,2.907-1.454,5.874-2.211,8.75c-11.808,41.02-28.64,80.044-49.951,116.038
-	c-42.625,72.323-102.99,132.658-175.313,175.344c-35.995,21.313-74.986,38.084-116.037,49.921c-2.906,0.757-5.813,1.394-8.749,2.21
-	c-16.439,4.329-33.149,7.75-50.163,10.445c-4.903,0.757-9.869,1.634-14.805,2.21C541.534,993.304,520.948,995,500,995l0,0l0,0
-	c-20.949,0-41.535-1.696-61.818-4.238c-5.024-0.636-9.868-1.453-14.834-2.24c-17.014-2.692-33.784-6.114-50.224-10.442
-	c-2.815-0.819-5.843-1.454-8.688-2.211c-41.11-11.808-80.042-28.638-116.067-49.951C176.075,883.292,115.71,822.928,72.964,750.605
-	c-21.282-35.997-38.054-74.987-49.83-116.039c-0.787-2.875-1.453-5.813-2.24-8.749c-4.359-16.439-7.75-33.149-10.384-50.163
-	c-0.757-4.903-1.635-9.838-2.331-14.805C5.695,540.534,4,519.92,4,499l0,0l0,0c0-20.919,1.695-41.535,4.238-61.817
-	c0.605-5.025,1.453-9.868,2.301-14.834c2.634-17.014,6.055-33.785,10.444-50.224c0.757-2.816,1.423-5.843,2.24-8.689
-	c11.777-40.99,28.579-80.014,49.861-116.04c42.686-72.292,103.111-132.687,175.404-175.372
-	c35.935-21.222,74.958-38.024,115.978-49.8c2.876-0.817,5.843-1.482,8.688-2.241c16.407-4.389,33.239-7.75,50.192-10.443
-	c4.965-0.726,9.81-1.636,14.864-2.33C458.465,4.696,479.051,3,500,3l0,0l0,0c20.948,0,41.534,1.696,61.818,4.209
-	c4.903,0.634,9.869,1.482,14.772,2.33c16.953,2.633,33.784,6.054,50.192,10.443c2.907,0.759,5.874,1.424,8.75,2.241
-	C676.554,34,715.578,50.802,751.572,72.024c72.322,42.745,132.658,103.171,175.344,175.403
-	c21.312,36.025,38.084,74.956,49.921,116.067c0.756,2.847,1.394,5.813,2.21,8.689c4.329,16.439,7.75,33.209,10.445,50.224
-	c0.757,4.965,1.634,9.777,2.209,14.803C994.304,457.465,996,478.081,996,499L996,499L996,499z M211.888,386.291l-92.183-92.243
-	C86.586,355.354,66,424.407,66,499c0,74.594,20.586,143.678,53.705,204.952l92.183-92.154C198.174,576.742,190,538.93,190,499
-	C190,459.099,198.174,421.317,211.888,386.291z M500,933c74.594,0,143.678-20.525,204.951-53.645l-92.152-92.213
-	C577.742,800.765,539.931,809,500,809c-39.87,0-77.682-8.235-112.738-21.948l-92.273,92.243C356.353,912.475,425.406,933,500,933z
-	 M500,65c-74.594,0-143.647,20.586-204.951,53.705l92.273,92.183C422.318,197.173,460.13,189,500,189
-	c39.931,0,77.742,8.173,112.738,21.888l92.151-92.183C643.678,85.586,574.594,65,500,65z M738.828,435.578L738.828,435.578
-	C716.092,349.874,649.188,283,563.453,260.172l0,0l0,0c-8.234-2.148-16.469-3.966-25.066-5.329C525.854,252.604,513.198,251,500,251
-	c-13.199,0-25.854,1.604-38.447,3.844c-8.477,1.362-16.802,3.181-24.976,5.329l0,0l0,0C350.873,283,283.999,349.934,261.173,435.578
-	l0,0l0,0c-2.149,8.173-3.966,16.5-5.328,25.006C253.604,473.177,252,485.831,252,499c0,13.17,1.604,25.823,3.845,38.387
-	c1.302,8.6,3.179,16.771,5.328,25.066l0,0l0,0c22.735,85.673,89.761,152.548,175.404,175.313l0,0l0,0
-	c8.174,2.148,16.499,3.937,24.976,5.326C474.146,745.396,486.801,747,500,747c13.198,0,25.854-1.604,38.387-3.844
-	c8.599-1.303,16.771-3.182,25.066-5.328l0,0l0,0c85.673-22.769,152.548-89.643,175.312-175.375l0,0l0,0
-	c2.149-8.234,3.938-16.468,5.328-25.037C746.396,524.823,748,512.17,748,499c0-13.169-1.604-25.823-3.845-38.416
-	C742.763,452.077,740.977,443.75,738.828,435.578L738.828,435.578z M880.355,294.048l-92.213,92.274
-	C801.766,421.317,810,459.099,810,499c0,39.93-8.234,77.742-21.948,112.738l92.243,92.15C913.475,642.678,934,573.594,934,499
-	C934,424.407,913.475,355.354,880.355,294.048z"/>
-<path display="none" d="M962.252,997.5H35c0-119.822,140.166-219.904,331.177-252.59v-49.025
-	c-78.83-45.965-132.465-130.401-132.465-228.244v-6.698c-38.444-13.796-66.247-49.543-66.247-92.687
-	c0-43.115,27.803-78.891,66.217-92.627v-6.699C233.712,122.609,352.291,4,498.611,4c146.319,0,264.93,118.609,264.93,264.93v6.699
-	c38.414,13.736,66.217,49.512,66.217,92.627c0,43.144-27.803,78.891-66.217,92.687v6.698c0,97.843-53.635,182.279-132.465,228.152
-	v49.027C822.178,777.596,962.252,877.678,962.252,997.5z"/>
-<g id="plus" display="none">
-	<polygon display="inline" points="998.5,374.438 624.062,374.438 624.062,0 374.438,0 374.438,374.438 0,374.438 0,624.062 
-		374.438,624.062 374.438,998.5 624.062,998.5 624.062,624.062 998.5,624.062 	"/>
-</g>
-<g id="play" display="none">
-	<polygon display="inline" points="123,0 871.875,499.25 123,998.5 	"/>
-</g>
-<path display="none" d="M375.312,871.562L3.5,995.5l123.938-371.812L747.125,4L995,251.875L375.312,871.562z M127.438,871.562
-	l185.906-61.97L189.406,685.656L127.438,871.562z M251.375,623.688l123.938,123.938l371.812-371.812L623.188,251.875
-	L251.375,623.688z"/>
-<g id="plus_x5F_alt" display="none">
-	<path display="inline" d="M500.381,3C225.704,3,3,225.705,3,500.381s222.704,497.381,497.381,497.381
-		s497.381-222.705,497.381-497.381S775.058,3,500.381,3z M749.071,562.553H562.553V749.07H438.208V562.553H251.69V438.209h186.518
-		v-186.52h124.344v186.52h186.519V562.553z"/>
-</g>
-<g id="New_Symbol">
-	<polygon points="6.821,300 204.087,500 252.975,500 252.975,346.154 991.437,346.154 991.437,253.848 252.975,253.848 252.975,100 
-		204.087,100 	"/>
-	<polygon points="993.179,700 795.884,900 745.282,900 745.282,746.154 6.821,746.154 6.821,653.848 745.282,653.848 745.282,500 
-		795.884,500 	"/>
-</g>
-</svg>
diff --git a/assets/icons/table.svg b/assets/icons/table.svg
deleted file mode 100755
index 8fb7f6b..0000000
--- a/assets/icons/table.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M9.152 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.416zM9.152 17.696v-3.456q0-0.224-0.16-0.384t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.384zM18.272 24.544v-3.424q0-0.256-0.16-0.416t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.416zM9.152 10.816v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.728q-0.224 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.256 0 0.416-0.16t0.16-0.416zM18.272 17.696v-3.456q0-0.224-0.16-0.384t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.384zM27.424 24.544v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.416zM18.272 10.816v-3.424q0-0.256-0.16-0.416t-0.384-0.16h-5.728q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.728q0.224 0 0.384-0.16t0.16-0.416zM27.424 17.696v-3.456q0-0.224-0.16-0.384t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.384v3.456q0 0.224 0.16 0.384t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.384zM27.424 10.816v-3.424q0-0.256-0.16-0.416t-0.416-0.16h-5.696q-0.256 0-0.416 0.16t-0.16 0.416v3.424q0 0.256 0.16 0.416t0.416 0.16h5.696q0.256 0 0.416-0.16t0.16-0.416zM29.728 5.12v19.424q0 1.184-0.864 2.016t-2.016 0.832h-24q-1.152 0-2.016-0.832t-0.832-2.016v-19.424q0-1.184 0.832-2.016t2.016-0.864h24q1.184 0 2.016 0.864t0.864 2.016z" fill="#000000" />
-</svg>
diff --git a/assets/icons/trash.svg b/assets/icons/trash.svg
deleted file mode 100755
index 92fc6a9..0000000
--- a/assets/icons/trash.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="32" viewBox="0 0 25 32">
-<g>
-</g>
-	<path d="M9.152 13.12v10.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM13.728 13.12v10.272q0 0.256-0.16 0.416t-0.416 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM18.272 13.12v10.272q0 0.256-0.16 0.416t-0.384 0.16h-1.152q-0.256 0-0.416-0.16t-0.16-0.416v-10.272q0-0.256 0.16-0.416t0.416-0.16h1.152q0.224 0 0.384 0.16t0.16 0.416zM20.576 26.048v-16.928h-16v16.928q0 0.384 0.128 0.704t0.256 0.48 0.192 0.16h14.848q0.064 0 0.192-0.16t0.256-0.48 0.128-0.704zM8.576 6.816h8l-0.864-2.080q-0.128-0.16-0.288-0.192h-5.664q-0.192 0.032-0.32 0.192zM25.152 7.392v1.152q0 0.256-0.16 0.416t-0.416 0.16h-1.728v16.928q0 1.472-0.832 2.56t-2.016 1.088h-14.848q-1.184 0-2.016-1.056t-0.864-2.528v-16.992h-1.696q-0.256 0-0.416-0.16t-0.16-0.416v-1.152q0-0.256 0.16-0.416t0.416-0.16h5.504l1.248-2.976q0.288-0.672 0.992-1.12t1.408-0.48h5.696q0.704 0 1.408 0.48t0.96 1.12l1.248 2.976h5.536q0.256 0 0.416 0.16t0.16 0.416z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-1.svg b/assets/icons/up-1.svg
deleted file mode 100755
index 3d1d135..0000000
--- a/assets/icons/up-1.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="32" viewBox="0 0 30 32">
-<g>
-</g>
-	<path d="M0.576 15.904l14.272-14.24 14.304 14.24-5.088 5.088-5.632-5.664v14.944h-7.136v-14.944l-5.664 5.664z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-circled.svg b/assets/icons/up-circled.svg
deleted file mode 100755
index b5117fe..0000000
--- a/assets/icons/up-circled.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="27" height="32" viewBox="0 0 27 32">
-<g>
-</g>
-	<path d="M19.968 15.616q-0.16 0.352-0.544 0.352h-3.424v6.272q0 0.256-0.16 0.416t-0.416 0.16h-3.424q-0.256 0-0.416-0.16t-0.16-0.416v-6.272h-3.424q-0.256 0-0.416-0.16t-0.16-0.416q0-0.224 0.192-0.416l5.696-5.696q0.192-0.16 0.416-0.16t0.384 0.16l5.728 5.696q0.256 0.288 0.128 0.64zM13.728 6.24q-2.656 0-4.896 1.312t-3.52 3.552-1.312 4.864 1.312 4.864 3.52 3.552 4.896 1.312 4.864-1.312 3.52-3.552 1.312-4.864-1.312-4.864-3.52-3.552-4.864-1.312zM27.424 15.968q0 3.744-1.824 6.88t-4.992 4.992-6.88 1.856-6.912-1.856-4.96-4.992-1.856-6.88 1.856-6.88 4.96-4.992 6.912-1.856 6.88 1.856 4.992 4.992 1.824 6.88z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-dir.svg b/assets/icons/up-dir.svg
deleted file mode 100755
index 8c4e614..0000000
--- a/assets/icons/up-dir.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
-<g>
-</g>
-	<path d="M18.272 21.696q0 0.448-0.32 0.8t-0.8 0.32h-16q-0.48 0-0.8-0.32t-0.352-0.8 0.352-0.832l8-8q0.32-0.32 0.8-0.32t0.8 0.32l8 8q0.32 0.352 0.32 0.832z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up-open.svg b/assets/icons/up-open.svg
deleted file mode 100755
index 5e09c38..0000000
--- a/assets/icons/up-open.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M0 21.6l16-16 16 16-4.736 4.736-11.264-11.232-11.264 11.232z" fill="#000000" />
-</svg>
diff --git a/assets/icons/up.svg b/assets/icons/up.svg
deleted file mode 100755
index 27a4f28..0000000
--- a/assets/icons/up.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="32" viewBox="0 0 14 32">
-<g>
-</g>
-	<path d="M13.664 8.768q-0.16 0.352-0.512 0.352h-4v22.272q0 0.256-0.16 0.416t-0.416 0.16h-3.424q-0.256 0-0.416-0.16t-0.16-0.416v-22.272h-4q-0.384 0-0.512-0.352t0.096-0.608l6.24-6.88q0.16-0.16 0.416-0.16 0.224 0 0.416 0.16l6.336 6.88q0.224 0.288 0.096 0.608z" fill="#000000" />
-</svg>
diff --git a/assets/icons/user.svg b/assets/icons/user.svg
deleted file mode 100755
index db12c41..0000000
--- a/assets/icons/user.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M20.736 31.904h-11.968c-3.296 0-5.952-2.656-5.952-5.984v0c0.608-3.648 3.072-6.72 6.176-8.448-1.344-1.408-2.208-3.36-2.208-5.472v-4c0-4.384 3.552-7.968 7.968-7.968s7.968 3.584 7.968 7.968v4c0 2.112-0.864 4.064-2.208 5.472 3.104 1.728 5.568 4.8 6.176 8.448v0c0 3.328-2.656 5.984-5.952 5.984zM18.72 12v-4c0-2.176-1.76-3.968-3.968-3.968s-3.968 1.792-3.968 3.968v4c0 2.176 1.76 3.968 3.968 3.968s3.968-1.792 3.968-3.968zM22.72 25.92c-0.896-3.424-4.256-5.952-7.968-5.952v0 0c-3.712 0-7.072 2.528-7.968 5.952v0c0 1.12 0.896 2.016 1.984 2.016h11.936c1.12 0 2.016-0.896 2.016-2.016v0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/users.svg b/assets/icons/users.svg
deleted file mode 100755
index 4c479c0..0000000
--- a/assets/icons/users.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M25.664 17.344c3.104 1.728 5.568 4.8 6.176 8.416 0 3.296-2.656 5.952-5.952 5.952h-2.752c1.184-1.024 2.048-2.4 2.464-3.968h0.288c1.088 0 1.984-0.864 1.984-1.984-0.512-1.984-1.856-3.616-3.616-4.704-0.928-1.6-2.176-3.040-3.68-4.224 0.224-0.384 0.416-0.8 0.576-1.216 1.6-0.512 2.752-1.984 2.752-3.744v-3.968c0-1.76-1.152-3.232-2.752-3.744-0.64-1.568-1.696-2.944-3.008-3.968 0.576-0.128 1.184-0.224 1.792-0.224 4.384 0 7.936 3.552 7.936 7.936v3.968c0 2.144-0.864 4.064-2.208 5.472zM17.952 31.712h-11.904c-3.296 0-5.952-2.656-5.952-5.952v0c0.608-3.648 3.040-6.688 6.176-8.416-1.376-1.408-2.208-3.328-2.208-5.472v-3.968c0-4.384 3.552-7.936 7.936-7.936s7.936 3.552 7.936 7.936v3.968c0 2.112-0.864 4.032-2.208 5.472 3.104 1.728 5.568 4.768 6.176 8.416v0c0 3.296-2.656 5.952-5.952 5.952zM15.968 11.872v-3.968c0-2.176-1.792-3.968-3.968-3.968-2.208 0-3.968 1.792-3.968 3.968v3.968c0 2.208 1.76 3.968 3.968 3.968 2.176 0 3.968-1.76 3.968-3.968zM19.936 25.76c-0.896-3.424-4.256-5.952-7.936-5.952v0 0c-3.712 0-7.072 2.528-7.936 5.952v0c0 1.12 0.864 1.984 1.984 1.984h11.904c1.088 0 1.984-0.864 1.984-1.984v0z" fill="#000000" />
-</svg>
diff --git a/assets/icons/vertical-ellipsis.svg b/assets/icons/vertical-ellipsis.svg
deleted file mode 100644
index 536604f..0000000
--- a/assets/icons/vertical-ellipsis.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -256 1792 1792">
-  <g transform="matrix(1 0 0 -1 0 1536)">
-   <path fill="currentColor"
-d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-  </g>
-
-</svg>
diff --git a/assets/icons/wrench.svg b/assets/icons/wrench.svg
deleted file mode 100755
index 298a8ea..0000000
--- a/assets/icons/wrench.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
-<g>
-</g>
-	<path d="M31.607 5.643l-5.023 5.023h-5.25v-5.332l4.961-4.959c-0.734-0.221-1.492-0.375-2.297-0.375-4.416 0-7.998 3.584-7.998 8 0 1.232 0.301 2.385 0.801 3.43l-16.020 16.015c-0.48 0.485-0.781 1.149-0.781 1.891 0 1.469 1.191 2.664 2.668 2.664 0.738 0 1.406-0.297 1.883-0.781l16.023-16.018c1.041 0.496 2.197 0.799 3.424 0.799 4.422 0 8-3.584 8-8 0-0.826-0.156-1.607-0.391-2.357z" fill="#000000" />
-</svg>
diff --git a/assets/icons/wrench2.svg b/assets/icons/wrench2.svg
deleted file mode 100644
index 6caa1ea..0000000
--- a/assets/icons/wrench2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M448 1472q0-26-19-45t-45-19-45 19-19 45 19 45 45 19 45-19 19-45zm644-420l-682 682q-37 37-90 37-52 0-91-37l-106-108q-38-36-38-90 0-53 38-91l681-681q39 98 114.5 173.5t173.5 114.5zm634-435q0 39-23 106-47 134-164.5 217.5t-258.5 83.5q-185 0-316.5-131.5t-131.5-316.5 131.5-316.5 316.5-131.5q58 0 121.5 16.5t107.5 46.5q16 11 16 28t-16 28l-293 169v224l193 107q5-3 79-48.5t135.5-81 70.5-35.5q15 0 23.5 10t8.5 25z" fill="#fff"/></svg>
diff --git a/assets/img/CouchDB-horizontal-logo.png b/assets/img/CouchDB-horizontal-logo.png
deleted file mode 100644
index 0489be3..0000000
--- a/assets/img/CouchDB-horizontal-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/CouchDB-negative-logo.png b/assets/img/CouchDB-negative-logo.png
deleted file mode 100644
index dde0eed..0000000
--- a/assets/img/CouchDB-negative-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/asf-feather-logo.png b/assets/img/asf-feather-logo.png
deleted file mode 100644
index 842f5ed..0000000
--- a/assets/img/asf-feather-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/couch-watermark.png b/assets/img/couch-watermark.png
deleted file mode 100644
index 0376c6e..0000000
--- a/assets/img/couch-watermark.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/couchdb-logo.png b/assets/img/couchdb-logo.png
deleted file mode 100644
index 133dceb..0000000
--- a/assets/img/couchdb-logo.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/github.png b/assets/img/github.png
deleted file mode 100644
index ea6ff54..0000000
--- a/assets/img/github.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/glyphicons-halflings-white.png b/assets/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484..0000000
--- a/assets/img/glyphicons-halflings-white.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/glyphicons-halflings.png b/assets/img/glyphicons-halflings.png
deleted file mode 100644
index 79bc568..0000000
--- a/assets/img/glyphicons-halflings.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/googleplus.png b/assets/img/googleplus.png
deleted file mode 100755
index 68bd450..0000000
--- a/assets/img/googleplus.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/linen.png b/assets/img/linen.png
deleted file mode 100644
index 365c61a..0000000
--- a/assets/img/linen.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/linkedin.png b/assets/img/linkedin.png
deleted file mode 100644
index 11f7d74..0000000
--- a/assets/img/linkedin.png
+++ /dev/null
Binary files differ
diff --git a/assets/img/loader.gif b/assets/img/loader.gif
deleted file mode 100644
index 96ff188..0000000
--- a/assets/img/loader.gif
+++ /dev/null
Binary files differ
diff --git a/assets/img/twitter.png b/assets/img/twitter.png
deleted file mode 100644
index c9b8935..0000000
--- a/assets/img/twitter.png
+++ /dev/null
Binary files differ
diff --git a/assets/index.underscore b/assets/index.underscore
deleted file mode 100644
index 0602283..0000000
--- a/assets/index.underscore
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-// Licensed 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 lang="en">
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-  <meta http-equiv="Content-Language" content="en" />
-  <link rel="shortcut icon" type="image/png" href="dashboard.assets/img/couchdb-logo.png"/>
-  <title><%= htmlWebpackPlugin.options.title %></title>
-
-  <!-- Application styles. -->
-  <style>
-    .noscript-warning {
-      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-      padding: 1px 30px 10px 30px;
-      color: #fff;
-      background: @brandHighlight;
-      margin: 100px;
-      box-shadow: 2px 2px 5px #989898;
-    }
-  </style>
-
-</head>
-
-<body id="home">
-
-  <noscript>
-    <div class="noscript-warning">
-      <h1>Please turn on JavaScript</h1>
-      <p>Fauxton <strong>requires</strong> JavaScript to be enabled.</p>
-    </div>
-  </noscript>
-
-
-  <div id="app"></div>
-
- <!-- <%= htmlWebpackPlugin.options.generationLabel %> : <%= htmlWebpackPlugin.options.generationDate %> -->
-</body>
-</html>
diff --git a/assets/js/plugins/beautify.js b/assets/js/plugins/beautify.js
deleted file mode 100644
index 4beb640..0000000
--- a/assets/js/plugins/beautify.js
+++ /dev/null
@@ -1,4047 +0,0 @@
-/*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */
-/* AUTO-GENERATED. DO NOT MODIFY. */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-
- JS Beautifier
----------------
-
-
-  Written by Einar Lielmanis, <einar@beautifier.io>
-      https://beautifier.io/
-
-  Originally converted to javascript by Vital, <vital76@gmail.com>
-  "End braces on own line" added by Chris J. Shull, <chrisjshull@gmail.com>
-  Parsing improvements for brace-less statements by Liam Newman <bitwiseman@beautifier.io>
-
-
-  Usage:
-    js_beautify(js_source_text);
-    js_beautify(js_source_text, options);
-
-  The options are:
-    indent_size (default 4)          - indentation size,
-    indent_char (default space)      - character to indent with,
-    preserve_newlines (default true) - whether existing line breaks should be preserved,
-    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,
-
-    jslint_happy (default false) - if true, then jslint-stricter mode is enforced.
-
-            jslint_happy        !jslint_happy
-            ---------------------------------
-            function ()         function()
-
-            switch () {         switch() {
-            case 1:               case 1:
-              break;                break;
-            }                   }
-
-    space_after_anon_function (default false) - should the space before an anonymous function's parens be added, "function()" vs "function ()",
-          NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)
-
-    brace_style (default "collapse") - "collapse" | "expand" | "end-expand" | "none" | any of the former + ",preserve-inline"
-            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.
-            preserve-inline will try to preserve inline blocks of curly braces
-
-    space_before_conditional (default true) - should the space before conditional statement be added, "if(true)" vs "if (true)",
-
-    unescape_strings (default false) - should printable characters in strings encoded in \xNN notation be unescaped, "example" vs "\x65\x78\x61\x6d\x70\x6c\x65"
-
-    wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.
-          NOTE: This is not a hard limit. Lines will continue until a point where a newline would
-                be preserved if it were present.
-
-    end_with_newline (default false)  - end output with a newline
-
-
-    e.g
-
-    js_beautify(js_source_text, {
-      'indent_size': 1,
-      'indent_char': '\t'
-    });
-
-*/
-
-(function() {
-
-/* GENERATED_BUILD_OUTPUT */
-var legacy_beautify_js =
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var Beautifier = __webpack_require__(1).Beautifier,
-  Options = __webpack_require__(5).Options;
-
-function js_beautify(js_source_text, options) {
-  var beautifier = new Beautifier(js_source_text, options);
-  return beautifier.beautify();
-}
-
-module.exports = js_beautify;
-module.exports.defaultOptions = function() {
-  return new Options();
-};
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var Output = __webpack_require__(2).Output;
-var Token = __webpack_require__(3).Token;
-var acorn = __webpack_require__(4);
-var Options = __webpack_require__(5).Options;
-var Tokenizer = __webpack_require__(7).Tokenizer;
-var line_starters = __webpack_require__(7).line_starters;
-var positionable_operators = __webpack_require__(7).positionable_operators;
-var TOKEN = __webpack_require__(7).TOKEN;
-
-
-function in_array(what, arr) {
-  return arr.indexOf(what) !== -1;
-}
-
-function ltrim(s) {
-  return s.replace(/^\s+/g, '');
-}
-
-function generateMapFromStrings(list) {
-  var result = {};
-  for (var x = 0; x < list.length; x++) {
-    // make the mapped names underscored instead of dash
-    result[list[x].replace(/-/g, '_')] = list[x];
-  }
-  return result;
-}
-
-function reserved_word(token, word) {
-  return token && token.type === TOKEN.RESERVED && token.text === word;
-}
-
-function reserved_array(token, words) {
-  return token && token.type === TOKEN.RESERVED && in_array(token.text, words);
-}
-// Unsure of what they mean, but they work. Worth cleaning up in future.
-var special_words = ['case', 'return', 'do', 'if', 'throw', 'else', 'await', 'break', 'continue', 'async'];
-
-var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
-
-// Generate map from array
-var OPERATOR_POSITION = generateMapFromStrings(validPositionValues);
-
-var OPERATOR_POSITION_BEFORE_OR_PRESERVE = [OPERATOR_POSITION.before_newline, OPERATOR_POSITION.preserve_newline];
-
-var MODE = {
-  BlockStatement: 'BlockStatement', // 'BLOCK'
-  Statement: 'Statement', // 'STATEMENT'
-  ObjectLiteral: 'ObjectLiteral', // 'OBJECT',
-  ArrayLiteral: 'ArrayLiteral', //'[EXPRESSION]',
-  ForInitializer: 'ForInitializer', //'(FOR-EXPRESSION)',
-  Conditional: 'Conditional', //'(COND-EXPRESSION)',
-  Expression: 'Expression' //'(EXPRESSION)'
-};
-
-function remove_redundant_indentation(output, frame) {
-  // This implementation is effective but has some issues:
-  //     - can cause line wrap to happen too soon due to indent removal
-  //           after wrap points are calculated
-  // These issues are minor compared to ugly indentation.
-
-  if (frame.multiline_frame ||
-    frame.mode === MODE.ForInitializer ||
-    frame.mode === MODE.Conditional) {
-    return;
-  }
-
-  // remove one indent from each line inside this section
-  output.remove_indent(frame.start_line_index);
-}
-
-// we could use just string.split, but
-// IE doesn't like returning empty strings
-function split_linebreaks(s) {
-  //return s.split(/\x0d\x0a|\x0a/);
-
-  s = s.replace(acorn.allLineBreaks, '\n');
-  var out = [],
-    idx = s.indexOf("\n");
-  while (idx !== -1) {
-    out.push(s.substring(0, idx));
-    s = s.substring(idx + 1);
-    idx = s.indexOf("\n");
-  }
-  if (s.length) {
-    out.push(s);
-  }
-  return out;
-}
-
-function is_array(mode) {
-  return mode === MODE.ArrayLiteral;
-}
-
-function is_expression(mode) {
-  return in_array(mode, [MODE.Expression, MODE.ForInitializer, MODE.Conditional]);
-}
-
-function all_lines_start_with(lines, c) {
-  for (var i = 0; i < lines.length; i++) {
-    var line = lines[i].trim();
-    if (line.charAt(0) !== c) {
-      return false;
-    }
-  }
-  return true;
-}
-
-function each_line_matches_indent(lines, indent) {
-  var i = 0,
-    len = lines.length,
-    line;
-  for (; i < len; i++) {
-    line = lines[i];
-    // allow empty lines to pass through
-    if (line && line.indexOf(indent) !== 0) {
-      return false;
-    }
-  }
-  return true;
-}
-
-
-function Beautifier(source_text, options) {
-  options = options || {};
-  this._source_text = source_text || '';
-
-  this._output = null;
-  this._tokens = null;
-  this._last_last_text = null;
-  this._flags = null;
-  this._previous_flags = null;
-
-  this._flag_store = null;
-  this._options = new Options(options);
-}
-
-Beautifier.prototype.create_flags = function(flags_base, mode) {
-  var next_indent_level = 0;
-  if (flags_base) {
-    next_indent_level = flags_base.indentation_level;
-    if (!this._output.just_added_newline() &&
-      flags_base.line_indent_level > next_indent_level) {
-      next_indent_level = flags_base.line_indent_level;
-    }
-  }
-
-  var next_flags = {
-    mode: mode,
-    parent: flags_base,
-    last_token: flags_base ? flags_base.last_token : new Token(TOKEN.START_BLOCK, ''), // last token text
-    last_word: flags_base ? flags_base.last_word : '', // last TOKEN.WORD passed
-    declaration_statement: false,
-    declaration_assignment: false,
-    multiline_frame: false,
-    inline_frame: false,
-    if_block: false,
-    else_block: false,
-    do_block: false,
-    do_while: false,
-    import_block: false,
-    in_case_statement: false, // switch(..){ INSIDE HERE }
-    in_case: false, // we're on the exact line with "case 0:"
-    case_body: false, // the indented case-action block
-    indentation_level: next_indent_level,
-    alignment: 0,
-    line_indent_level: flags_base ? flags_base.line_indent_level : next_indent_level,
-    start_line_index: this._output.get_line_number(),
-    ternary_depth: 0
-  };
-  return next_flags;
-};
-
-Beautifier.prototype._reset = function(source_text) {
-  var baseIndentString = source_text.match(/^[\t ]*/)[0];
-
-  this._last_last_text = ''; // pre-last token text
-  this._output = new Output(this._options, baseIndentString);
-
-  // If testing the ignore directive, start with output disable set to true
-  this._output.raw = this._options.test_output_raw;
-
-
-  // Stack of parsing/formatting states, including MODE.
-  // We tokenize, parse, and output in an almost purely a forward-only stream of token input
-  // and formatted output.  This makes the beautifier less accurate than full parsers
-  // but also far more tolerant of syntax errors.
-  //
-  // For example, the default mode is MODE.BlockStatement. If we see a '{' we push a new frame of type
-  // MODE.BlockStatement on the the stack, even though it could be object literal.  If we later
-  // encounter a ":", we'll switch to to MODE.ObjectLiteral.  If we then see a ";",
-  // most full parsers would die, but the beautifier gracefully falls back to
-  // MODE.BlockStatement and continues on.
-  this._flag_store = [];
-  this.set_mode(MODE.BlockStatement);
-  var tokenizer = new Tokenizer(source_text, this._options);
-  this._tokens = tokenizer.tokenize();
-  return source_text;
-};
-
-Beautifier.prototype.beautify = function() {
-  // if disabled, return the input unchanged.
-  if (this._options.disabled) {
-    return this._source_text;
-  }
-
-  var sweet_code;
-  var source_text = this._reset(this._source_text);
-
-  var eol = this._options.eol;
-  if (this._options.eol === 'auto') {
-    eol = '\n';
-    if (source_text && acorn.lineBreak.test(source_text || '')) {
-      eol = source_text.match(acorn.lineBreak)[0];
-    }
-  }
-
-  var current_token = this._tokens.next();
-  while (current_token) {
-    this.handle_token(current_token);
-
-    this._last_last_text = this._flags.last_token.text;
-    this._flags.last_token = current_token;
-
-    current_token = this._tokens.next();
-  }
-
-  sweet_code = this._output.get_code(eol);
-
-  return sweet_code;
-};
-
-Beautifier.prototype.handle_token = function(current_token, preserve_statement_flags) {
-  if (current_token.type === TOKEN.START_EXPR) {
-    this.handle_start_expr(current_token);
-  } else if (current_token.type === TOKEN.END_EXPR) {
-    this.handle_end_expr(current_token);
-  } else if (current_token.type === TOKEN.START_BLOCK) {
-    this.handle_start_block(current_token);
-  } else if (current_token.type === TOKEN.END_BLOCK) {
-    this.handle_end_block(current_token);
-  } else if (current_token.type === TOKEN.WORD) {
-    this.handle_word(current_token);
-  } else if (current_token.type === TOKEN.RESERVED) {
-    this.handle_word(current_token);
-  } else if (current_token.type === TOKEN.SEMICOLON) {
-    this.handle_semicolon(current_token);
-  } else if (current_token.type === TOKEN.STRING) {
-    this.handle_string(current_token);
-  } else if (current_token.type === TOKEN.EQUALS) {
-    this.handle_equals(current_token);
-  } else if (current_token.type === TOKEN.OPERATOR) {
-    this.handle_operator(current_token);
-  } else if (current_token.type === TOKEN.COMMA) {
-    this.handle_comma(current_token);
-  } else if (current_token.type === TOKEN.BLOCK_COMMENT) {
-    this.handle_block_comment(current_token, preserve_statement_flags);
-  } else if (current_token.type === TOKEN.COMMENT) {
-    this.handle_comment(current_token, preserve_statement_flags);
-  } else if (current_token.type === TOKEN.DOT) {
-    this.handle_dot(current_token);
-  } else if (current_token.type === TOKEN.EOF) {
-    this.handle_eof(current_token);
-  } else if (current_token.type === TOKEN.UNKNOWN) {
-    this.handle_unknown(current_token, preserve_statement_flags);
-  } else {
-    this.handle_unknown(current_token, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.handle_whitespace_and_comments = function(current_token, preserve_statement_flags) {
-  var newlines = current_token.newlines;
-  var keep_whitespace = this._options.keep_array_indentation && is_array(this._flags.mode);
-
-  if (current_token.comments_before) {
-    var comment_token = current_token.comments_before.next();
-    while (comment_token) {
-      // The cleanest handling of inline comments is to treat them as though they aren't there.
-      // Just continue formatting and the behavior should be logical.
-      // Also ignore unknown tokens.  Again, this should result in better behavior.
-      this.handle_whitespace_and_comments(comment_token, preserve_statement_flags);
-      this.handle_token(comment_token, preserve_statement_flags);
-      comment_token = current_token.comments_before.next();
-    }
-  }
-
-  if (keep_whitespace) {
-    for (var i = 0; i < newlines; i += 1) {
-      this.print_newline(i > 0, preserve_statement_flags);
-    }
-  } else {
-    if (this._options.max_preserve_newlines && newlines > this._options.max_preserve_newlines) {
-      newlines = this._options.max_preserve_newlines;
-    }
-
-    if (this._options.preserve_newlines) {
-      if (newlines > 1) {
-        this.print_newline(false, preserve_statement_flags);
-        for (var j = 1; j < newlines; j += 1) {
-          this.print_newline(true, preserve_statement_flags);
-        }
-      }
-    }
-  }
-
-};
-
-var newline_restricted_tokens = ['async', 'break', 'continue', 'return', 'throw', 'yield'];
-
-Beautifier.prototype.allow_wrap_or_preserved_newline = function(current_token, force_linewrap) {
-  force_linewrap = (force_linewrap === undefined) ? false : force_linewrap;
-
-  // Never wrap the first token on a line
-  if (this._output.just_added_newline()) {
-    return;
-  }
-
-  var shouldPreserveOrForce = (this._options.preserve_newlines && current_token.newlines) || force_linewrap;
-  var operatorLogicApplies = in_array(this._flags.last_token.text, positionable_operators) ||
-    in_array(current_token.text, positionable_operators);
-
-  if (operatorLogicApplies) {
-    var shouldPrintOperatorNewline = (
-        in_array(this._flags.last_token.text, positionable_operators) &&
-        in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)
-      ) ||
-      in_array(current_token.text, positionable_operators);
-    shouldPreserveOrForce = shouldPreserveOrForce && shouldPrintOperatorNewline;
-  }
-
-  if (shouldPreserveOrForce) {
-    this.print_newline(false, true);
-  } else if (this._options.wrap_line_length) {
-    if (reserved_array(this._flags.last_token, newline_restricted_tokens)) {
-      // These tokens should never have a newline inserted
-      // between them and the following expression.
-      return;
-    }
-    this._output.set_wrap_point();
-  }
-};
-
-Beautifier.prototype.print_newline = function(force_newline, preserve_statement_flags) {
-  if (!preserve_statement_flags) {
-    if (this._flags.last_token.text !== ';' && this._flags.last_token.text !== ',' && this._flags.last_token.text !== '=' && (this._flags.last_token.type !== TOKEN.OPERATOR || this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) {
-      var next_token = this._tokens.peek();
-      while (this._flags.mode === MODE.Statement &&
-        !(this._flags.if_block && reserved_word(next_token, 'else')) &&
-        !this._flags.do_block) {
-        this.restore_mode();
-      }
-    }
-  }
-
-  if (this._output.add_new_line(force_newline)) {
-    this._flags.multiline_frame = true;
-  }
-};
-
-Beautifier.prototype.print_token_line_indentation = function(current_token) {
-  if (this._output.just_added_newline()) {
-    if (this._options.keep_array_indentation &&
-      current_token.newlines &&
-      (current_token.text === '[' || is_array(this._flags.mode))) {
-      this._output.current_line.set_indent(-1);
-      this._output.current_line.push(current_token.whitespace_before);
-      this._output.space_before_token = false;
-    } else if (this._output.set_indent(this._flags.indentation_level, this._flags.alignment)) {
-      this._flags.line_indent_level = this._flags.indentation_level;
-    }
-  }
-};
-
-Beautifier.prototype.print_token = function(current_token) {
-  if (this._output.raw) {
-    this._output.add_raw_token(current_token);
-    return;
-  }
-
-  if (this._options.comma_first && current_token.previous && current_token.previous.type === TOKEN.COMMA &&
-    this._output.just_added_newline()) {
-    if (this._output.previous_line.last() === ',') {
-      var popped = this._output.previous_line.pop();
-      // if the comma was already at the start of the line,
-      // pull back onto that line and reprint the indentation
-      if (this._output.previous_line.is_empty()) {
-        this._output.previous_line.push(popped);
-        this._output.trim(true);
-        this._output.current_line.pop();
-        this._output.trim();
-      }
-
-      // add the comma in front of the next token
-      this.print_token_line_indentation(current_token);
-      this._output.add_token(',');
-      this._output.space_before_token = true;
-    }
-  }
-
-  this.print_token_line_indentation(current_token);
-  this._output.non_breaking_space = true;
-  this._output.add_token(current_token.text);
-  if (this._output.previous_token_wrapped) {
-    this._flags.multiline_frame = true;
-  }
-};
-
-Beautifier.prototype.indent = function() {
-  this._flags.indentation_level += 1;
-  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-};
-
-Beautifier.prototype.deindent = function() {
-  if (this._flags.indentation_level > 0 &&
-    ((!this._flags.parent) || this._flags.indentation_level > this._flags.parent.indentation_level)) {
-    this._flags.indentation_level -= 1;
-    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-  }
-};
-
-Beautifier.prototype.set_mode = function(mode) {
-  if (this._flags) {
-    this._flag_store.push(this._flags);
-    this._previous_flags = this._flags;
-  } else {
-    this._previous_flags = this.create_flags(null, mode);
-  }
-
-  this._flags = this.create_flags(this._previous_flags, mode);
-  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-};
-
-
-Beautifier.prototype.restore_mode = function() {
-  if (this._flag_store.length > 0) {
-    this._previous_flags = this._flags;
-    this._flags = this._flag_store.pop();
-    if (this._previous_flags.mode === MODE.Statement) {
-      remove_redundant_indentation(this._output, this._previous_flags);
-    }
-    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);
-  }
-};
-
-Beautifier.prototype.start_of_object_property = function() {
-  return this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement && (
-    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || (reserved_array(this._flags.last_token, ['get', 'set'])));
-};
-
-Beautifier.prototype.start_of_statement = function(current_token) {
-  var start = false;
-  start = start || reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD;
-  start = start || reserved_word(this._flags.last_token, 'do');
-  start = start || (!(this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement)) && reserved_array(this._flags.last_token, newline_restricted_tokens) && !current_token.newlines;
-  start = start || reserved_word(this._flags.last_token, 'else') &&
-    !(reserved_word(current_token, 'if') && !current_token.comments_before);
-  start = start || (this._flags.last_token.type === TOKEN.END_EXPR && (this._previous_flags.mode === MODE.ForInitializer || this._previous_flags.mode === MODE.Conditional));
-  start = start || (this._flags.last_token.type === TOKEN.WORD && this._flags.mode === MODE.BlockStatement &&
-    !this._flags.in_case &&
-    !(current_token.text === '--' || current_token.text === '++') &&
-    this._last_last_text !== 'function' &&
-    current_token.type !== TOKEN.WORD && current_token.type !== TOKEN.RESERVED);
-  start = start || (this._flags.mode === MODE.ObjectLiteral && (
-    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || reserved_array(this._flags.last_token, ['get', 'set'])));
-
-  if (start) {
-    this.set_mode(MODE.Statement);
-    this.indent();
-
-    this.handle_whitespace_and_comments(current_token, true);
-
-    // Issue #276:
-    // If starting a new statement with [if, for, while, do], push to a new line.
-    // if (a) if (b) if(c) d(); else e(); else f();
-    if (!this.start_of_object_property()) {
-      this.allow_wrap_or_preserved_newline(current_token,
-        reserved_array(current_token, ['do', 'for', 'if', 'while']));
-    }
-    return true;
-  }
-  return false;
-};
-
-Beautifier.prototype.handle_start_expr = function(current_token) {
-  // The conditional starts the statement if appropriate.
-  if (!this.start_of_statement(current_token)) {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  var next_mode = MODE.Expression;
-  if (current_token.text === '[') {
-
-    if (this._flags.last_token.type === TOKEN.WORD || this._flags.last_token.text === ')') {
-      // this is array index specifier, break immediately
-      // a[x], fn()[x]
-      if (reserved_array(this._flags.last_token, line_starters)) {
-        this._output.space_before_token = true;
-      }
-      this.print_token(current_token);
-      this.set_mode(next_mode);
-      this.indent();
-      if (this._options.space_in_paren) {
-        this._output.space_before_token = true;
-      }
-      return;
-    }
-
-    next_mode = MODE.ArrayLiteral;
-    if (is_array(this._flags.mode)) {
-      if (this._flags.last_token.text === '[' ||
-        (this._flags.last_token.text === ',' && (this._last_last_text === ']' || this._last_last_text === '}'))) {
-        // ], [ goes to new line
-        // }, [ goes to new line
-        if (!this._options.keep_array_indentation) {
-          this.print_newline();
-        }
-      }
-    }
-
-    if (!in_array(this._flags.last_token.type, [TOKEN.START_EXPR, TOKEN.END_EXPR, TOKEN.WORD, TOKEN.OPERATOR])) {
-      this._output.space_before_token = true;
-    }
-  } else {
-    if (this._flags.last_token.type === TOKEN.RESERVED) {
-      if (this._flags.last_token.text === 'for') {
-        this._output.space_before_token = this._options.space_before_conditional;
-        next_mode = MODE.ForInitializer;
-      } else if (in_array(this._flags.last_token.text, ['if', 'while'])) {
-        this._output.space_before_token = this._options.space_before_conditional;
-        next_mode = MODE.Conditional;
-      } else if (in_array(this._flags.last_word, ['await', 'async'])) {
-        // Should be a space between await and an IIFE, or async and an arrow function
-        this._output.space_before_token = true;
-      } else if (this._flags.last_token.text === 'import' && current_token.whitespace_before === '') {
-        this._output.space_before_token = false;
-      } else if (in_array(this._flags.last_token.text, line_starters) || this._flags.last_token.text === 'catch') {
-        this._output.space_before_token = true;
-      }
-    } else if (this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-      // Support of this kind of newline preservation.
-      // a = (b &&
-      //     (c || d));
-      if (!this.start_of_object_property()) {
-        this.allow_wrap_or_preserved_newline(current_token);
-      }
-    } else if (this._flags.last_token.type === TOKEN.WORD) {
-      this._output.space_before_token = false;
-
-      // function name() vs function name ()
-      // function* name() vs function* name ()
-      // async name() vs async name ()
-      // In ES6, you can also define the method properties of an object
-      // var obj = {a: function() {}}
-      // It can be abbreviated
-      // var obj = {a() {}}
-      // var obj = { a() {}} vs var obj = { a () {}}
-      // var obj = { * a() {}} vs var obj = { * a () {}}
-      var peek_back_two = this._tokens.peek(-3);
-      if (this._options.space_after_named_function && peek_back_two) {
-        // peek starts at next character so -1 is current token
-        var peek_back_three = this._tokens.peek(-4);
-        if (reserved_array(peek_back_two, ['async', 'function']) ||
-          (peek_back_two.text === '*' && reserved_array(peek_back_three, ['async', 'function']))) {
-          this._output.space_before_token = true;
-        } else if (this._flags.mode === MODE.ObjectLiteral) {
-          if ((peek_back_two.text === '{' || peek_back_two.text === ',') ||
-            (peek_back_two.text === '*' && (peek_back_three.text === '{' || peek_back_three.text === ','))) {
-            this._output.space_before_token = true;
-          }
-        }
-      }
-    } else {
-      // Support preserving wrapped arrow function expressions
-      // a.b('c',
-      //     () => d.e
-      // )
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-
-    // function() vs function ()
-    // yield*() vs yield* ()
-    // function*() vs function* ()
-    if ((this._flags.last_token.type === TOKEN.RESERVED && (this._flags.last_word === 'function' || this._flags.last_word === 'typeof')) ||
-      (this._flags.last_token.text === '*' &&
-        (in_array(this._last_last_text, ['function', 'yield']) ||
-          (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {
-      this._output.space_before_token = this._options.space_after_anon_function;
-    }
-  }
-
-  if (this._flags.last_token.text === ';' || this._flags.last_token.type === TOKEN.START_BLOCK) {
-    this.print_newline();
-  } else if (this._flags.last_token.type === TOKEN.END_EXPR || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.END_BLOCK || this._flags.last_token.text === '.' || this._flags.last_token.type === TOKEN.COMMA) {
-    // do nothing on (( and )( and ][ and ]( and .(
-    // TODO: Consider whether forcing this is required.  Review failing tests when removed.
-    this.allow_wrap_or_preserved_newline(current_token, current_token.newlines);
-  }
-
-  this.print_token(current_token);
-  this.set_mode(next_mode);
-  if (this._options.space_in_paren) {
-    this._output.space_before_token = true;
-  }
-
-  // In all cases, if we newline while inside an expression it should be indented.
-  this.indent();
-};
-
-Beautifier.prototype.handle_end_expr = function(current_token) {
-  // statements inside expressions are not valid syntax, but...
-  // statements must all be closed when their container closes
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-
-  this.handle_whitespace_and_comments(current_token);
-
-  if (this._flags.multiline_frame) {
-    this.allow_wrap_or_preserved_newline(current_token,
-      current_token.text === ']' && is_array(this._flags.mode) && !this._options.keep_array_indentation);
-  }
-
-  if (this._options.space_in_paren) {
-    if (this._flags.last_token.type === TOKEN.START_EXPR && !this._options.space_in_empty_paren) {
-      // () [] no inner space in empty parens like these, ever, ref #320
-      this._output.trim();
-      this._output.space_before_token = false;
-    } else {
-      this._output.space_before_token = true;
-    }
-  }
-  this.deindent();
-  this.print_token(current_token);
-  this.restore_mode();
-
-  remove_redundant_indentation(this._output, this._previous_flags);
-
-  // do {} while () // no statement required after
-  if (this._flags.do_while && this._previous_flags.mode === MODE.Conditional) {
-    this._previous_flags.mode = MODE.Expression;
-    this._flags.do_block = false;
-    this._flags.do_while = false;
-
-  }
-};
-
-Beautifier.prototype.handle_start_block = function(current_token) {
-  this.handle_whitespace_and_comments(current_token);
-
-  // Check if this is should be treated as a ObjectLiteral
-  var next_token = this._tokens.peek();
-  var second_token = this._tokens.peek(1);
-  if (this._flags.last_word === 'switch' && this._flags.last_token.type === TOKEN.END_EXPR) {
-    this.set_mode(MODE.BlockStatement);
-    this._flags.in_case_statement = true;
-  } else if (this._flags.case_body) {
-    this.set_mode(MODE.BlockStatement);
-  } else if (second_token && (
-      (in_array(second_token.text, [':', ',']) && in_array(next_token.type, [TOKEN.STRING, TOKEN.WORD, TOKEN.RESERVED])) ||
-      (in_array(next_token.text, ['get', 'set', '...']) && in_array(second_token.type, [TOKEN.WORD, TOKEN.RESERVED]))
-    )) {
-    // We don't support TypeScript,but we didn't break it for a very long time.
-    // We'll try to keep not breaking it.
-    if (!in_array(this._last_last_text, ['class', 'interface'])) {
-      this.set_mode(MODE.ObjectLiteral);
-    } else {
-      this.set_mode(MODE.BlockStatement);
-    }
-  } else if (this._flags.last_token.type === TOKEN.OPERATOR && this._flags.last_token.text === '=>') {
-    // arrow function: (param1, paramN) => { statements }
-    this.set_mode(MODE.BlockStatement);
-  } else if (in_array(this._flags.last_token.type, [TOKEN.EQUALS, TOKEN.START_EXPR, TOKEN.COMMA, TOKEN.OPERATOR]) ||
-    reserved_array(this._flags.last_token, ['return', 'throw', 'import', 'default'])
-  ) {
-    // Detecting shorthand function syntax is difficult by scanning forward,
-    //     so check the surrounding context.
-    // If the block is being returned, imported, export default, passed as arg,
-    //     assigned with = or assigned in a nested object, treat as an ObjectLiteral.
-    this.set_mode(MODE.ObjectLiteral);
-  } else {
-    this.set_mode(MODE.BlockStatement);
-  }
-
-  var empty_braces = !next_token.comments_before && next_token.text === '}';
-  var empty_anonymous_function = empty_braces && this._flags.last_word === 'function' &&
-    this._flags.last_token.type === TOKEN.END_EXPR;
-
-  if (this._options.brace_preserve_inline) // check for inline, set inline_frame if so
-  {
-    // search forward for a newline wanted inside this block
-    var index = 0;
-    var check_token = null;
-    this._flags.inline_frame = true;
-    do {
-      index += 1;
-      check_token = this._tokens.peek(index - 1);
-      if (check_token.newlines) {
-        this._flags.inline_frame = false;
-        break;
-      }
-    } while (check_token.type !== TOKEN.EOF &&
-      !(check_token.type === TOKEN.END_BLOCK && check_token.opened === current_token));
-  }
-
-  if ((this._options.brace_style === "expand" ||
-      (this._options.brace_style === "none" && current_token.newlines)) &&
-    !this._flags.inline_frame) {
-    if (this._flags.last_token.type !== TOKEN.OPERATOR &&
-      (empty_anonymous_function ||
-        this._flags.last_token.type === TOKEN.EQUALS ||
-        (reserved_array(this._flags.last_token, special_words) && this._flags.last_token.text !== 'else'))) {
-      this._output.space_before_token = true;
-    } else {
-      this.print_newline(false, true);
-    }
-  } else { // collapse || inline_frame
-    if (is_array(this._previous_flags.mode) && (this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.COMMA)) {
-      if (this._flags.last_token.type === TOKEN.COMMA || this._options.space_in_paren) {
-        this._output.space_before_token = true;
-      }
-
-      if (this._flags.last_token.type === TOKEN.COMMA || (this._flags.last_token.type === TOKEN.START_EXPR && this._flags.inline_frame)) {
-        this.allow_wrap_or_preserved_newline(current_token);
-        this._previous_flags.multiline_frame = this._previous_flags.multiline_frame || this._flags.multiline_frame;
-        this._flags.multiline_frame = false;
-      }
-    }
-    if (this._flags.last_token.type !== TOKEN.OPERATOR && this._flags.last_token.type !== TOKEN.START_EXPR) {
-      if (this._flags.last_token.type === TOKEN.START_BLOCK && !this._flags.inline_frame) {
-        this.print_newline();
-      } else {
-        this._output.space_before_token = true;
-      }
-    }
-  }
-  this.print_token(current_token);
-  this.indent();
-
-  // Except for specific cases, open braces are followed by a new line.
-  if (!empty_braces && !(this._options.brace_preserve_inline && this._flags.inline_frame)) {
-    this.print_newline();
-  }
-};
-
-Beautifier.prototype.handle_end_block = function(current_token) {
-  // statements must all be closed when their container closes
-  this.handle_whitespace_and_comments(current_token);
-
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-
-  var empty_braces = this._flags.last_token.type === TOKEN.START_BLOCK;
-
-  if (this._flags.inline_frame && !empty_braces) { // try inline_frame (only set if this._options.braces-preserve-inline) first
-    this._output.space_before_token = true;
-  } else if (this._options.brace_style === "expand") {
-    if (!empty_braces) {
-      this.print_newline();
-    }
-  } else {
-    // skip {}
-    if (!empty_braces) {
-      if (is_array(this._flags.mode) && this._options.keep_array_indentation) {
-        // we REALLY need a newline here, but newliner would skip that
-        this._options.keep_array_indentation = false;
-        this.print_newline();
-        this._options.keep_array_indentation = true;
-
-      } else {
-        this.print_newline();
-      }
-    }
-  }
-  this.restore_mode();
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_word = function(current_token) {
-  if (current_token.type === TOKEN.RESERVED) {
-    if (in_array(current_token.text, ['set', 'get']) && this._flags.mode !== MODE.ObjectLiteral) {
-      current_token.type = TOKEN.WORD;
-    } else if (current_token.text === 'import' && this._tokens.peek().text === '(') {
-      current_token.type = TOKEN.WORD;
-    } else if (in_array(current_token.text, ['as', 'from']) && !this._flags.import_block) {
-      current_token.type = TOKEN.WORD;
-    } else if (this._flags.mode === MODE.ObjectLiteral) {
-      var next_token = this._tokens.peek();
-      if (next_token.text === ':') {
-        current_token.type = TOKEN.WORD;
-      }
-    }
-  }
-
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    if (reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD) {
-      this._flags.declaration_statement = true;
-    }
-  } else if (current_token.newlines && !is_expression(this._flags.mode) &&
-    (this._flags.last_token.type !== TOKEN.OPERATOR || (this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) &&
-    this._flags.last_token.type !== TOKEN.EQUALS &&
-    (this._options.preserve_newlines || !reserved_array(this._flags.last_token, ['var', 'let', 'const', 'set', 'get']))) {
-    this.handle_whitespace_and_comments(current_token);
-    this.print_newline();
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  if (this._flags.do_block && !this._flags.do_while) {
-    if (reserved_word(current_token, 'while')) {
-      // do {} ## while ()
-      this._output.space_before_token = true;
-      this.print_token(current_token);
-      this._output.space_before_token = true;
-      this._flags.do_while = true;
-      return;
-    } else {
-      // do {} should always have while as the next word.
-      // if we don't see the expected while, recover
-      this.print_newline();
-      this._flags.do_block = false;
-    }
-  }
-
-  // if may be followed by else, or not
-  // Bare/inline ifs are tricky
-  // Need to unwind the modes correctly: if (a) if (b) c(); else d(); else e();
-  if (this._flags.if_block) {
-    if (!this._flags.else_block && reserved_word(current_token, 'else')) {
-      this._flags.else_block = true;
-    } else {
-      while (this._flags.mode === MODE.Statement) {
-        this.restore_mode();
-      }
-      this._flags.if_block = false;
-      this._flags.else_block = false;
-    }
-  }
-
-  if (this._flags.in_case_statement && reserved_array(current_token, ['case', 'default'])) {
-    this.print_newline();
-    if (this._flags.last_token.type !== TOKEN.END_BLOCK && (this._flags.case_body || this._options.jslint_happy)) {
-      // switch cases following one another
-      this.deindent();
-    }
-    this._flags.case_body = false;
-
-    this.print_token(current_token);
-    this._flags.in_case = true;
-    return;
-  }
-
-  if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-    if (!this.start_of_object_property()) {
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-  }
-
-  if (reserved_word(current_token, 'function')) {
-    if (in_array(this._flags.last_token.text, ['}', ';']) ||
-      (this._output.just_added_newline() && !(in_array(this._flags.last_token.text, ['(', '[', '{', ':', '=', ',']) || this._flags.last_token.type === TOKEN.OPERATOR))) {
-      // make sure there is a nice clean space of at least one blank line
-      // before a new function definition
-      if (!this._output.just_added_blankline() && !current_token.comments_before) {
-        this.print_newline();
-        this.print_newline(true);
-      }
-    }
-    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD) {
-      if (reserved_array(this._flags.last_token, ['get', 'set', 'new', 'export']) ||
-        reserved_array(this._flags.last_token, newline_restricted_tokens)) {
-        this._output.space_before_token = true;
-      } else if (reserved_word(this._flags.last_token, 'default') && this._last_last_text === 'export') {
-        this._output.space_before_token = true;
-      } else if (this._flags.last_token.text === 'declare') {
-        // accomodates Typescript declare function formatting
-        this._output.space_before_token = true;
-      } else {
-        this.print_newline();
-      }
-    } else if (this._flags.last_token.type === TOKEN.OPERATOR || this._flags.last_token.text === '=') {
-      // foo = function
-      this._output.space_before_token = true;
-    } else if (!this._flags.multiline_frame && (is_expression(this._flags.mode) || is_array(this._flags.mode))) {
-      // (function
-    } else {
-      this.print_newline();
-    }
-
-    this.print_token(current_token);
-    this._flags.last_word = current_token.text;
-    return;
-  }
-
-  var prefix = 'NONE';
-
-  if (this._flags.last_token.type === TOKEN.END_BLOCK) {
-
-    if (this._previous_flags.inline_frame) {
-      prefix = 'SPACE';
-    } else if (!reserved_array(current_token, ['else', 'catch', 'finally', 'from'])) {
-      prefix = 'NEWLINE';
-    } else {
-      if (this._options.brace_style === "expand" ||
-        this._options.brace_style === "end-expand" ||
-        (this._options.brace_style === "none" && current_token.newlines)) {
-        prefix = 'NEWLINE';
-      } else {
-        prefix = 'SPACE';
-        this._output.space_before_token = true;
-      }
-    }
-  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && this._flags.mode === MODE.BlockStatement) {
-    // TODO: Should this be for STATEMENT as well?
-    prefix = 'NEWLINE';
-  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && is_expression(this._flags.mode)) {
-    prefix = 'SPACE';
-  } else if (this._flags.last_token.type === TOKEN.STRING) {
-    prefix = 'NEWLINE';
-  } else if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD ||
-    (this._flags.last_token.text === '*' &&
-      (in_array(this._last_last_text, ['function', 'yield']) ||
-        (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {
-    prefix = 'SPACE';
-  } else if (this._flags.last_token.type === TOKEN.START_BLOCK) {
-    if (this._flags.inline_frame) {
-      prefix = 'SPACE';
-    } else {
-      prefix = 'NEWLINE';
-    }
-  } else if (this._flags.last_token.type === TOKEN.END_EXPR) {
-    this._output.space_before_token = true;
-    prefix = 'NEWLINE';
-  }
-
-  if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {
-    if (this._flags.inline_frame || this._flags.last_token.text === 'else' || this._flags.last_token.text === 'export') {
-      prefix = 'SPACE';
-    } else {
-      prefix = 'NEWLINE';
-    }
-
-  }
-
-  if (reserved_array(current_token, ['else', 'catch', 'finally'])) {
-    if ((!(this._flags.last_token.type === TOKEN.END_BLOCK && this._previous_flags.mode === MODE.BlockStatement) ||
-        this._options.brace_style === "expand" ||
-        this._options.brace_style === "end-expand" ||
-        (this._options.brace_style === "none" && current_token.newlines)) &&
-      !this._flags.inline_frame) {
-      this.print_newline();
-    } else {
-      this._output.trim(true);
-      var line = this._output.current_line;
-      // If we trimmed and there's something other than a close block before us
-      // put a newline back in.  Handles '} // comment' scenario.
-      if (line.last() !== '}') {
-        this.print_newline();
-      }
-      this._output.space_before_token = true;
-    }
-  } else if (prefix === 'NEWLINE') {
-    if (reserved_array(this._flags.last_token, special_words)) {
-      // no newline between 'return nnn'
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.text === 'declare' && reserved_array(current_token, ['var', 'let', 'const'])) {
-      // accomodates Typescript declare formatting
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.type !== TOKEN.END_EXPR) {
-      if ((this._flags.last_token.type !== TOKEN.START_EXPR || !reserved_array(current_token, ['var', 'let', 'const'])) && this._flags.last_token.text !== ':') {
-        // no need to force newline on 'var': for (var x = 0...)
-        if (reserved_word(current_token, 'if') && reserved_word(current_token.previous, 'else')) {
-          // no newline for } else if {
-          this._output.space_before_token = true;
-        } else {
-          this.print_newline();
-        }
-      }
-    } else if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {
-      this.print_newline();
-    }
-  } else if (this._flags.multiline_frame && is_array(this._flags.mode) && this._flags.last_token.text === ',' && this._last_last_text === '}') {
-    this.print_newline(); // }, in lists get a newline treatment
-  } else if (prefix === 'SPACE') {
-    this._output.space_before_token = true;
-  }
-  if (current_token.previous && (current_token.previous.type === TOKEN.WORD || current_token.previous.type === TOKEN.RESERVED)) {
-    this._output.space_before_token = true;
-  }
-  this.print_token(current_token);
-  this._flags.last_word = current_token.text;
-
-  if (current_token.type === TOKEN.RESERVED) {
-    if (current_token.text === 'do') {
-      this._flags.do_block = true;
-    } else if (current_token.text === 'if') {
-      this._flags.if_block = true;
-    } else if (current_token.text === 'import') {
-      this._flags.import_block = true;
-    } else if (this._flags.import_block && reserved_word(current_token, 'from')) {
-      this._flags.import_block = false;
-    }
-  }
-};
-
-Beautifier.prototype.handle_semicolon = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    // Semicolon can be the start (and end) of a statement
-    this._output.space_before_token = false;
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  var next_token = this._tokens.peek();
-  while (this._flags.mode === MODE.Statement &&
-    !(this._flags.if_block && reserved_word(next_token, 'else')) &&
-    !this._flags.do_block) {
-    this.restore_mode();
-  }
-
-  // hacky but effective for the moment
-  if (this._flags.import_block) {
-    this._flags.import_block = false;
-  }
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_string = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-    // One difference - strings want at least a space before
-    this._output.space_before_token = true;
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD || this._flags.inline_frame) {
-      this._output.space_before_token = true;
-    } else if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
-      if (!this.start_of_object_property()) {
-        this.allow_wrap_or_preserved_newline(current_token);
-      }
-    } else {
-      this.print_newline();
-    }
-  }
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_equals = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    this.handle_whitespace_and_comments(current_token);
-  }
-
-  if (this._flags.declaration_statement) {
-    // just got an '=' in a var-line, different formatting/line-breaking, etc will now be done
-    this._flags.declaration_assignment = true;
-  }
-  this._output.space_before_token = true;
-  this.print_token(current_token);
-  this._output.space_before_token = true;
-};
-
-Beautifier.prototype.handle_comma = function(current_token) {
-  this.handle_whitespace_and_comments(current_token, true);
-
-  this.print_token(current_token);
-  this._output.space_before_token = true;
-  if (this._flags.declaration_statement) {
-    if (is_expression(this._flags.parent.mode)) {
-      // do not break on comma, for(var a = 1, b = 2)
-      this._flags.declaration_assignment = false;
-    }
-
-    if (this._flags.declaration_assignment) {
-      this._flags.declaration_assignment = false;
-      this.print_newline(false, true);
-    } else if (this._options.comma_first) {
-      // for comma-first, we want to allow a newline before the comma
-      // to turn into a newline after the comma, which we will fixup later
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-  } else if (this._flags.mode === MODE.ObjectLiteral ||
-    (this._flags.mode === MODE.Statement && this._flags.parent.mode === MODE.ObjectLiteral)) {
-    if (this._flags.mode === MODE.Statement) {
-      this.restore_mode();
-    }
-
-    if (!this._flags.inline_frame) {
-      this.print_newline();
-    }
-  } else if (this._options.comma_first) {
-    // EXPR or DO_BLOCK
-    // for comma-first, we want to allow a newline before the comma
-    // to turn into a newline after the comma, which we will fixup later
-    this.allow_wrap_or_preserved_newline(current_token);
-  }
-};
-
-Beautifier.prototype.handle_operator = function(current_token) {
-  var isGeneratorAsterisk = current_token.text === '*' &&
-    (reserved_array(this._flags.last_token, ['function', 'yield']) ||
-      (in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.COMMA, TOKEN.END_BLOCK, TOKEN.SEMICOLON]))
-    );
-  var isUnary = in_array(current_token.text, ['-', '+']) && (
-    in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.START_EXPR, TOKEN.EQUALS, TOKEN.OPERATOR]) ||
-    in_array(this._flags.last_token.text, line_starters) ||
-    this._flags.last_token.text === ','
-  );
-
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    var preserve_statement_flags = !isGeneratorAsterisk;
-    this.handle_whitespace_and_comments(current_token, preserve_statement_flags);
-  }
-
-  if (reserved_array(this._flags.last_token, special_words)) {
-    // "return" had a special handling in TK_WORD. Now we need to return the favor
-    this._output.space_before_token = true;
-    this.print_token(current_token);
-    return;
-  }
-
-  // hack for actionscript's import .*;
-  if (current_token.text === '*' && this._flags.last_token.type === TOKEN.DOT) {
-    this.print_token(current_token);
-    return;
-  }
-
-  if (current_token.text === '::') {
-    // no spaces around exotic namespacing syntax operator
-    this.print_token(current_token);
-    return;
-  }
-
-  // Allow line wrapping between operators when operator_position is
-  //   set to before or preserve
-  if (this._flags.last_token.type === TOKEN.OPERATOR && in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)) {
-    this.allow_wrap_or_preserved_newline(current_token);
-  }
-
-  if (current_token.text === ':' && this._flags.in_case) {
-    this.print_token(current_token);
-
-    this._flags.in_case = false;
-    this._flags.case_body = true;
-    if (this._tokens.peek().type !== TOKEN.START_BLOCK) {
-      this.indent();
-      this.print_newline();
-    } else {
-      this._output.space_before_token = true;
-    }
-    return;
-  }
-
-  var space_before = true;
-  var space_after = true;
-  var in_ternary = false;
-  if (current_token.text === ':') {
-    if (this._flags.ternary_depth === 0) {
-      // Colon is invalid javascript outside of ternary and object, but do our best to guess what was meant.
-      space_before = false;
-    } else {
-      this._flags.ternary_depth -= 1;
-      in_ternary = true;
-    }
-  } else if (current_token.text === '?') {
-    this._flags.ternary_depth += 1;
-  }
-
-  // let's handle the operator_position option prior to any conflicting logic
-  if (!isUnary && !isGeneratorAsterisk && this._options.preserve_newlines && in_array(current_token.text, positionable_operators)) {
-    var isColon = current_token.text === ':';
-    var isTernaryColon = (isColon && in_ternary);
-    var isOtherColon = (isColon && !in_ternary);
-
-    switch (this._options.operator_position) {
-      case OPERATOR_POSITION.before_newline:
-        // if the current token is : and it's not a ternary statement then we set space_before to false
-        this._output.space_before_token = !isOtherColon;
-
-        this.print_token(current_token);
-
-        if (!isColon || isTernaryColon) {
-          this.allow_wrap_or_preserved_newline(current_token);
-        }
-
-        this._output.space_before_token = true;
-        return;
-
-      case OPERATOR_POSITION.after_newline:
-        // if the current token is anything but colon, or (via deduction) it's a colon and in a ternary statement,
-        //   then print a newline.
-
-        this._output.space_before_token = true;
-
-        if (!isColon || isTernaryColon) {
-          if (this._tokens.peek().newlines) {
-            this.print_newline(false, true);
-          } else {
-            this.allow_wrap_or_preserved_newline(current_token);
-          }
-        } else {
-          this._output.space_before_token = false;
-        }
-
-        this.print_token(current_token);
-
-        this._output.space_before_token = true;
-        return;
-
-      case OPERATOR_POSITION.preserve_newline:
-        if (!isOtherColon) {
-          this.allow_wrap_or_preserved_newline(current_token);
-        }
-
-        // if we just added a newline, or the current token is : and it's not a ternary statement,
-        //   then we set space_before to false
-        space_before = !(this._output.just_added_newline() || isOtherColon);
-
-        this._output.space_before_token = space_before;
-        this.print_token(current_token);
-        this._output.space_before_token = true;
-        return;
-    }
-  }
-
-  if (isGeneratorAsterisk) {
-    this.allow_wrap_or_preserved_newline(current_token);
-    space_before = false;
-    var next_token = this._tokens.peek();
-    space_after = next_token && in_array(next_token.type, [TOKEN.WORD, TOKEN.RESERVED]);
-  } else if (current_token.text === '...') {
-    this.allow_wrap_or_preserved_newline(current_token);
-    space_before = this._flags.last_token.type === TOKEN.START_BLOCK;
-    space_after = false;
-  } else if (in_array(current_token.text, ['--', '++', '!', '~']) || isUnary) {
-    // unary operators (and binary +/- pretending to be unary) special cases
-    if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR) {
-      this.allow_wrap_or_preserved_newline(current_token);
-    }
-
-    space_before = false;
-    space_after = false;
-
-    // http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1
-    // if there is a newline between -- or ++ and anything else we should preserve it.
-    if (current_token.newlines && (current_token.text === '--' || current_token.text === '++')) {
-      this.print_newline(false, true);
-    }
-
-    if (this._flags.last_token.text === ';' && is_expression(this._flags.mode)) {
-      // for (;; ++i)
-      //        ^^^
-      space_before = true;
-    }
-
-    if (this._flags.last_token.type === TOKEN.RESERVED) {
-      space_before = true;
-    } else if (this._flags.last_token.type === TOKEN.END_EXPR) {
-      space_before = !(this._flags.last_token.text === ']' && (current_token.text === '--' || current_token.text === '++'));
-    } else if (this._flags.last_token.type === TOKEN.OPERATOR) {
-      // a++ + ++b;
-      // a - -b
-      space_before = in_array(current_token.text, ['--', '-', '++', '+']) && in_array(this._flags.last_token.text, ['--', '-', '++', '+']);
-      // + and - are not unary when preceeded by -- or ++ operator
-      // a-- + b
-      // a * +b
-      // a - -b
-      if (in_array(current_token.text, ['+', '-']) && in_array(this._flags.last_token.text, ['--', '++'])) {
-        space_after = true;
-      }
-    }
-
-
-    if (((this._flags.mode === MODE.BlockStatement && !this._flags.inline_frame) || this._flags.mode === MODE.Statement) &&
-      (this._flags.last_token.text === '{' || this._flags.last_token.text === ';')) {
-      // { foo; --i }
-      // foo(); --bar;
-      this.print_newline();
-    }
-  }
-
-  this._output.space_before_token = this._output.space_before_token || space_before;
-  this.print_token(current_token);
-  this._output.space_before_token = space_after;
-};
-
-Beautifier.prototype.handle_block_comment = function(current_token, preserve_statement_flags) {
-  if (this._output.raw) {
-    this._output.add_raw_token(current_token);
-    if (current_token.directives && current_token.directives.preserve === 'end') {
-      // If we're testing the raw output behavior, do not allow a directive to turn it off.
-      this._output.raw = this._options.test_output_raw;
-    }
-    return;
-  }
-
-  if (current_token.directives) {
-    this.print_newline(false, preserve_statement_flags);
-    this.print_token(current_token);
-    if (current_token.directives.preserve === 'start') {
-      this._output.raw = true;
-    }
-    this.print_newline(false, true);
-    return;
-  }
-
-  // inline block
-  if (!acorn.newline.test(current_token.text) && !current_token.newlines) {
-    this._output.space_before_token = true;
-    this.print_token(current_token);
-    this._output.space_before_token = true;
-    return;
-  } else {
-    this.print_block_commment(current_token, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.print_block_commment = function(current_token, preserve_statement_flags) {
-  var lines = split_linebreaks(current_token.text);
-  var j; // iterator for this case
-  var javadoc = false;
-  var starless = false;
-  var lastIndent = current_token.whitespace_before;
-  var lastIndentLength = lastIndent.length;
-
-  // block comment starts with a new line
-  this.print_newline(false, preserve_statement_flags);
-
-  // first line always indented
-  this.print_token_line_indentation(current_token);
-  this._output.add_token(lines[0]);
-  this.print_newline(false, preserve_statement_flags);
-
-
-  if (lines.length > 1) {
-    lines = lines.slice(1);
-    javadoc = all_lines_start_with(lines, '*');
-    starless = each_line_matches_indent(lines, lastIndent);
-
-    if (javadoc) {
-      this._flags.alignment = 1;
-    }
-
-    for (j = 0; j < lines.length; j++) {
-      if (javadoc) {
-        // javadoc: reformat and re-indent
-        this.print_token_line_indentation(current_token);
-        this._output.add_token(ltrim(lines[j]));
-      } else if (starless && lines[j]) {
-        // starless: re-indent non-empty content, avoiding trim
-        this.print_token_line_indentation(current_token);
-        this._output.add_token(lines[j].substring(lastIndentLength));
-      } else {
-        // normal comments output raw
-        this._output.current_line.set_indent(-1);
-        this._output.add_token(lines[j]);
-      }
-
-      // for comments on their own line or  more than one line, make sure there's a new line after
-      this.print_newline(false, preserve_statement_flags);
-    }
-
-    this._flags.alignment = 0;
-  }
-};
-
-
-Beautifier.prototype.handle_comment = function(current_token, preserve_statement_flags) {
-  if (current_token.newlines) {
-    this.print_newline(false, preserve_statement_flags);
-  } else {
-    this._output.trim(true);
-  }
-
-  this._output.space_before_token = true;
-  this.print_token(current_token);
-  this.print_newline(false, preserve_statement_flags);
-};
-
-Beautifier.prototype.handle_dot = function(current_token) {
-  if (this.start_of_statement(current_token)) {
-    // The conditional starts the statement if appropriate.
-  } else {
-    this.handle_whitespace_and_comments(current_token, true);
-  }
-
-  if (reserved_array(this._flags.last_token, special_words)) {
-    this._output.space_before_token = false;
-  } else {
-    // allow preserved newlines before dots in general
-    // force newlines on dots after close paren when break_chained - for bar().baz()
-    this.allow_wrap_or_preserved_newline(current_token,
-      this._flags.last_token.text === ')' && this._options.break_chained_methods);
-  }
-
-  // Only unindent chained method dot if this dot starts a new line.
-  // Otherwise the automatic extra indentation removal will handle the over indent
-  if (this._options.unindent_chained_methods && this._output.just_added_newline()) {
-    this.deindent();
-  }
-
-  this.print_token(current_token);
-};
-
-Beautifier.prototype.handle_unknown = function(current_token, preserve_statement_flags) {
-  this.print_token(current_token);
-
-  if (current_token.text[current_token.text.length - 1] === '\n') {
-    this.print_newline(false, preserve_statement_flags);
-  }
-};
-
-Beautifier.prototype.handle_eof = function(current_token) {
-  // Unwind any open statements
-  while (this._flags.mode === MODE.Statement) {
-    this.restore_mode();
-  }
-  this.handle_whitespace_and_comments(current_token);
-};
-
-module.exports.Beautifier = Beautifier;
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function OutputLine(parent) {
-  this.__parent = parent;
-  this.__character_count = 0;
-  // use indent_count as a marker for this.__lines that have preserved indentation
-  this.__indent_count = -1;
-  this.__alignment_count = 0;
-  this.__wrap_point_index = 0;
-  this.__wrap_point_character_count = 0;
-  this.__wrap_point_indent_count = -1;
-  this.__wrap_point_alignment_count = 0;
-
-  this.__items = [];
-}
-
-OutputLine.prototype.clone_empty = function() {
-  var line = new OutputLine(this.__parent);
-  line.set_indent(this.__indent_count, this.__alignment_count);
-  return line;
-};
-
-OutputLine.prototype.item = function(index) {
-  if (index < 0) {
-    return this.__items[this.__items.length + index];
-  } else {
-    return this.__items[index];
-  }
-};
-
-OutputLine.prototype.has_match = function(pattern) {
-  for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {
-    if (this.__items[lastCheckedOutput].match(pattern)) {
-      return true;
-    }
-  }
-  return false;
-};
-
-OutputLine.prototype.set_indent = function(indent, alignment) {
-  if (this.is_empty()) {
-    this.__indent_count = indent || 0;
-    this.__alignment_count = alignment || 0;
-    this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);
-  }
-};
-
-OutputLine.prototype._set_wrap_point = function() {
-  if (this.__parent.wrap_line_length) {
-    this.__wrap_point_index = this.__items.length;
-    this.__wrap_point_character_count = this.__character_count;
-    this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;
-    this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;
-  }
-};
-
-OutputLine.prototype._should_wrap = function() {
-  return this.__wrap_point_index &&
-    this.__character_count > this.__parent.wrap_line_length &&
-    this.__wrap_point_character_count > this.__parent.next_line.__character_count;
-};
-
-OutputLine.prototype._allow_wrap = function() {
-  if (this._should_wrap()) {
-    this.__parent.add_new_line();
-    var next = this.__parent.current_line;
-    next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);
-    next.__items = this.__items.slice(this.__wrap_point_index);
-    this.__items = this.__items.slice(0, this.__wrap_point_index);
-
-    next.__character_count += this.__character_count - this.__wrap_point_character_count;
-    this.__character_count = this.__wrap_point_character_count;
-
-    if (next.__items[0] === " ") {
-      next.__items.splice(0, 1);
-      next.__character_count -= 1;
-    }
-    return true;
-  }
-  return false;
-};
-
-OutputLine.prototype.is_empty = function() {
-  return this.__items.length === 0;
-};
-
-OutputLine.prototype.last = function() {
-  if (!this.is_empty()) {
-    return this.__items[this.__items.length - 1];
-  } else {
-    return null;
-  }
-};
-
-OutputLine.prototype.push = function(item) {
-  this.__items.push(item);
-  var last_newline_index = item.lastIndexOf('\n');
-  if (last_newline_index !== -1) {
-    this.__character_count = item.length - last_newline_index;
-  } else {
-    this.__character_count += item.length;
-  }
-};
-
-OutputLine.prototype.pop = function() {
-  var item = null;
-  if (!this.is_empty()) {
-    item = this.__items.pop();
-    this.__character_count -= item.length;
-  }
-  return item;
-};
-
-
-OutputLine.prototype._remove_indent = function() {
-  if (this.__indent_count > 0) {
-    this.__indent_count -= 1;
-    this.__character_count -= this.__parent.indent_size;
-  }
-};
-
-OutputLine.prototype._remove_wrap_indent = function() {
-  if (this.__wrap_point_indent_count > 0) {
-    this.__wrap_point_indent_count -= 1;
-  }
-};
-OutputLine.prototype.trim = function() {
-  while (this.last() === ' ') {
-    this.__items.pop();
-    this.__character_count -= 1;
-  }
-};
-
-OutputLine.prototype.toString = function() {
-  var result = '';
-  if (this.is_empty()) {
-    if (this.__parent.indent_empty_lines) {
-      result = this.__parent.get_indent_string(this.__indent_count);
-    }
-  } else {
-    result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);
-    result += this.__items.join('');
-  }
-  return result;
-};
-
-function IndentStringCache(options, baseIndentString) {
-  this.__cache = [''];
-  this.__indent_size = options.indent_size;
-  this.__indent_string = options.indent_char;
-  if (!options.indent_with_tabs) {
-    this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);
-  }
-
-  // Set to null to continue support for auto detection of base indent
-  baseIndentString = baseIndentString || '';
-  if (options.indent_level > 0) {
-    baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);
-  }
-
-  this.__base_string = baseIndentString;
-  this.__base_string_length = baseIndentString.length;
-}
-
-IndentStringCache.prototype.get_indent_size = function(indent, column) {
-  var result = this.__base_string_length;
-  column = column || 0;
-  if (indent < 0) {
-    result = 0;
-  }
-  result += indent * this.__indent_size;
-  result += column;
-  return result;
-};
-
-IndentStringCache.prototype.get_indent_string = function(indent_level, column) {
-  var result = this.__base_string;
-  column = column || 0;
-  if (indent_level < 0) {
-    indent_level = 0;
-    result = '';
-  }
-  column += indent_level * this.__indent_size;
-  this.__ensure_cache(column);
-  result += this.__cache[column];
-  return result;
-};
-
-IndentStringCache.prototype.__ensure_cache = function(column) {
-  while (column >= this.__cache.length) {
-    this.__add_column();
-  }
-};
-
-IndentStringCache.prototype.__add_column = function() {
-  var column = this.__cache.length;
-  var indent = 0;
-  var result = '';
-  if (this.__indent_size && column >= this.__indent_size) {
-    indent = Math.floor(column / this.__indent_size);
-    column -= indent * this.__indent_size;
-    result = new Array(indent + 1).join(this.__indent_string);
-  }
-  if (column) {
-    result += new Array(column + 1).join(' ');
-  }
-
-  this.__cache.push(result);
-};
-
-function Output(options, baseIndentString) {
-  this.__indent_cache = new IndentStringCache(options, baseIndentString);
-  this.raw = false;
-  this._end_with_newline = options.end_with_newline;
-  this.indent_size = options.indent_size;
-  this.wrap_line_length = options.wrap_line_length;
-  this.indent_empty_lines = options.indent_empty_lines;
-  this.__lines = [];
-  this.previous_line = null;
-  this.current_line = null;
-  this.next_line = new OutputLine(this);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = false;
-  // initialize
-  this.__add_outputline();
-}
-
-Output.prototype.__add_outputline = function() {
-  this.previous_line = this.current_line;
-  this.current_line = this.next_line.clone_empty();
-  this.__lines.push(this.current_line);
-};
-
-Output.prototype.get_line_number = function() {
-  return this.__lines.length;
-};
-
-Output.prototype.get_indent_string = function(indent, column) {
-  return this.__indent_cache.get_indent_string(indent, column);
-};
-
-Output.prototype.get_indent_size = function(indent, column) {
-  return this.__indent_cache.get_indent_size(indent, column);
-};
-
-Output.prototype.is_empty = function() {
-  return !this.previous_line && this.current_line.is_empty();
-};
-
-Output.prototype.add_new_line = function(force_newline) {
-  // never newline at the start of file
-  // otherwise, newline only if we didn't just add one or we're forced
-  if (this.is_empty() ||
-    (!force_newline && this.just_added_newline())) {
-    return false;
-  }
-
-  // if raw output is enabled, don't print additional newlines,
-  // but still return True as though you had
-  if (!this.raw) {
-    this.__add_outputline();
-  }
-  return true;
-};
-
-Output.prototype.get_code = function(eol) {
-  this.trim(true);
-
-  // handle some edge cases where the last tokens
-  // has text that ends with newline(s)
-  var last_item = this.current_line.pop();
-  if (last_item) {
-    if (last_item[last_item.length - 1] === '\n') {
-      last_item = last_item.replace(/\n+$/g, '');
-    }
-    this.current_line.push(last_item);
-  }
-
-  if (this._end_with_newline) {
-    this.__add_outputline();
-  }
-
-  var sweet_code = this.__lines.join('\n');
-
-  if (eol !== '\n') {
-    sweet_code = sweet_code.replace(/[\n]/g, eol);
-  }
-  return sweet_code;
-};
-
-Output.prototype.set_wrap_point = function() {
-  this.current_line._set_wrap_point();
-};
-
-Output.prototype.set_indent = function(indent, alignment) {
-  indent = indent || 0;
-  alignment = alignment || 0;
-
-  // Next line stores alignment values
-  this.next_line.set_indent(indent, alignment);
-
-  // Never indent your first output indent at the start of the file
-  if (this.__lines.length > 1) {
-    this.current_line.set_indent(indent, alignment);
-    return true;
-  }
-
-  this.current_line.set_indent();
-  return false;
-};
-
-Output.prototype.add_raw_token = function(token) {
-  for (var x = 0; x < token.newlines; x++) {
-    this.__add_outputline();
-  }
-  this.current_line.set_indent(-1);
-  this.current_line.push(token.whitespace_before);
-  this.current_line.push(token.text);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = false;
-};
-
-Output.prototype.add_token = function(printable_token) {
-  this.__add_space_before_token();
-  this.current_line.push(printable_token);
-  this.space_before_token = false;
-  this.non_breaking_space = false;
-  this.previous_token_wrapped = this.current_line._allow_wrap();
-};
-
-Output.prototype.__add_space_before_token = function() {
-  if (this.space_before_token && !this.just_added_newline()) {
-    if (!this.non_breaking_space) {
-      this.set_wrap_point();
-    }
-    this.current_line.push(' ');
-  }
-};
-
-Output.prototype.remove_indent = function(index) {
-  var output_length = this.__lines.length;
-  while (index < output_length) {
-    this.__lines[index]._remove_indent();
-    index++;
-  }
-  this.current_line._remove_wrap_indent();
-};
-
-Output.prototype.trim = function(eat_newlines) {
-  eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;
-
-  this.current_line.trim();
-
-  while (eat_newlines && this.__lines.length > 1 &&
-    this.current_line.is_empty()) {
-    this.__lines.pop();
-    this.current_line = this.__lines[this.__lines.length - 1];
-    this.current_line.trim();
-  }
-
-  this.previous_line = this.__lines.length > 1 ?
-    this.__lines[this.__lines.length - 2] : null;
-};
-
-Output.prototype.just_added_newline = function() {
-  return this.current_line.is_empty();
-};
-
-Output.prototype.just_added_blankline = function() {
-  return this.is_empty() ||
-    (this.current_line.is_empty() && this.previous_line.is_empty());
-};
-
-Output.prototype.ensure_empty_line_above = function(starts_with, ends_with) {
-  var index = this.__lines.length - 2;
-  while (index >= 0) {
-    var potentialEmptyLine = this.__lines[index];
-    if (potentialEmptyLine.is_empty()) {
-      break;
-    } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&
-      potentialEmptyLine.item(-1) !== ends_with) {
-      this.__lines.splice(index + 1, 0, new OutputLine(this));
-      this.previous_line = this.__lines[this.__lines.length - 2];
-      break;
-    }
-    index--;
-  }
-};
-
-module.exports.Output = Output;
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function Token(type, text, newlines, whitespace_before) {
-  this.type = type;
-  this.text = text;
-
-  // comments_before are
-  // comments that have a new line before them
-  // and may or may not have a newline after
-  // this is a set of comments before
-  this.comments_before = null; /* inline comment*/
-
-
-  // this.comments_after =  new TokenStream(); // no new line before and newline after
-  this.newlines = newlines || 0;
-  this.whitespace_before = whitespace_before || '';
-  this.parent = null;
-  this.next = null;
-  this.previous = null;
-  this.opened = null;
-  this.closed = null;
-  this.directives = null;
-}
-
-
-module.exports.Token = Token;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* jshint node: true, curly: false */
-// Parts of this section of code is taken from acorn.
-//
-// Acorn was written by Marijn Haverbeke and released under an MIT
-// license. The Unicode regexps (for identifiers and whitespace) were
-// taken from [Esprima](http://esprima.org) by Ariya Hidayat.
-//
-// Git repositories for Acorn are available at
-//
-//     http://marijnhaverbeke.nl/git/acorn
-//     https://github.com/marijnh/acorn.git
-
-// ## Character categories
-
-
-
-
-// acorn used char codes to squeeze the last bit of performance out
-// Beautifier is okay without that, so we're using regex
-// permit # (23), $ (36), and @ (64). @ is used in ES7 decorators.
-// 65 through 91 are uppercase letters.
-// permit _ (95).
-// 97 through 123 are lowercase letters.
-var baseASCIIidentifierStartChars = "\\x23\\x24\\x40\\x41-\\x5a\\x5f\\x61-\\x7a";
-
-// inside an identifier @ is not allowed but 0-9 are.
-var baseASCIIidentifierChars = "\\x24\\x30-\\x39\\x41-\\x5a\\x5f\\x61-\\x7a";
-
-// Big ugly regular expressions that match characters in the
-// whitespace, identifier, and identifier-start categories. These
-// are only applied when a character is found to actually have a
-// code point above 128.
-var nonASCIIidentifierStartChars = "\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc";
-var nonASCIIidentifierChars = "\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f";
-//var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-//var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-var identifierStart = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + "])";
-var identifierChars = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])*";
-
-exports.identifier = new RegExp(identifierStart + identifierChars, 'g');
-exports.identifierStart = new RegExp(identifierStart);
-exports.identifierMatch = new RegExp("(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])+");
-
-var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; // jshint ignore:line
-
-// Whether a single character denotes a newline.
-
-exports.newline = /[\n\r\u2028\u2029]/;
-
-// Matches a whole line break (where CRLF is considered a single
-// line break). Used to count lines.
-
-// in javascript, these two differ
-// in python they are the same, different methods are called on them
-exports.lineBreak = new RegExp('\r\n|' + exports.newline.source);
-exports.allLineBreaks = new RegExp(exports.lineBreak.source, 'g');
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var BaseOptions = __webpack_require__(6).Options;
-
-var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
-
-function Options(options) {
-  BaseOptions.call(this, options, 'js');
-
-  // compatibility, re
-  var raw_brace_style = this.raw_options.brace_style || null;
-  if (raw_brace_style === "expand-strict") { //graceful handling of deprecated option
-    this.raw_options.brace_style = "expand";
-  } else if (raw_brace_style === "collapse-preserve-inline") { //graceful handling of deprecated option
-    this.raw_options.brace_style = "collapse,preserve-inline";
-  } else if (this.raw_options.braces_on_own_line !== undefined) { //graceful handling of deprecated option
-    this.raw_options.brace_style = this.raw_options.braces_on_own_line ? "expand" : "collapse";
-    // } else if (!raw_brace_style) { //Nothing exists to set it
-    //   raw_brace_style = "collapse";
-  }
-
-  //preserve-inline in delimited string will trigger brace_preserve_inline, everything
-  //else is considered a brace_style and the last one only will have an effect
-
-  var brace_style_split = this._get_selection_list('brace_style', ['collapse', 'expand', 'end-expand', 'none', 'preserve-inline']);
-
-  this.brace_preserve_inline = false; //Defaults in case one or other was not specified in meta-option
-  this.brace_style = "collapse";
-
-  for (var bs = 0; bs < brace_style_split.length; bs++) {
-    if (brace_style_split[bs] === "preserve-inline") {
-      this.brace_preserve_inline = true;
-    } else {
-      this.brace_style = brace_style_split[bs];
-    }
-  }
-
-  this.unindent_chained_methods = this._get_boolean('unindent_chained_methods');
-  this.break_chained_methods = this._get_boolean('break_chained_methods');
-  this.space_in_paren = this._get_boolean('space_in_paren');
-  this.space_in_empty_paren = this._get_boolean('space_in_empty_paren');
-  this.jslint_happy = this._get_boolean('jslint_happy');
-  this.space_after_anon_function = this._get_boolean('space_after_anon_function');
-  this.space_after_named_function = this._get_boolean('space_after_named_function');
-  this.keep_array_indentation = this._get_boolean('keep_array_indentation');
-  this.space_before_conditional = this._get_boolean('space_before_conditional', true);
-  this.unescape_strings = this._get_boolean('unescape_strings');
-  this.e4x = this._get_boolean('e4x');
-  this.comma_first = this._get_boolean('comma_first');
-  this.operator_position = this._get_selection('operator_position', validPositionValues);
-
-  // For testing of beautify preserve:start directive
-  this.test_output_raw = this._get_boolean('test_output_raw');
-
-  // force this._options.space_after_anon_function to true if this._options.jslint_happy
-  if (this.jslint_happy) {
-    this.space_after_anon_function = true;
-  }
-
-}
-Options.prototype = new BaseOptions();
-
-
-
-module.exports.Options = Options;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function Options(options, merge_child_field) {
-  this.raw_options = _mergeOpts(options, merge_child_field);
-
-  // Support passing the source text back with no change
-  this.disabled = this._get_boolean('disabled');
-
-  this.eol = this._get_characters('eol', 'auto');
-  this.end_with_newline = this._get_boolean('end_with_newline');
-  this.indent_size = this._get_number('indent_size', 4);
-  this.indent_char = this._get_characters('indent_char', ' ');
-  this.indent_level = this._get_number('indent_level');
-
-  this.preserve_newlines = this._get_boolean('preserve_newlines', true);
-  this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);
-  if (!this.preserve_newlines) {
-    this.max_preserve_newlines = 0;
-  }
-
-  this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\t');
-  if (this.indent_with_tabs) {
-    this.indent_char = '\t';
-
-    // indent_size behavior changed after 1.8.6
-    // It used to be that indent_size would be
-    // set to 1 for indent_with_tabs. That is no longer needed and
-    // actually doesn't make sense - why not use spaces? Further,
-    // that might produce unexpected behavior - tabs being used
-    // for single-column alignment. So, when indent_with_tabs is true
-    // and indent_size is 1, reset indent_size to 4.
-    if (this.indent_size === 1) {
-      this.indent_size = 4;
-    }
-  }
-
-  // Backwards compat with 1.3.x
-  this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));
-
-  this.indent_empty_lines = this._get_boolean('indent_empty_lines');
-
-  // valid templating languages ['django', 'erb', 'handlebars', 'php']
-  // For now, 'auto' = all off for javascript, all on for html (and inline javascript).
-  // other values ignored
-  this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);
-}
-
-Options.prototype._get_array = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = default_value || [];
-  if (typeof option_value === 'object') {
-    if (option_value !== null && typeof option_value.concat === 'function') {
-      result = option_value.concat();
-    }
-  } else if (typeof option_value === 'string') {
-    result = option_value.split(/[^a-zA-Z0-9_\/\-]+/);
-  }
-  return result;
-};
-
-Options.prototype._get_boolean = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = option_value === undefined ? !!default_value : !!option_value;
-  return result;
-};
-
-Options.prototype._get_characters = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  var result = default_value || '';
-  if (typeof option_value === 'string') {
-    result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t');
-  }
-  return result;
-};
-
-Options.prototype._get_number = function(name, default_value) {
-  var option_value = this.raw_options[name];
-  default_value = parseInt(default_value, 10);
-  if (isNaN(default_value)) {
-    default_value = 0;
-  }
-  var result = parseInt(option_value, 10);
-  if (isNaN(result)) {
-    result = default_value;
-  }
-  return result;
-};
-
-Options.prototype._get_selection = function(name, selection_list, default_value) {
-  var result = this._get_selection_list(name, selection_list, default_value);
-  if (result.length !== 1) {
-    throw new Error(
-      "Invalid Option Value: The option '" + name + "' can only be one of the following values:\n" +
-      selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
-  }
-
-  return result[0];
-};
-
-
-Options.prototype._get_selection_list = function(name, selection_list, default_value) {
-  if (!selection_list || selection_list.length === 0) {
-    throw new Error("Selection list cannot be empty.");
-  }
-
-  default_value = default_value || [selection_list[0]];
-  if (!this._is_valid_selection(default_value, selection_list)) {
-    throw new Error("Invalid Default Value!");
-  }
-
-  var result = this._get_array(name, default_value);
-  if (!this._is_valid_selection(result, selection_list)) {
-    throw new Error(
-      "Invalid Option Value: The option '" + name + "' can contain only the following values:\n" +
-      selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
-  }
-
-  return result;
-};
-
-Options.prototype._is_valid_selection = function(result, selection_list) {
-  return result.length && selection_list.length &&
-    !result.some(function(item) { return selection_list.indexOf(item) === -1; });
-};
-
-
-// merges child options up with the parent options object
-// Example: obj = {a: 1, b: {a: 2}}
-//          mergeOpts(obj, 'b')
-//
-//          Returns: {a: 2}
-function _mergeOpts(allOptions, childFieldName) {
-  var finalOpts = {};
-  allOptions = _normalizeOpts(allOptions);
-  var name;
-
-  for (name in allOptions) {
-    if (name !== childFieldName) {
-      finalOpts[name] = allOptions[name];
-    }
-  }
-
-  //merge in the per type settings for the childFieldName
-  if (childFieldName && allOptions[childFieldName]) {
-    for (name in allOptions[childFieldName]) {
-      finalOpts[name] = allOptions[childFieldName][name];
-    }
-  }
-  return finalOpts;
-}
-
-function _normalizeOpts(options) {
-  var convertedOpts = {};
-  var key;
-
-  for (key in options) {
-    var newKey = key.replace(/-/g, "_");
-    convertedOpts[newKey] = options[key];
-  }
-  return convertedOpts;
-}
-
-module.exports.Options = Options;
-module.exports.normalizeOpts = _normalizeOpts;
-module.exports.mergeOpts = _mergeOpts;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var InputScanner = __webpack_require__(8).InputScanner;
-var BaseTokenizer = __webpack_require__(9).Tokenizer;
-var BASETOKEN = __webpack_require__(9).TOKEN;
-var Directives = __webpack_require__(13).Directives;
-var acorn = __webpack_require__(4);
-var Pattern = __webpack_require__(12).Pattern;
-var TemplatablePattern = __webpack_require__(14).TemplatablePattern;
-
-
-function in_array(what, arr) {
-  return arr.indexOf(what) !== -1;
-}
-
-
-var TOKEN = {
-  START_EXPR: 'TK_START_EXPR',
-  END_EXPR: 'TK_END_EXPR',
-  START_BLOCK: 'TK_START_BLOCK',
-  END_BLOCK: 'TK_END_BLOCK',
-  WORD: 'TK_WORD',
-  RESERVED: 'TK_RESERVED',
-  SEMICOLON: 'TK_SEMICOLON',
-  STRING: 'TK_STRING',
-  EQUALS: 'TK_EQUALS',
-  OPERATOR: 'TK_OPERATOR',
-  COMMA: 'TK_COMMA',
-  BLOCK_COMMENT: 'TK_BLOCK_COMMENT',
-  COMMENT: 'TK_COMMENT',
-  DOT: 'TK_DOT',
-  UNKNOWN: 'TK_UNKNOWN',
-  START: BASETOKEN.START,
-  RAW: BASETOKEN.RAW,
-  EOF: BASETOKEN.EOF
-};
-
-
-var directives_core = new Directives(/\/\*/, /\*\//);
-
-var number_pattern = /0[xX][0123456789abcdefABCDEF]*|0[oO][01234567]*|0[bB][01]*|\d+n|(?:\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/;
-
-var digit = /[0-9]/;
-
-// Dot "." must be distinguished from "..." and decimal
-var dot_pattern = /[^\d\.]/;
-
-var positionable_operators = (
-  ">>> === !== " +
-  "<< && >= ** != == <= >> || |> " +
-  "< / - + > : & % ? ^ | *").split(' ');
-
-// IMPORTANT: this must be sorted longest to shortest or tokenizing many not work.
-// Also, you must update possitionable operators separately from punct
-var punct =
-  ">>>= " +
-  "... >>= <<= === >>> !== **= " +
-  "=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= |> " +
-  "= ! ? > < : / ^ - + * & % ~ |";
-
-punct = punct.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&");
-// ?. but not if followed by a number
-punct = '\\?\\.(?!\\d) ' + punct;
-punct = punct.replace(/ /g, '|');
-
-var punct_pattern = new RegExp(punct);
-
-// words which should always start on new line.
-var line_starters = 'continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export'.split(',');
-var reserved_words = line_starters.concat(['do', 'in', 'of', 'else', 'get', 'set', 'new', 'catch', 'finally', 'typeof', 'yield', 'async', 'await', 'from', 'as']);
-var reserved_word_pattern = new RegExp('^(?:' + reserved_words.join('|') + ')$');
-
-// var template_pattern = /(?:(?:<\?php|<\?=)[\s\S]*?\?>)|(?:<%[\s\S]*?%>)/g;
-
-var in_html_comment;
-
-var Tokenizer = function(input_string, options) {
-  BaseTokenizer.call(this, input_string, options);
-
-  this._patterns.whitespace = this._patterns.whitespace.matching(
-    /\u00A0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff/.source,
-    /\u2028\u2029/.source);
-
-  var pattern_reader = new Pattern(this._input);
-  var templatable = new TemplatablePattern(this._input)
-    .read_options(this._options);
-
-  this.__patterns = {
-    template: templatable,
-    identifier: templatable.starting_with(acorn.identifier).matching(acorn.identifierMatch),
-    number: pattern_reader.matching(number_pattern),
-    punct: pattern_reader.matching(punct_pattern),
-    // comment ends just before nearest linefeed or end of file
-    comment: pattern_reader.starting_with(/\/\//).until(/[\n\r\u2028\u2029]/),
-    //  /* ... */ comment ends with nearest */ or end of file
-    block_comment: pattern_reader.starting_with(/\/\*/).until_after(/\*\//),
-    html_comment_start: pattern_reader.matching(/<!--/),
-    html_comment_end: pattern_reader.matching(/-->/),
-    include: pattern_reader.starting_with(/#include/).until_after(acorn.lineBreak),
-    shebang: pattern_reader.starting_with(/#!/).until_after(acorn.lineBreak),
-    xml: pattern_reader.matching(/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/),
-    single_quote: templatable.until(/['\\\n\r\u2028\u2029]/),
-    double_quote: templatable.until(/["\\\n\r\u2028\u2029]/),
-    template_text: templatable.until(/[`\\$]/),
-    template_expression: templatable.until(/[`}\\]/)
-  };
-
-};
-Tokenizer.prototype = new BaseTokenizer();
-
-Tokenizer.prototype._is_comment = function(current_token) {
-  return current_token.type === TOKEN.COMMENT || current_token.type === TOKEN.BLOCK_COMMENT || current_token.type === TOKEN.UNKNOWN;
-};
-
-Tokenizer.prototype._is_opening = function(current_token) {
-  return current_token.type === TOKEN.START_BLOCK || current_token.type === TOKEN.START_EXPR;
-};
-
-Tokenizer.prototype._is_closing = function(current_token, open_token) {
-  return (current_token.type === TOKEN.END_BLOCK || current_token.type === TOKEN.END_EXPR) &&
-    (open_token && (
-      (current_token.text === ']' && open_token.text === '[') ||
-      (current_token.text === ')' && open_token.text === '(') ||
-      (current_token.text === '}' && open_token.text === '{')));
-};
-
-Tokenizer.prototype._reset = function() {
-  in_html_comment = false;
-};
-
-Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
-  var token = null;
-  this._readWhitespace();
-  var c = this._input.peek();
-
-  if (c === null) {
-    return this._create_token(TOKEN.EOF, '');
-  }
-
-  token = token || this._read_non_javascript(c);
-  token = token || this._read_string(c);
-  token = token || this._read_word(previous_token);
-  token = token || this._read_singles(c);
-  token = token || this._read_comment(c);
-  token = token || this._read_regexp(c, previous_token);
-  token = token || this._read_xml(c, previous_token);
-  token = token || this._read_punctuation();
-  token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());
-
-  return token;
-};
-
-Tokenizer.prototype._read_word = function(previous_token) {
-  var resulting_string;
-  resulting_string = this.__patterns.identifier.read();
-  if (resulting_string !== '') {
-    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\n');
-    if (!(previous_token.type === TOKEN.DOT ||
-        (previous_token.type === TOKEN.RESERVED && (previous_token.text === 'set' || previous_token.text === 'get'))) &&
-      reserved_word_pattern.test(resulting_string)) {
-      if (resulting_string === 'in' || resulting_string === 'of') { // hack for 'in' and 'of' operators
-        return this._create_token(TOKEN.OPERATOR, resulting_string);
-      }
-      return this._create_token(TOKEN.RESERVED, resulting_string);
-    }
-    return this._create_token(TOKEN.WORD, resulting_string);
-  }
-
-  resulting_string = this.__patterns.number.read();
-  if (resulting_string !== '') {
-    return this._create_token(TOKEN.WORD, resulting_string);
-  }
-};
-
-Tokenizer.prototype._read_singles = function(c) {
-  var token = null;
-  if (c === '(' || c === '[') {
-    token = this._create_token(TOKEN.START_EXPR, c);
-  } else if (c === ')' || c === ']') {
-    token = this._create_token(TOKEN.END_EXPR, c);
-  } else if (c === '{') {
-    token = this._create_token(TOKEN.START_BLOCK, c);
-  } else if (c === '}') {
-    token = this._create_token(TOKEN.END_BLOCK, c);
-  } else if (c === ';') {
-    token = this._create_token(TOKEN.SEMICOLON, c);
-  } else if (c === '.' && dot_pattern.test(this._input.peek(1))) {
-    token = this._create_token(TOKEN.DOT, c);
-  } else if (c === ',') {
-    token = this._create_token(TOKEN.COMMA, c);
-  }
-
-  if (token) {
-    this._input.next();
-  }
-  return token;
-};
-
-Tokenizer.prototype._read_punctuation = function() {
-  var resulting_string = this.__patterns.punct.read();
-
-  if (resulting_string !== '') {
-    if (resulting_string === '=') {
-      return this._create_token(TOKEN.EQUALS, resulting_string);
-    } else if (resulting_string === '?.') {
-      return this._create_token(TOKEN.DOT, resulting_string);
-    } else {
-      return this._create_token(TOKEN.OPERATOR, resulting_string);
-    }
-  }
-};
-
-Tokenizer.prototype._read_non_javascript = function(c) {
-  var resulting_string = '';
-
-  if (c === '#') {
-    if (this._is_first_token()) {
-      resulting_string = this.__patterns.shebang.read();
-
-      if (resulting_string) {
-        return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
-      }
-    }
-
-    // handles extendscript #includes
-    resulting_string = this.__patterns.include.read();
-
-    if (resulting_string) {
-      return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
-    }
-
-    c = this._input.next();
-
-    // Spidermonkey-specific sharp variables for circular references. Considered obsolete.
-    var sharp = '#';
-    if (this._input.hasNext() && this._input.testChar(digit)) {
-      do {
-        c = this._input.next();
-        sharp += c;
-      } while (this._input.hasNext() && c !== '#' && c !== '=');
-      if (c === '#') {
-        //
-      } else if (this._input.peek() === '[' && this._input.peek(1) === ']') {
-        sharp += '[]';
-        this._input.next();
-        this._input.next();
-      } else if (this._input.peek() === '{' && this._input.peek(1) === '}') {
-        sharp += '{}';
-        this._input.next();
-        this._input.next();
-      }
-      return this._create_token(TOKEN.WORD, sharp);
-    }
-
-    this._input.back();
-
-  } else if (c === '<' && this._is_first_token()) {
-    resulting_string = this.__patterns.html_comment_start.read();
-    if (resulting_string) {
-      while (this._input.hasNext() && !this._input.testChar(acorn.newline)) {
-        resulting_string += this._input.next();
-      }
-      in_html_comment = true;
-      return this._create_token(TOKEN.COMMENT, resulting_string);
-    }
-  } else if (in_html_comment && c === '-') {
-    resulting_string = this.__patterns.html_comment_end.read();
-    if (resulting_string) {
-      in_html_comment = false;
-      return this._create_token(TOKEN.COMMENT, resulting_string);
-    }
-  }
-
-  return null;
-};
-
-Tokenizer.prototype._read_comment = function(c) {
-  var token = null;
-  if (c === '/') {
-    var comment = '';
-    if (this._input.peek(1) === '*') {
-      // peek for comment /* ... */
-      comment = this.__patterns.block_comment.read();
-      var directives = directives_core.get_directives(comment);
-      if (directives && directives.ignore === 'start') {
-        comment += directives_core.readIgnored(this._input);
-      }
-      comment = comment.replace(acorn.allLineBreaks, '\n');
-      token = this._create_token(TOKEN.BLOCK_COMMENT, comment);
-      token.directives = directives;
-    } else if (this._input.peek(1) === '/') {
-      // peek for comment // ...
-      comment = this.__patterns.comment.read();
-      token = this._create_token(TOKEN.COMMENT, comment);
-    }
-  }
-  return token;
-};
-
-Tokenizer.prototype._read_string = function(c) {
-  if (c === '`' || c === "'" || c === '"') {
-    var resulting_string = this._input.next();
-    this.has_char_escapes = false;
-
-    if (c === '`') {
-      resulting_string += this._read_string_recursive('`', true, '${');
-    } else {
-      resulting_string += this._read_string_recursive(c);
-    }
-
-    if (this.has_char_escapes && this._options.unescape_strings) {
-      resulting_string = unescape_string(resulting_string);
-    }
-
-    if (this._input.peek() === c) {
-      resulting_string += this._input.next();
-    }
-
-    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\n');
-
-    return this._create_token(TOKEN.STRING, resulting_string);
-  }
-
-  return null;
-};
-
-Tokenizer.prototype._allow_regexp_or_xml = function(previous_token) {
-  // regex and xml can only appear in specific locations during parsing
-  return (previous_token.type === TOKEN.RESERVED && in_array(previous_token.text, ['return', 'case', 'throw', 'else', 'do', 'typeof', 'yield'])) ||
-    (previous_token.type === TOKEN.END_EXPR && previous_token.text === ')' &&
-      previous_token.opened.previous.type === TOKEN.RESERVED && in_array(previous_token.opened.previous.text, ['if', 'while', 'for'])) ||
-    (in_array(previous_token.type, [TOKEN.COMMENT, TOKEN.START_EXPR, TOKEN.START_BLOCK, TOKEN.START,
-      TOKEN.END_BLOCK, TOKEN.OPERATOR, TOKEN.EQUALS, TOKEN.EOF, TOKEN.SEMICOLON, TOKEN.COMMA
-    ]));
-};
-
-Tokenizer.prototype._read_regexp = function(c, previous_token) {
-
-  if (c === '/' && this._allow_regexp_or_xml(previous_token)) {
-    // handle regexp
-    //
-    var resulting_string = this._input.next();
-    var esc = false;
-
-    var in_char_class = false;
-    while (this._input.hasNext() &&
-      ((esc || in_char_class || this._input.peek() !== c) &&
-        !this._input.testChar(acorn.newline))) {
-      resulting_string += this._input.peek();
-      if (!esc) {
-        esc = this._input.peek() === '\\';
-        if (this._input.peek() === '[') {
-          in_char_class = true;
-        } else if (this._input.peek() === ']') {
-          in_char_class = false;
-        }
-      } else {
-        esc = false;
-      }
-      this._input.next();
-    }
-
-    if (this._input.peek() === c) {
-      resulting_string += this._input.next();
-
-      // regexps may have modifiers /regexp/MOD , so fetch those, too
-      // Only [gim] are valid, but if the user puts in garbage, do what we can to take it.
-      resulting_string += this._input.read(acorn.identifier);
-    }
-    return this._create_token(TOKEN.STRING, resulting_string);
-  }
-  return null;
-};
-
-Tokenizer.prototype._read_xml = function(c, previous_token) {
-
-  if (this._options.e4x && c === "<" && this._allow_regexp_or_xml(previous_token)) {
-    var xmlStr = '';
-    var match = this.__patterns.xml.read_match();
-    // handle e4x xml literals
-    //
-    if (match) {
-      // Trim root tag to attempt to
-      var rootTag = match[2].replace(/^{\s+/, '{').replace(/\s+}$/, '}');
-      var isCurlyRoot = rootTag.indexOf('{') === 0;
-      var depth = 0;
-      while (match) {
-        var isEndTag = !!match[1];
-        var tagName = match[2];
-        var isSingletonTag = (!!match[match.length - 1]) || (tagName.slice(0, 8) === "![CDATA[");
-        if (!isSingletonTag &&
-          (tagName === rootTag || (isCurlyRoot && tagName.replace(/^{\s+/, '{').replace(/\s+}$/, '}')))) {
-          if (isEndTag) {
-            --depth;
-          } else {
-            ++depth;
-          }
-        }
-        xmlStr += match[0];
-        if (depth <= 0) {
-          break;
-        }
-        match = this.__patterns.xml.read_match();
-      }
-      // if we didn't close correctly, keep unformatted.
-      if (!match) {
-        xmlStr += this._input.match(/[\s\S]*/g)[0];
-      }
-      xmlStr = xmlStr.replace(acorn.allLineBreaks, '\n');
-      return this._create_token(TOKEN.STRING, xmlStr);
-    }
-  }
-
-  return null;
-};
-
-function unescape_string(s) {
-  // You think that a regex would work for this
-  // return s.replace(/\\x([0-9a-f]{2})/gi, function(match, val) {
-  //         return String.fromCharCode(parseInt(val, 16));
-  //     })
-  // However, dealing with '\xff', '\\xff', '\\\xff' makes this more fun.
-  var out = '',
-    escaped = 0;
-
-  var input_scan = new InputScanner(s);
-  var matched = null;
-
-  while (input_scan.hasNext()) {
-    // Keep any whitespace, non-slash characters
-    // also keep slash pairs.
-    matched = input_scan.match(/([\s]|[^\\]|\\\\)+/g);
-
-    if (matched) {
-      out += matched[0];
-    }
-
-    if (input_scan.peek() === '\\') {
-      input_scan.next();
-      if (input_scan.peek() === 'x') {
-        matched = input_scan.match(/x([0-9A-Fa-f]{2})/g);
-      } else if (input_scan.peek() === 'u') {
-        matched = input_scan.match(/u([0-9A-Fa-f]{4})/g);
-      } else {
-        out += '\\';
-        if (input_scan.hasNext()) {
-          out += input_scan.next();
-        }
-        continue;
-      }
-
-      // If there's some error decoding, return the original string
-      if (!matched) {
-        return s;
-      }
-
-      escaped = parseInt(matched[1], 16);
-
-      if (escaped > 0x7e && escaped <= 0xff && matched[0].indexOf('x') === 0) {
-        // we bail out on \x7f..\xff,
-        // leaving whole string escaped,
-        // as it's probably completely binary
-        return s;
-      } else if (escaped >= 0x00 && escaped < 0x20) {
-        // leave 0x00...0x1f escaped
-        out += '\\' + matched[0];
-        continue;
-      } else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {
-        // single-quote, apostrophe, backslash - escape these
-        out += '\\' + String.fromCharCode(escaped);
-      } else {
-        out += String.fromCharCode(escaped);
-      }
-    }
-  }
-
-  return out;
-}
-
-// handle string
-//
-Tokenizer.prototype._read_string_recursive = function(delimiter, allow_unescaped_newlines, start_sub) {
-  var current_char;
-  var pattern;
-  if (delimiter === '\'') {
-    pattern = this.__patterns.single_quote;
-  } else if (delimiter === '"') {
-    pattern = this.__patterns.double_quote;
-  } else if (delimiter === '`') {
-    pattern = this.__patterns.template_text;
-  } else if (delimiter === '}') {
-    pattern = this.__patterns.template_expression;
-  }
-
-  var resulting_string = pattern.read();
-  var next = '';
-  while (this._input.hasNext()) {
-    next = this._input.next();
-    if (next === delimiter ||
-      (!allow_unescaped_newlines && acorn.newline.test(next))) {
-      this._input.back();
-      break;
-    } else if (next === '\\' && this._input.hasNext()) {
-      current_char = this._input.peek();
-
-      if (current_char === 'x' || current_char === 'u') {
-        this.has_char_escapes = true;
-      } else if (current_char === '\r' && this._input.peek(1) === '\n') {
-        this._input.next();
-      }
-      next += this._input.next();
-    } else if (start_sub) {
-      if (start_sub === '${' && next === '$' && this._input.peek() === '{') {
-        next += this._input.next();
-      }
-
-      if (start_sub === next) {
-        if (delimiter === '`') {
-          next += this._read_string_recursive('}', allow_unescaped_newlines, '`');
-        } else {
-          next += this._read_string_recursive('`', allow_unescaped_newlines, '${');
-        }
-        if (this._input.hasNext()) {
-          next += this._input.next();
-        }
-      }
-    }
-    next += pattern.read();
-    resulting_string += next;
-  }
-
-  return resulting_string;
-};
-
-module.exports.Tokenizer = Tokenizer;
-module.exports.TOKEN = TOKEN;
-module.exports.positionable_operators = positionable_operators.slice();
-module.exports.line_starters = line_starters.slice();
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');
-
-function InputScanner(input_string) {
-  this.__input = input_string || '';
-  this.__input_length = this.__input.length;
-  this.__position = 0;
-}
-
-InputScanner.prototype.restart = function() {
-  this.__position = 0;
-};
-
-InputScanner.prototype.back = function() {
-  if (this.__position > 0) {
-    this.__position -= 1;
-  }
-};
-
-InputScanner.prototype.hasNext = function() {
-  return this.__position < this.__input_length;
-};
-
-InputScanner.prototype.next = function() {
-  var val = null;
-  if (this.hasNext()) {
-    val = this.__input.charAt(this.__position);
-    this.__position += 1;
-  }
-  return val;
-};
-
-InputScanner.prototype.peek = function(index) {
-  var val = null;
-  index = index || 0;
-  index += this.__position;
-  if (index >= 0 && index < this.__input_length) {
-    val = this.__input.charAt(index);
-  }
-  return val;
-};
-
-// This is a JavaScript only helper function (not in python)
-// Javascript doesn't have a match method
-// and not all implementation support "sticky" flag.
-// If they do not support sticky then both this.match() and this.test() method
-// must get the match and check the index of the match.
-// If sticky is supported and set, this method will use it.
-// Otherwise it will check that global is set, and fall back to the slower method.
-InputScanner.prototype.__match = function(pattern, index) {
-  pattern.lastIndex = index;
-  var pattern_match = pattern.exec(this.__input);
-
-  if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {
-    if (pattern_match.index !== index) {
-      pattern_match = null;
-    }
-  }
-
-  return pattern_match;
-};
-
-InputScanner.prototype.test = function(pattern, index) {
-  index = index || 0;
-  index += this.__position;
-
-  if (index >= 0 && index < this.__input_length) {
-    return !!this.__match(pattern, index);
-  } else {
-    return false;
-  }
-};
-
-InputScanner.prototype.testChar = function(pattern, index) {
-  // test one character regex match
-  var val = this.peek(index);
-  pattern.lastIndex = 0;
-  return val !== null && pattern.test(val);
-};
-
-InputScanner.prototype.match = function(pattern) {
-  var pattern_match = this.__match(pattern, this.__position);
-  if (pattern_match) {
-    this.__position += pattern_match[0].length;
-  } else {
-    pattern_match = null;
-  }
-  return pattern_match;
-};
-
-InputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {
-  var val = '';
-  var match;
-  if (starting_pattern) {
-    match = this.match(starting_pattern);
-    if (match) {
-      val += match[0];
-    }
-  }
-  if (until_pattern && (match || !starting_pattern)) {
-    val += this.readUntil(until_pattern, until_after);
-  }
-  return val;
-};
-
-InputScanner.prototype.readUntil = function(pattern, until_after) {
-  var val = '';
-  var match_index = this.__position;
-  pattern.lastIndex = this.__position;
-  var pattern_match = pattern.exec(this.__input);
-  if (pattern_match) {
-    match_index = pattern_match.index;
-    if (until_after) {
-      match_index += pattern_match[0].length;
-    }
-  } else {
-    match_index = this.__input_length;
-  }
-
-  val = this.__input.substring(this.__position, match_index);
-  this.__position = match_index;
-  return val;
-};
-
-InputScanner.prototype.readUntilAfter = function(pattern) {
-  return this.readUntil(pattern, true);
-};
-
-InputScanner.prototype.get_regexp = function(pattern, match_from) {
-  var result = null;
-  var flags = 'g';
-  if (match_from && regexp_has_sticky) {
-    flags = 'y';
-  }
-  // strings are converted to regexp
-  if (typeof pattern === "string" && pattern !== '') {
-    // result = new RegExp(pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), flags);
-    result = new RegExp(pattern, flags);
-  } else if (pattern) {
-    result = new RegExp(pattern.source, flags);
-  }
-  return result;
-};
-
-InputScanner.prototype.get_literal_regexp = function(literal_string) {
-  return RegExp(literal_string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
-};
-
-/* css beautifier legacy helpers */
-InputScanner.prototype.peekUntilAfter = function(pattern) {
-  var start = this.__position;
-  var val = this.readUntilAfter(pattern);
-  this.__position = start;
-  return val;
-};
-
-InputScanner.prototype.lookBack = function(testVal) {
-  var start = this.__position - 1;
-  return start >= testVal.length && this.__input.substring(start - testVal.length, start)
-    .toLowerCase() === testVal;
-};
-
-module.exports.InputScanner = InputScanner;
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var InputScanner = __webpack_require__(8).InputScanner;
-var Token = __webpack_require__(3).Token;
-var TokenStream = __webpack_require__(10).TokenStream;
-var WhitespacePattern = __webpack_require__(11).WhitespacePattern;
-
-var TOKEN = {
-  START: 'TK_START',
-  RAW: 'TK_RAW',
-  EOF: 'TK_EOF'
-};
-
-var Tokenizer = function(input_string, options) {
-  this._input = new InputScanner(input_string);
-  this._options = options || {};
-  this.__tokens = null;
-
-  this._patterns = {};
-  this._patterns.whitespace = new WhitespacePattern(this._input);
-};
-
-Tokenizer.prototype.tokenize = function() {
-  this._input.restart();
-  this.__tokens = new TokenStream();
-
-  this._reset();
-
-  var current;
-  var previous = new Token(TOKEN.START, '');
-  var open_token = null;
-  var open_stack = [];
-  var comments = new TokenStream();
-
-  while (previous.type !== TOKEN.EOF) {
-    current = this._get_next_token(previous, open_token);
-    while (this._is_comment(current)) {
-      comments.add(current);
-      current = this._get_next_token(previous, open_token);
-    }
-
-    if (!comments.isEmpty()) {
-      current.comments_before = comments;
-      comments = new TokenStream();
-    }
-
-    current.parent = open_token;
-
-    if (this._is_opening(current)) {
-      open_stack.push(open_token);
-      open_token = current;
-    } else if (open_token && this._is_closing(current, open_token)) {
-      current.opened = open_token;
-      open_token.closed = current;
-      open_token = open_stack.pop();
-      current.parent = open_token;
-    }
-
-    current.previous = previous;
-    previous.next = current;
-
-    this.__tokens.add(current);
-    previous = current;
-  }
-
-  return this.__tokens;
-};
-
-
-Tokenizer.prototype._is_first_token = function() {
-  return this.__tokens.isEmpty();
-};
-
-Tokenizer.prototype._reset = function() {};
-
-Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
-  this._readWhitespace();
-  var resulting_string = this._input.read(/.+/g);
-  if (resulting_string) {
-    return this._create_token(TOKEN.RAW, resulting_string);
-  } else {
-    return this._create_token(TOKEN.EOF, '');
-  }
-};
-
-Tokenizer.prototype._is_comment = function(current_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._is_opening = function(current_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._is_closing = function(current_token, open_token) { // jshint unused:false
-  return false;
-};
-
-Tokenizer.prototype._create_token = function(type, text) {
-  var token = new Token(type, text,
-    this._patterns.whitespace.newline_count,
-    this._patterns.whitespace.whitespace_before_token);
-  return token;
-};
-
-Tokenizer.prototype._readWhitespace = function() {
-  return this._patterns.whitespace.read();
-};
-
-
-
-module.exports.Tokenizer = Tokenizer;
-module.exports.TOKEN = TOKEN;
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function TokenStream(parent_token) {
-  // private
-  this.__tokens = [];
-  this.__tokens_length = this.__tokens.length;
-  this.__position = 0;
-  this.__parent_token = parent_token;
-}
-
-TokenStream.prototype.restart = function() {
-  this.__position = 0;
-};
-
-TokenStream.prototype.isEmpty = function() {
-  return this.__tokens_length === 0;
-};
-
-TokenStream.prototype.hasNext = function() {
-  return this.__position < this.__tokens_length;
-};
-
-TokenStream.prototype.next = function() {
-  var val = null;
-  if (this.hasNext()) {
-    val = this.__tokens[this.__position];
-    this.__position += 1;
-  }
-  return val;
-};
-
-TokenStream.prototype.peek = function(index) {
-  var val = null;
-  index = index || 0;
-  index += this.__position;
-  if (index >= 0 && index < this.__tokens_length) {
-    val = this.__tokens[index];
-  }
-  return val;
-};
-
-TokenStream.prototype.add = function(token) {
-  if (this.__parent_token) {
-    token.parent = this.__parent_token;
-  }
-  this.__tokens.push(token);
-  this.__tokens_length += 1;
-};
-
-module.exports.TokenStream = TokenStream;
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var Pattern = __webpack_require__(12).Pattern;
-
-function WhitespacePattern(input_scanner, parent) {
-  Pattern.call(this, input_scanner, parent);
-  if (parent) {
-    this._line_regexp = this._input.get_regexp(parent._line_regexp);
-  } else {
-    this.__set_whitespace_patterns('', '');
-  }
-
-  this.newline_count = 0;
-  this.whitespace_before_token = '';
-}
-WhitespacePattern.prototype = new Pattern();
-
-WhitespacePattern.prototype.__set_whitespace_patterns = function(whitespace_chars, newline_chars) {
-  whitespace_chars += '\\t ';
-  newline_chars += '\\n\\r';
-
-  this._match_pattern = this._input.get_regexp(
-    '[' + whitespace_chars + newline_chars + ']+', true);
-  this._newline_regexp = this._input.get_regexp(
-    '\\r\\n|[' + newline_chars + ']');
-};
-
-WhitespacePattern.prototype.read = function() {
-  this.newline_count = 0;
-  this.whitespace_before_token = '';
-
-  var resulting_string = this._input.read(this._match_pattern);
-  if (resulting_string === ' ') {
-    this.whitespace_before_token = ' ';
-  } else if (resulting_string) {
-    var matches = this.__split(this._newline_regexp, resulting_string);
-    this.newline_count = matches.length - 1;
-    this.whitespace_before_token = matches[this.newline_count];
-  }
-
-  return resulting_string;
-};
-
-WhitespacePattern.prototype.matching = function(whitespace_chars, newline_chars) {
-  var result = this._create();
-  result.__set_whitespace_patterns(whitespace_chars, newline_chars);
-  result._update();
-  return result;
-};
-
-WhitespacePattern.prototype._create = function() {
-  return new WhitespacePattern(this._input, this);
-};
-
-WhitespacePattern.prototype.__split = function(regexp, input_string) {
-  regexp.lastIndex = 0;
-  var start_index = 0;
-  var result = [];
-  var next_match = regexp.exec(input_string);
-  while (next_match) {
-    result.push(input_string.substring(start_index, next_match.index));
-    start_index = next_match.index + next_match[0].length;
-    next_match = regexp.exec(input_string);
-  }
-
-  if (start_index < input_string.length) {
-    result.push(input_string.substring(start_index, input_string.length));
-  } else {
-    result.push('');
-  }
-
-  return result;
-};
-
-
-
-module.exports.WhitespacePattern = WhitespacePattern;
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function Pattern(input_scanner, parent) {
-  this._input = input_scanner;
-  this._starting_pattern = null;
-  this._match_pattern = null;
-  this._until_pattern = null;
-  this._until_after = false;
-
-  if (parent) {
-    this._starting_pattern = this._input.get_regexp(parent._starting_pattern, true);
-    this._match_pattern = this._input.get_regexp(parent._match_pattern, true);
-    this._until_pattern = this._input.get_regexp(parent._until_pattern);
-    this._until_after = parent._until_after;
-  }
-}
-
-Pattern.prototype.read = function() {
-  var result = this._input.read(this._starting_pattern);
-  if (!this._starting_pattern || result) {
-    result += this._input.read(this._match_pattern, this._until_pattern, this._until_after);
-  }
-  return result;
-};
-
-Pattern.prototype.read_match = function() {
-  return this._input.match(this._match_pattern);
-};
-
-Pattern.prototype.until_after = function(pattern) {
-  var result = this._create();
-  result._until_after = true;
-  result._until_pattern = this._input.get_regexp(pattern);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.until = function(pattern) {
-  var result = this._create();
-  result._until_after = false;
-  result._until_pattern = this._input.get_regexp(pattern);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.starting_with = function(pattern) {
-  var result = this._create();
-  result._starting_pattern = this._input.get_regexp(pattern, true);
-  result._update();
-  return result;
-};
-
-Pattern.prototype.matching = function(pattern) {
-  var result = this._create();
-  result._match_pattern = this._input.get_regexp(pattern, true);
-  result._update();
-  return result;
-};
-
-Pattern.prototype._create = function() {
-  return new Pattern(this._input, this);
-};
-
-Pattern.prototype._update = function() {};
-
-module.exports.Pattern = Pattern;
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-function Directives(start_block_pattern, end_block_pattern) {
-  start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;
-  end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;
-  this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern, 'g');
-  this.__directive_pattern = / (\w+)[:](\w+)/g;
-
-  this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\sbeautify\signore:end\s/.source + end_block_pattern, 'g');
-}
-
-Directives.prototype.get_directives = function(text) {
-  if (!text.match(this.__directives_block_pattern)) {
-    return null;
-  }
-
-  var directives = {};
-  this.__directive_pattern.lastIndex = 0;
-  var directive_match = this.__directive_pattern.exec(text);
-
-  while (directive_match) {
-    directives[directive_match[1]] = directive_match[2];
-    directive_match = this.__directive_pattern.exec(text);
-  }
-
-  return directives;
-};
-
-Directives.prototype.readIgnored = function(input) {
-  return input.readUntilAfter(this.__directives_end_ignore_pattern);
-};
-
-
-module.exports.Directives = Directives;
-
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*jshint node:true */
-/*
-
-  The MIT License (MIT)
-
-  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation files
-  (the "Software"), to deal in the Software without restriction,
-  including without limitation the rights to use, copy, modify, merge,
-  publish, distribute, sublicense, and/or sell copies of the Software,
-  and to permit persons to whom the Software is furnished to do so,
-  subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-
-
-var Pattern = __webpack_require__(12).Pattern;
-
-
-var template_names = {
-  django: false,
-  erb: false,
-  handlebars: false,
-  php: false
-};
-
-// This lets templates appear anywhere we would do a readUntil
-// The cost is higher but it is pay to play.
-function TemplatablePattern(input_scanner, parent) {
-  Pattern.call(this, input_scanner, parent);
-  this.__template_pattern = null;
-  this._disabled = Object.assign({}, template_names);
-  this._excluded = Object.assign({}, template_names);
-
-  if (parent) {
-    this.__template_pattern = this._input.get_regexp(parent.__template_pattern);
-    this._excluded = Object.assign(this._excluded, parent._excluded);
-    this._disabled = Object.assign(this._disabled, parent._disabled);
-  }
-  var pattern = new Pattern(input_scanner);
-  this.__patterns = {
-    handlebars_comment: pattern.starting_with(/{{!--/).until_after(/--}}/),
-    handlebars_unescaped: pattern.starting_with(/{{{/).until_after(/}}}/),
-    handlebars: pattern.starting_with(/{{/).until_after(/}}/),
-    php: pattern.starting_with(/<\?(?:[=]|php)/).until_after(/\?>/),
-    erb: pattern.starting_with(/<%[^%]/).until_after(/[^%]%>/),
-    // django coflicts with handlebars a bit.
-    django: pattern.starting_with(/{%/).until_after(/%}/),
-    django_value: pattern.starting_with(/{{/).until_after(/}}/),
-    django_comment: pattern.starting_with(/{#/).until_after(/#}/)
-  };
-}
-TemplatablePattern.prototype = new Pattern();
-
-TemplatablePattern.prototype._create = function() {
-  return new TemplatablePattern(this._input, this);
-};
-
-TemplatablePattern.prototype._update = function() {
-  this.__set_templated_pattern();
-};
-
-TemplatablePattern.prototype.disable = function(language) {
-  var result = this._create();
-  result._disabled[language] = true;
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.read_options = function(options) {
-  var result = this._create();
-  for (var language in template_names) {
-    result._disabled[language] = options.templating.indexOf(language) === -1;
-  }
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.exclude = function(language) {
-  var result = this._create();
-  result._excluded[language] = true;
-  result._update();
-  return result;
-};
-
-TemplatablePattern.prototype.read = function() {
-  var result = '';
-  if (this._match_pattern) {
-    result = this._input.read(this._starting_pattern);
-  } else {
-    result = this._input.read(this._starting_pattern, this.__template_pattern);
-  }
-  var next = this._read_template();
-  while (next) {
-    if (this._match_pattern) {
-      next += this._input.read(this._match_pattern);
-    } else {
-      next += this._input.readUntil(this.__template_pattern);
-    }
-    result += next;
-    next = this._read_template();
-  }
-
-  if (this._until_after) {
-    result += this._input.readUntilAfter(this._until_pattern);
-  }
-  return result;
-};
-
-TemplatablePattern.prototype.__set_templated_pattern = function() {
-  var items = [];
-
-  if (!this._disabled.php) {
-    items.push(this.__patterns.php._starting_pattern.source);
-  }
-  if (!this._disabled.handlebars) {
-    items.push(this.__patterns.handlebars._starting_pattern.source);
-  }
-  if (!this._disabled.erb) {
-    items.push(this.__patterns.erb._starting_pattern.source);
-  }
-  if (!this._disabled.django) {
-    items.push(this.__patterns.django._starting_pattern.source);
-    items.push(this.__patterns.django_value._starting_pattern.source);
-    items.push(this.__patterns.django_comment._starting_pattern.source);
-  }
-
-  if (this._until_pattern) {
-    items.push(this._until_pattern.source);
-  }
-  this.__template_pattern = this._input.get_regexp('(?:' + items.join('|') + ')');
-};
-
-TemplatablePattern.prototype._read_template = function() {
-  var resulting_string = '';
-  var c = this._input.peek();
-  if (c === '<') {
-    var peek1 = this._input.peek(1);
-    //if we're in a comment, do something special
-    // We treat all comments as literals, even more than preformatted tags
-    // we just look for the appropriate close tag
-    if (!this._disabled.php && !this._excluded.php && peek1 === '?') {
-      resulting_string = resulting_string ||
-        this.__patterns.php.read();
-    }
-    if (!this._disabled.erb && !this._excluded.erb && peek1 === '%') {
-      resulting_string = resulting_string ||
-        this.__patterns.erb.read();
-    }
-  } else if (c === '{') {
-    if (!this._disabled.handlebars && !this._excluded.handlebars) {
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars_comment.read();
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars_unescaped.read();
-      resulting_string = resulting_string ||
-        this.__patterns.handlebars.read();
-    }
-    if (!this._disabled.django) {
-      // django coflicts with handlebars a bit.
-      if (!this._excluded.django && !this._excluded.handlebars) {
-        resulting_string = resulting_string ||
-          this.__patterns.django_value.read();
-      }
-      if (!this._excluded.django) {
-        resulting_string = resulting_string ||
-          this.__patterns.django_comment.read();
-        resulting_string = resulting_string ||
-          this.__patterns.django.read();
-      }
-    }
-  }
-  return resulting_string;
-};
-
-
-module.exports.TemplatablePattern = TemplatablePattern;
-
-
-/***/ })
-/******/ ]);
-var js_beautify = legacy_beautify_js;
-/* Footer */
-if (typeof define === "function" && define.amd) {
-    // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )
-    define([], function() {
-        return { js_beautify: js_beautify };
-    });
-} else if (typeof exports !== "undefined") {
-    // Add support for CommonJS. Just put this file somewhere on your require.paths
-    // and you will be able to `var js_beautify = require("beautify").js_beautify`.
-    exports.js_beautify = js_beautify;
-} else if (typeof window !== "undefined") {
-    // If we're running a web page and don't have either of the above, add our one global
-    window.js_beautify = js_beautify;
-} else if (typeof global !== "undefined") {
-    // If we don't even have window, try global.
-    global.js_beautify = js_beautify;
-}
-
-}());
-
diff --git a/assets/js/plugins/cloudant.pagingcollection.js b/assets/js/plugins/cloudant.pagingcollection.js
deleted file mode 100644
index 0a63ffe..0000000
--- a/assets/js/plugins/cloudant.pagingcollection.js
+++ /dev/null
@@ -1,200 +0,0 @@
-// Licensed 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.
-
-import _ from 'lodash';
-import $ from 'jquery';
-import Backbone from "backbone";
-import app from '../../../app/app';
-
-//PagingCollection
-//----------------
-
-// A PagingCollection knows how to build appropriate requests to the
-// CouchDB-like server and how to fetch. The Collection will always contain a
-// single page of documents.
-
-export const PagingCollection = Backbone.Collection.extend({
-
-  // initialize parameters and page size
-  constructor: function() {
-    Backbone.Collection.apply(this, arguments);
-    this.configure.apply(this, arguments);
-  },
-
-  configure: function(collections, options) {
-    var querystring = _.result(this, "url").split("?")[1] || "";
-    this.paging = _.defaults((options.paging || {}), {
-      defaultParams: _.defaults({}, options.params, this._parseQueryString(querystring)),
-      hasNext: false,
-      hasPrevious: false,
-      params: {},
-      pageSize: 20,
-      direction: undefined
-    });
-
-    this.paging.params = _.clone(this.paging.defaultParams);
-    this.updateUrlQuery(this.paging.defaultParams);
-  },
-
-  calculateParams: function(currentParams, skipIncrement, limitIncrement) {
-
-    var params = _.clone(currentParams);
-    params.skip = (parseInt(currentParams.skip, 10) || 0) + skipIncrement;
-
-    // guard against hard limits
-    if (this.paging.defaultParams.limit) {
-      params.limit = Math.min(this.paging.defaultParams.limit, params.limit);
-    }
-    // request an extra row so we know that there are more results
-    params.limit = limitIncrement + 1;
-    // prevent illegal skip values
-    params.skip = Math.max(params.skip, 0);
-
-    return params;
-  },
-
-  pageSizeReset: function(pageSize, opts) {
-    var options = _.defaults((opts || {}), {fetch: true});
-    this.paging.direction = undefined;
-    this.paging.pageSize = pageSize;
-    this.paging.params = this.paging.defaultParams;
-    this.paging.params.limit = pageSize;
-    this.updateUrlQuery(this.paging.params);
-    if (options.fetch) {
-      return this.fetch();
-    }
-  },
-
-  _parseQueryString: function(uri) {
-    var queryString = decodeURI(uri).split(/&/);
-
-    return _.reduce(queryString, function (parsedQuery, item) {
-        var nameValue = item.split(/=/);
-        if (nameValue.length === 2) {
-          parsedQuery[nameValue[0]] = nameValue[1];
-        }
-
-        return parsedQuery;
-    }, {});
-  },
-
-  _iterate: function(offset, opts) {
-    var options = _.defaults((opts || {}), {fetch: true});
-
-    this.paging.params = this.calculateParams(this.paging.params, offset, this.paging.pageSize);
-
-    // Fetch the next page of documents
-    this.updateUrlQuery(this.paging.params);
-    if (options.fetch) {
-      return this.fetch({reset: true});
-    }
-  },
-
-  // `next` is called with the number of items for the next page.
-  // It returns the fetch promise.
-  next: function(options) {
-    this.paging.direction = "next";
-    return this._iterate(this.paging.pageSize, options);
-  },
-
-  // `previous` is called with the number of items for the previous page.
-  // It returns the fetch promise.
-  previous: function(options) {
-    this.paging.direction = "previous";
-    return this._iterate(0 - this.paging.pageSize, options);
-  },
-
-  shouldStringify: function (val) {
-    try {
-      JSON.parse(val);
-      return false;
-    } catch (e) {
-      return true;
-    }
-  },
-
-  // Encodes the parameters so that couchdb will understand them
-  // and then sets the url with the new url.
-  updateUrlQuery: function (params) {
-    var url = _.result(this, "url").split("?")[0];
-
-    _.each(['startkey', 'endkey', 'key'], (key) => {
-      if (_.has(params, key) && this.shouldStringify(params[key])) {
-        params[key] = JSON.stringify(params[key]);
-      }
-    });
-
-    this.url = url + '?' + app.utils.queryParams(params);
-  },
-
-  fetch: function () {
-    // if this is a fetch for the first time, fetch one extra to see if there is a next
-    if (!this.paging.direction && this.paging.params.limit > 0) {
-      this.paging.direction = 'fetch';
-      this.paging.params.limit = this.paging.params.limit + 1;
-      this.updateUrlQuery(this.paging.params);
-    }
-
-    return Backbone.Collection.prototype.fetch.apply(this, arguments);
-  },
-
-  parse: function (resp) {
-    var rows = resp.rows;
-
-    this.paging.hasNext = this.paging.hasPrevious = false;
-
-    this.viewMeta = {
-      total_rows: resp.total_rows,
-      offset: resp.offset,
-      update_seq: resp.update_seq
-    };
-
-    if (this.paging.params.skip > 0) {
-      this.paging.hasPrevious = true;
-    }
-
-    if (rows.length === this.paging.pageSize + 1) {
-      this.paging.hasNext = true;
-
-      // remove the next page marker result
-      rows.pop();
-      this.viewMeta.total_rows = this.viewMeta.total_rows - 1;
-    }
-    return rows;
-  },
-
-  hasNext: function() {
-    return this.paging.hasNext;
-  },
-
-  hasPrevious: function() {
-    return this.paging.hasPrevious;
-  }
-});
-
-export default PagingCollection;
-
-
-//   if (exports) {
-//     // Overload the Backbone.ajax method, this allows PagingCollection to be able to
-//     // work in node.js
-//     exports.setAjax = function (ajax) {
-//       Backbone.ajax = ajax;
-//     };
-
-//     exports.PagingCollection = PagingCollection;
-//   }
-
-//   return PagingCollection;
-// }));
-
-
diff --git a/assets/js/plugins/prettify.js b/assets/js/plugins/prettify.js
deleted file mode 100644
index eef5ad7..0000000
--- a/assets/js/plugins/prettify.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
-(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
-[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
-f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
-(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
-{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
-t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
-"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
-l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
-q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
-q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
-"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
-a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
-for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
-m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
-a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
-j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
-"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
-H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
-J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
-I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
-["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
-/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
-["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
-hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
-!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
-250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
-PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
diff --git a/assets/less/animations.less b/assets/less/animations.less
deleted file mode 100644
index 0728dc5..0000000
--- a/assets/less/animations.less
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Licensed 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.
-
-.keyframes (@name, @fromRules, @toRules) {
-    @-webkit-keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-       @-moz-keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-            @keyframes ~'@{name}' { 0% { @fromRules(); } 100% { @toRules(); } }
-}
-
-.animation(@options) {
-  -webkit-animation: @options;
-  -moz-animation: @options;
-  animation: @options;
-}
-
-.fade {
-  transition: opacity .25s ease-in-out;
-  -moz-transition: opacity .25s ease-in-out;
-  -webkit-transition: opacity .25s ease-in-out;
-}
-
-.fadeIn {
-  opacity: 1;
-}
-
-.fadeOut {
-  opacity: 0;
-}
-
-@-webkit-keyframes errorBlinkBG {
-  from { background: @dangerRed; }
-  to { background: white; }
-}
-@keyframes errorBlinkBG {
-  from { background: @dangerRed; }
-  to { background: white; }
-}
-
-/* a generic slide-up/down effect that looks smooth for items with unknown heights */
-.keyframes(slideDown, {
-  opacity: 0;
-  max-height: 0;
-},
-{
-  opacity: 1;
-  max-height: 1000px;
-});
-
-.keyframes(slideUp, {
-  max-height: 1000px;
-  opacity: 1;
-},
-{
-  max-height: 0;
-  opacity: 0;
-});
-
-.highlight {
-  -webkit-animation: highlight-element 2.5s 1;
-  -moz-animation: highlight-element 2.5s 1;
-}
-
-@-webkit-keyframes highlight-element {
-  0% { background-color: @highlightEffectColor; }
-  100% { background-color: #f1f1f1; }
-}
-@-moz-keyframes highlight-element {
-  0% { background-color: @highlightEffectColor; }
-  100% { background-color: #f1f1f1; }
-}
diff --git a/assets/less/bootstrap/accordion.less b/assets/less/bootstrap/accordion.less
deleted file mode 100644
index d63523b..0000000
--- a/assets/less/bootstrap/accordion.less
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Accordion
-// --------------------------------------------------
-
-
-// Parent container
-.accordion {
-  margin-bottom: @baseLineHeight;
-}
-
-// Group == heading + body
-.accordion-group {
-  margin-bottom: 2px;
-  border: 1px solid #e5e5e5;
-  .border-radius(@baseBorderRadius);
-}
-.accordion-heading {
-  border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
-  display: block;
-  padding: 8px 15px;
-}
-
-// General toggle styles
-.accordion-toggle {
-  cursor: pointer;
-}
-
-// Inner needs the styles because you can't animate properly with any styles on the element
-.accordion-inner {
-  padding: 9px 15px;
-  border-top: 1px solid #e5e5e5;
-}
diff --git a/assets/less/bootstrap/alerts.less b/assets/less/bootstrap/alerts.less
deleted file mode 100644
index 0116b19..0000000
--- a/assets/less/bootstrap/alerts.less
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Alerts
-// --------------------------------------------------
-
-
-// Base styles
-// -------------------------
-
-.alert {
-  padding: 8px 35px 8px 14px;
-  margin-bottom: @baseLineHeight;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-  background-color: @warningBackground;
-  border: 1px solid @warningBorder;
-  .border-radius(@baseBorderRadius);
-}
-.alert,
-.alert h4 {
-  // Specified for the h4 to prevent conflicts of changing @headingsColor
-  color: @warningText;
-}
-.alert h4 {
-  margin: 0;
-}
-
-// Adjust close link position
-.alert .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  line-height: @baseLineHeight;
-}
-
-
-// Alternate styles
-// -------------------------
-
-.alert-success {
-  background-color: @successBackground;
-  border-color: @successBorder;
-  color: @successText;
-}
-.alert-success h4 {
-  color: @successText;
-}
-.alert-danger,
-.alert-error {
-  background-color: @errorBackground;
-  border-color: @errorBorder;
-  color: @errorText;
-}
-.alert-danger h4,
-.alert-error h4 {
-  color: @errorText;
-}
-.alert-info {
-  background-color: @infoBackground;
-  border-color: @infoBorder;
-  color: @infoText;
-}
-.alert-info h4 {
-  color: @infoText;
-}
-
-
-// Block alerts
-// -------------------------
-
-.alert-block {
-  padding-top: 14px;
-  padding-bottom: 14px;
-}
-.alert-block > p,
-.alert-block > ul {
-  margin-bottom: 0;
-}
-.alert-block p + p {
-  margin-top: 5px;
-}
diff --git a/assets/less/bootstrap/bootstrap.less b/assets/less/bootstrap/bootstrap.less
deleted file mode 100644
index 572fc38..0000000
--- a/assets/less/bootstrap/bootstrap.less
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
- * Bootstrap v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-// Core variables and mixins
-@import "mixins.less";
-
-// CSS Reset
-@import "reset.less";
-
-// Grid system and page structure
-@import "scaffolding.less";
-@import "grid.less";
-@import "layouts.less";
-
-// Base CSS
-@import "type.less";
-@import "code.less";
-@import "forms.less";
-@import "tables.less";
-
-// Components: common
-@import "font-awesome/font-awesome.less";
-@import "dropdowns.less";
-@import "wells.less";
-@import "component-animations.less";
-@import "close.less";
-
-// Components: Buttons & Alerts
-@import "buttons.less";
-@import "button-groups.less";
-@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
-
-// Components: Nav
-@import "navs.less";
-@import "navbar.less";
-@import "breadcrumbs.less";
-@import "pagination.less";
-@import "pager.less";
-
-// Components: Popovers
-@import "modals.less";
-@import "tooltip.less";
-@import "popovers.less";
-
-// Components: Misc
-@import "thumbnails.less";
-@import "media.less";
-@import "labels-badges.less";
-@import "progress-bars.less";
-@import "accordion.less";
-@import "carousel.less";
-@import "hero-unit.less";
-
-// Utility classes
-@import "utilities.less"; // Has to be last to override when necessary
diff --git a/assets/less/bootstrap/breadcrumbs.less b/assets/less/bootstrap/breadcrumbs.less
deleted file mode 100644
index f753df6..0000000
--- a/assets/less/bootstrap/breadcrumbs.less
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Breadcrumbs
-// --------------------------------------------------
-
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin: 0 0 @baseLineHeight;
-  list-style: none;
-  background-color: #f5f5f5;
-  .border-radius(@baseBorderRadius);
-  > li {
-    display: inline-block;
-    .ie7-inline-block();
-    text-shadow: 0 1px 0 @white;
-    > .divider {
-      padding: 0 5px;
-      color: #ccc;
-    }
-  }
-  > .active {
-    color: @grayLight;
-  }
-}
diff --git a/assets/less/bootstrap/button-groups.less b/assets/less/bootstrap/button-groups.less
deleted file mode 100644
index 2f9dd6f..0000000
--- a/assets/less/bootstrap/button-groups.less
+++ /dev/null
@@ -1,222 +0,0 @@
-//
-// Button groups
-// --------------------------------------------------
-
-// Make the div behave like a button
-.btn-group {
-  position: relative;
-  display: inline-block;
-  .ie7-inline-block();
-  font-size: 0; // remove as part 1 of font-size inline-block hack
-  vertical-align: middle; // match .btn alignment given font-size hack above
-  white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page)
-  .ie7-restore-left-whitespace();
-}
-
-// Space out series of button groups
-.btn-group + .btn-group {
-  margin-left: 5px;
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
-  font-size: 0; // Hack to remove whitespace that results from using inline-block
-  margin-top: @baseLineHeight / 2;
-  margin-bottom: @baseLineHeight / 2;
-  > .btn + .btn,
-  > .btn-group + .btn,
-  > .btn + .btn-group {
-    margin-left: 5px;
-  }
-}
-
-// Float them, remove border radius, then re-add to first and last elements
-.btn-group > .btn {
-  position: relative;
-  .border-radius(0);
-}
-.btn-group > .btn + .btn {
-  margin-left: -1px;
-}
-.btn-group > .btn,
-.btn-group > .dropdown-menu,
-.btn-group > .popover {
-  font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack
-}
-
-// Reset fonts for other sizes
-.btn-group > .btn-mini {
-  font-size: @fontSizeMini;
-}
-.btn-group > .btn-small {
-  font-size: @fontSizeSmall;
-}
-.btn-group > .btn-large {
-  font-size: @fontSizeLarge;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
-  margin-left: 0;
-  .border-top-left-radius(@baseBorderRadius);
-  .border-bottom-left-radius(@baseBorderRadius);
-}
-// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
-  .border-top-right-radius(@baseBorderRadius);
-  .border-bottom-right-radius(@baseBorderRadius);
-}
-// Reset corners for large buttons
-.btn-group > .btn.large:first-child {
-  margin-left: 0;
-  .border-top-left-radius(@borderRadiusLarge);
-  .border-bottom-left-radius(@borderRadiusLarge);
-}
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
-  .border-top-right-radius(@borderRadiusLarge);
-  .border-bottom-right-radius(@borderRadiusLarge);
-}
-
-// On hover/focus/active, bring the proper btn to front
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
-  z-index: 2;
-}
-
-// On active and open, don't show outline
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-
-// Split button dropdowns
-// ----------------------
-
-// Give the line between buttons some depth
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-  .box-shadow(
-    ~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"
-  );
-  *padding-top: 5px;
-  *padding-bottom: 5px;
-}
-.btn-group > .btn-mini + .dropdown-toggle {
-  padding-left: 5px;
-  padding-right: 5px;
-  *padding-top: 2px;
-  *padding-bottom: 2px;
-}
-.btn-group > .btn-small + .dropdown-toggle {
-  *padding-top: 5px;
-  *padding-bottom: 4px;
-}
-.btn-group > .btn-large + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px;
-  *padding-top: 7px;
-  *padding-bottom: 7px;
-}
-
-.btn-group.open {
-  // The clickable button for toggling the menu
-  // Remove the gradient and set the same inset shadow as the :active state
-  .dropdown-toggle {
-    background-image: none;
-    .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
-  }
-
-  // Keep the hover's background when dropdown is open
-  .btn.dropdown-toggle {
-    background-color: @btnBackgroundHighlight;
-  }
-  .btn-primary.dropdown-toggle {
-    background-color: @btnPrimaryBackgroundHighlight;
-  }
-  .btn-warning.dropdown-toggle {
-    background-color: @btnWarningBackgroundHighlight;
-  }
-  .btn-danger.dropdown-toggle {
-    background-color: @btnDangerBackgroundHighlight;
-  }
-  .btn-success.dropdown-toggle {
-    background-color: @btnSuccessBackgroundHighlight;
-  }
-  .btn-secondary.dropdown-toggle {
-    background-color: @btnInfoBackgroundHighlight;
-  }
-  .btn-inverse.dropdown-toggle {
-    background-color: @btnInverseBackgroundHighlight;
-  }
-}
-
-// Reposition the caret
-.btn .caret {
-  margin-top: 8px;
-  margin-left: 0;
-}
-// Carets in other button sizes
-.btn-large .caret {
-  margin-top: 6px;
-}
-.btn-large .caret {
-  border-left-width: 5px;
-  border-right-width: 5px;
-  border-top-width: 5px;
-}
-.btn-mini .caret,
-.btn-small .caret {
-  margin-top: 8px;
-}
-// Upside down carets for .dropup
-.dropup .btn-large .caret {
-  border-bottom-width: 5px;
-}
-
-// Account for other colors
-.btn-primary,
-.btn-warning,
-.btn-danger,
-.btn-secondary,
-.btn-success,
-.btn-inverse {
-  .caret {
-    border-top-color: @white;
-    border-bottom-color: @white;
-  }
-}
-
-// Vertical button groups
-// ----------------------
-
-.btn-group-vertical {
-  display: inline-block; // makes buttons only take up the width they need
-  .ie7-inline-block();
-}
-.btn-group-vertical > .btn {
-  display: block;
-  float: none;
-  max-width: 100%;
-  .border-radius(0);
-}
-.btn-group-vertical > .btn + .btn {
-  margin-left: 0;
-  margin-top: -1px;
-}
-.btn-group-vertical > .btn:first-child {
-  .border-radius(@baseBorderRadius @baseBorderRadius 0 0);
-}
-.btn-group-vertical > .btn:last-child {
-  .border-radius(0 0 @baseBorderRadius @baseBorderRadius);
-}
-.btn-group-vertical > .btn-large:first-child {
-  .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0);
-}
-.btn-group-vertical > .btn-large:last-child {
-  .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge);
-}
diff --git a/assets/less/bootstrap/buttons.less b/assets/less/bootstrap/buttons.less
deleted file mode 100644
index 85d417c..0000000
--- a/assets/less/bootstrap/buttons.less
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-// Buttons
-// --------------------------------------------------
-
-
-// Base styles
-// --------------------------------------------------
-
-// Core
-.btn {
-  display: inline-block;
-  .ie7-inline-block();
-  padding: 4px 12px;
-  margin-bottom: 0; // For input.btn
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
-  border: 1px solid @btnBorder;
-  *border: 0; // Remove the border to prevent IE7's black border on input:focus
-  border-bottom-color: darken(@btnBorder, 10%);
-  .border-radius(@baseBorderRadius);
-  .ie7-restore-left-whitespace(); // Give IE7 some love
-  .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
-
-  // Hover/focus state
-  &:hover,
-  &:focus {
-    color: @grayDark;
-    text-decoration: none;
-    background-position: 0 -15px;
-
-    // transition is only when going to hover/focus, otherwise the background
-    // behind the gradient (there for IE<=9 fallback) gets mismatched
-    .transition(background-position .1s linear);
-  }
-
-  // Focus state for keyboard and accessibility
-  &:focus {
-    .tab-focus();
-  }
-
-  // Active state
-  &.active,
-  &:active {
-    background-image: none;
-    outline: 0;
-    .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
-  }
-
-  // Disabled state
-  &.disabled,
-  &[disabled] {
-    cursor: default;
-    background-image: none;
-    .opacity(65);
-    .box-shadow(none);
-  }
-
-}
-
-
-
-// Button Sizes
-// --------------------------------------------------
-
-// Large
-.btn-large {
-  padding: @paddingLarge;
-  font-size: @fontSizeLarge;
-  .border-radius(@borderRadiusLarge);
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
-  margin-top: 4px;
-}
-
-// Small
-.btn-small {
-  padding: @paddingSmall;
-  font-size: @fontSizeSmall;
-  .border-radius(@borderRadiusSmall);
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
-  margin-top: -1px;
-}
-
-// Mini
-.btn-mini {
-  padding: @paddingMini;
-  font-size: @fontSizeMini;
-  .border-radius(@borderRadiusSmall);
-}
-
-
-// Block button
-// -------------------------
-
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-left: 0;
-  padding-right: 0;
-  .box-sizing(border-box);
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  &.btn-block {
-    width: 100%;
-  }
-}
-
-
-
-// Alternate buttons
-// --------------------------------------------------
-
-// Provide *some* extra contrast for those who can get it
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-secondary.active,
-.btn-inverse.active {
-  color: rgba(255,255,255,.75);
-}
-
-// Set the backgrounds
-// -------------------------
-.btn-primary {
-  .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
-}
-// Warning appears are orange
-.btn-warning {
-  .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight);
-}
-// Danger and error appear as red
-.btn-danger {
-  .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight);
-}
-// Success appears as green
-.btn-success {
-  .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight);
-}
-// Info appears as a neutral blue
-.btn-secondary {
-  .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight);
-}
-// Inverse appears as dark gray
-.btn-inverse {
-  .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight);
-}
-
-
-// Cross-browser Jank
-// --------------------------------------------------
-
-button.btn,
-input[type="submit"].btn {
-
-  // Firefox 3.6 only I believe
-  &::-moz-focus-inner {
-    padding: 0;
-    border: 0;
-  }
-
-  // IE7 has some default padding on button controls
-  *padding-top: 3px;
-  *padding-bottom: 3px;
-
-  &.btn-large {
-    *padding-top: 7px;
-    *padding-bottom: 7px;
-  }
-  &.btn-small {
-    *padding-top: 3px;
-    *padding-bottom: 3px;
-  }
-  &.btn-mini {
-    *padding-top: 1px;
-    *padding-bottom: 1px;
-  }
-}
-
-
-// Link buttons
-// --------------------------------------------------
-
-// Make a button look and behave like a link
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
-  background-color: transparent;
-  background-image: none;
-  .box-shadow(none);
-}
-.btn-link {
-  border-color: transparent;
-  cursor: pointer;
-  color: @linkColor;
-  .border-radius(0);
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: @linkColorHover;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus {
-  color: @grayDark;
-  text-decoration: none;
-}
diff --git a/assets/less/bootstrap/carousel.less b/assets/less/bootstrap/carousel.less
deleted file mode 100644
index 55bc050..0000000
--- a/assets/less/bootstrap/carousel.less
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// Carousel
-// --------------------------------------------------
-
-
-.carousel {
-  position: relative;
-  margin-bottom: @baseLineHeight;
-  line-height: 1;
-}
-
-.carousel-inner {
-  overflow: hidden;
-  width: 100%;
-  position: relative;
-}
-
-.carousel-inner {
-
-  > .item {
-    display: none;
-    position: relative;
-    .transition(.6s ease-in-out left);
-
-    // Account for jankitude on images
-    > img,
-    > a > img {
-      display: block;
-      line-height: 1;
-    }
-  }
-
-  > .active,
-  > .next,
-  > .prev { display: block; }
-
-  > .active {
-    left: 0;
-  }
-
-  > .next,
-  > .prev {
-    position: absolute;
-    top: 0;
-    width: 100%;
-  }
-
-  > .next {
-    left: 100%;
-  }
-  > .prev {
-    left: -100%;
-  }
-  > .next.left,
-  > .prev.right {
-    left: 0;
-  }
-
-  > .active.left {
-    left: -100%;
-  }
-  > .active.right {
-    left: 100%;
-  }
-
-}
-
-// Left/right controls for nav
-// ---------------------------
-
-.carousel-control {
-  position: absolute;
-  top: 40%;
-  left: 15px;
-  width: 40px;
-  height: 40px;
-  margin-top: -20px;
-  font-size: 60px;
-  font-weight: 100;
-  line-height: 30px;
-  color: @white;
-  text-align: center;
-  background: @grayDarker;
-  border: 3px solid @white;
-  .border-radius(23px);
-  .opacity(50);
-
-  // we can't have this transition here
-  // because webkit cancels the carousel
-  // animation if you trip this while
-  // in the middle of another animation
-  // ;_;
-  // .transition(opacity .2s linear);
-
-  // Reposition the right one
-  &.right {
-    left: auto;
-    right: 15px;
-  }
-
-  // Hover/focus state
-  &:hover,
-  &:focus {
-    color: @white;
-    text-decoration: none;
-    .opacity(90);
-  }
-}
-
-// Carousel indicator pips
-// -----------------------------
-.carousel-indicators {
-  position: absolute;
-  top: 15px;
-  right: 15px;
-  z-index: 5;
-  margin: 0;
-  list-style: none;
-
-  li {
-    display: block;
-    float: left;
-    width: 10px;
-    height: 10px;
-    margin-left: 5px;
-    text-indent: -999px;
-    background-color: #ccc;
-    background-color: rgba(255,255,255,.25);
-    border-radius: 5px;
-  }
-  .active {
-    background-color: #fff;
-  }
-}
-
-// Caption for text below images
-// -----------------------------
-
-.carousel-caption {
-  position: absolute;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  padding: 15px;
-  background: @grayDark;
-  background: rgba(0,0,0,.75);
-}
-.carousel-caption h4,
-.carousel-caption p {
-  color: @white;
-  line-height: @baseLineHeight;
-}
-.carousel-caption h4 {
-  margin: 0 0 5px;
-}
-.carousel-caption p {
-  margin-bottom: 0;
-}
diff --git a/assets/less/bootstrap/close.less b/assets/less/bootstrap/close.less
deleted file mode 100644
index d3693d3..0000000
--- a/assets/less/bootstrap/close.less
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Close icons
-// --------------------------------------------------
-
-
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: @baseLineHeight;
-  color: #B9B9B9;
-  text-shadow: 0 1px 0 rgba(255,255,255,1);
-  &:hover,
-  &:focus {
-    color: @hoverHighlight;
-    text-decoration: none;
-    cursor: pointer
-  }
-}
-
-// Additional properties for button version
-// iOS requires the button element instead of an anchor tag.
-// If you want the anchor version, it requires `href="#"`.
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
diff --git a/assets/less/bootstrap/code.less b/assets/less/bootstrap/code.less
deleted file mode 100644
index 266a926..0000000
--- a/assets/less/bootstrap/code.less
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Code (inline and blocK)
-// --------------------------------------------------
-
-
-// Inline and block code styles
-code,
-pre {
-  padding: 0 3px 2px;
-  #font > #family > .monospace;
-  font-size: @baseFontSize - 2;
-  color: @grayDark;
-  .border-radius(3px);
-}
-
-// Inline code
-code {
-  padding: 2px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-  white-space: nowrap;
-}
-
-// Blocks of code
-pre {
-  display: block;
-  padding: (@baseLineHeight - 1) / 2;
-  margin: 0 0 @baseLineHeight / 2;
-  font-size: @baseFontSize - 1; // 14px to 13px
-  line-height: @baseLineHeight;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc; // fallback for IE7-8
-  border: 1px solid rgba(0,0,0,.15);
-  .border-radius(@baseBorderRadius);
-
-  // Make prettyprint styles more spaced out for readability
-  &.prettyprint {
-    margin-bottom: @baseLineHeight;
-  }
-
-  // Account for some code outputs that place code tags in pre tags
-  code {
-    padding: 0;
-    color: inherit;
-    white-space: pre;
-    white-space: pre-wrap;
-    background-color: transparent;
-    border: 0;
-  }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/component-animations.less b/assets/less/bootstrap/component-animations.less
deleted file mode 100644
index d614263..0000000
--- a/assets/less/bootstrap/component-animations.less
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-// Component animations
-// --------------------------------------------------
-
-
-.fade {
-  opacity: 0;
-  .transition(opacity .15s linear);
-  &.in {
-    opacity: 1;
-  }
-}
-
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  .transition(height .35s ease);
-  &.in {
-    height: auto;
-  }
-}
diff --git a/assets/less/bootstrap/dropdowns.less b/assets/less/bootstrap/dropdowns.less
deleted file mode 100644
index 0984bb1..0000000
--- a/assets/less/bootstrap/dropdowns.less
+++ /dev/null
@@ -1,274 +0,0 @@
-//
-// Dropdown menus
-// --------------------------------------------------
-
-
-// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
-.dropup,
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  // The caret makes the toggle a bit too tall in IE7
-  *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-
-// Dropdown arrow/caret
-// --------------------
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top:   4px solid @black;
-  border-right: 4px solid transparent;
-  border-left:  4px solid transparent;
-  content: "";
-}
-
-// Place the caret
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-
-// The dropdown menu (ul)
-// ----------------------
-.dropdown-menu {
-
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: @zindexDropdown;
-  display: none; // none by default, but block on "open" of the menu
-  float: left;
-  min-width: 160px;
-  margin: 2px 0 0; // override default ul
-  list-style: none;
-  background-color: @brandDark1;
-  color: @navIconColor;
-  border: 1px solid #ccc; // Fallback for IE7-8
-  border: 1px solid @dropdownBorder;
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-
-  // Aligns the dropdown menu to right
-  &.pull-right {
-    right: 0;
-    left: auto;
-  }
-  li.header-label{
-    background-color: @brandDark2;
-    color: #FFFFFF;
-    padding: 3px 20px;
-    font-size: 13px;
-  }
-  &.arrow {
-    &:before{
-      content: "";
-      display: block;
-      position: absolute;
-      border-style: solid;
-      top: -20px;
-      right: 10%;
-      width: 0;
-      height: 0;
-      margin-left: -10px;
-      border-left: 10px solid transparent;
-      border-right: 10px solid transparent;
-      border-bottom: 10px solid #2b2f33;
-      border-top: 10px solid transparent;
-    }
-  }
-  // Dividers (basically an hr) within the dropdown
-  .divider {
-    .nav-divider(@dropdownDividerTop, @dropdownDividerBottom);
-  }
-
-  // Links within the dropdown menu
-  > li > a {
-    &.icon:before{
-      padding-right: 5px;
-    }
-    font-size: 12px;
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: @baseLineHeight;
-    color: @dropdownLinkColor;
-    white-space: nowrap;
-    border-bottom: 1px solid #1A1A1A;
-  }
-}
-
-// Hover/Focus state
-// -----------
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
-  text-decoration: none;
-  color: #fff;
-  //#gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
-}
-
-// Active state
-// ------------
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: @dropdownLinkColorActive;
-  text-decoration: none;
-  outline: 0;
-  #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%));
-}
-
-// Disabled state
-// --------------
-// Gray out text and ensure the hover/focus state remains gray
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: @grayLight;
-}
-// Nuke hover/focus effects
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none; // Remove CSS gradient
-  .reset-filter();
-  cursor: default;
-}
-
-// Open state for the dropdown
-// ---------------------------
-.open {
-  // IE7's z-index only goes to the nearest positioned ancestor, which would
-  // make the menu appear below buttons that appeared later on the page
-  *z-index: @zindexDropdown;
-
-  & > .dropdown-menu {
-    display: block;
-  }
-}
-
-// Backdrop to catch body clicks on mobile, etc.
-// ---------------------------
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: @zindexDropdown - 10;
-}
-
-// Right aligned dropdowns
-// ---------------------------
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-// ------------------------------------------------------
-// Just add .dropup after the standard .dropdown class and you're set, bro.
-// TODO: abstract this so that the navbar fixed styles are not placed here?
-.dropup,
-.navbar-fixed-bottom .dropdown {
-  // Reverse the caret
-  .caret {
-    border-top: 0;
-    border-bottom: 4px solid @black;
-    content: "";
-  }
-  // Different positioning for bottom up menu
-  .dropdown-menu {
-    top: auto;
-    bottom: 100%;
-    margin-bottom: 1px;
-  }
-}
-
-// Sub menus
-// ---------------------------
-.dropdown-submenu {
-  position: relative;
-}
-// Default dropdowns
-.dropdown-submenu > .dropdown-menu {
-  top: 0;
-  left: 100%;
-  margin-top: -6px;
-  margin-left: -1px;
-  .border-radius(0 6px 6px 6px);
-}
-.dropdown-submenu:hover > .dropdown-menu {
-  display: block;
-}
-
-// Dropups
-.dropup .dropdown-submenu > .dropdown-menu {
-  top: auto;
-  bottom: 0;
-  margin-top: 0;
-  margin-bottom: -2px;
-  .border-radius(5px 5px 5px 0);
-}
-
-// Caret to indicate there is a submenu
-.dropdown-submenu > a:after {
-  display: block;
-  content: " ";
-  float: right;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-  border-width: 5px 0 5px 5px;
-  border-left-color: darken(@dropdownBackground, 20%);
-  margin-top: 5px;
-  margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
-  border-left-color: @dropdownLinkColorHover;
-}
-
-// Left aligned submenus
-.dropdown-submenu.pull-left {
-  // Undo the float
-  // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere.
-  float: none;
-
-  // Positioning the submenu
-  > .dropdown-menu {
-    left: -100%;
-    margin-left: 10px;
-    .border-radius(6px 0 6px 6px);
-  }
-}
-
-// Tweak nav headers
-// -----------------
-// Increase padding from 15px to 20px on sides
-.dropdown .dropdown-menu .nav-header {
-  padding-left: 20px;
-  padding-right: 20px;
-}
-
-// Typeahead
-// ---------
-.typeahead {
-  z-index: 1051;
-  margin-top: 2px; // give it some space to breathe
-  .border-radius(@baseBorderRadius);
-}
diff --git a/assets/less/bootstrap/font-awesome/bootstrap.less b/assets/less/bootstrap/font-awesome/bootstrap.less
deleted file mode 100644
index a2c9604..0000000
--- a/assets/less/bootstrap/font-awesome/bootstrap.less
+++ /dev/null
@@ -1,84 +0,0 @@
-/* BOOTSTRAP SPECIFIC CLASSES
- * -------------------------- */
-
-/* Bootstrap 2.0 sprites.less reset */
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline;
-  width: auto;
-  height: auto;
-  line-height: normal;
-  vertical-align: baseline;
-  background-image: none;
-  background-position: 0% 0%;
-  background-repeat: repeat;
-  margin-top: 0;
-}
-
-/* more sprites.less reset */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"] {
-  background-image: none;
-}
-
-
-/* keeps Bootstrap styles with and without icons the same */
-.btn, .nav {
-  [class^="icon-"],
-  [class*=" icon-"] {
-//    display: inline;
-    &.icon-large { line-height: .9em; }
-    &.icon-spin { display: inline-block; }
-  }
-}
-.nav-tabs, .nav-pills {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &, &.icon-large { line-height: .9em; }
-  }
-}
-.btn {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .18em; }
-    }
-    &.icon-spin.icon-large { line-height: .8em; }
-  }
-}
-.btn.btn-small {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .25em; }
-    }
-  }
-}
-.btn.btn-large {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    margin-top: 0; // overrides bootstrap default
-    &.pull-left, &.pull-right {
-      &.icon-2x { margin-top: .05em; }
-    }
-    &.pull-left.icon-2x { margin-right: .2em; }
-    &.pull-right.icon-2x { margin-left: .2em; }
-  }
-}
-
-/* Fixes alignment in nav lists */
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  line-height: inherit;
-}
diff --git a/assets/less/bootstrap/font-awesome/core.less b/assets/less/bootstrap/font-awesome/core.less
deleted file mode 100644
index 1ef7e22..0000000
--- a/assets/less/bootstrap/font-awesome/core.less
+++ /dev/null
@@ -1,129 +0,0 @@
-/* FONT AWESOME CORE
- * -------------------------- */
-
-[class^="icon-"],
-[class*=" icon-"] {
-  .icon-FontAwesome();
-}
-
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
-  text-decoration: inherit;
-  display: inline-block;
-  speak: none;
-}
-
-/* makes the font 33% larger relative to the icon container */
-.icon-large:before {
-  vertical-align: -10%;
-  font-size: 4/3em;
-}
-
-/* makes sure icons active on rollover in links */
-a {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    display: inline;
-  }
-}
-
-/* increased font size for icon-large */
-[class^="icon-"],
-[class*=" icon-"] {
-  &.icon-fixed-width {
-    display: inline-block;
-    width: 16/14em;
-    text-align: right;
-    padding-right: 4/14em;
-    &.icon-large {
-      width: 20/14em;
-    }
-  }
-}
-
-.icons-ul {
-  margin-left: @icons-li-width;
-  list-style-type: none;
-
-  > li { position: relative; }
-
-  .icon-li {
-    position: absolute;
-    left: -@icons-li-width;
-    width: @icons-li-width;
-    text-align: center;
-    line-height: inherit;
-  }
-}
-
-// allows usage of the hide class directly on font awesome icons
-[class^="icon-"],
-[class*=" icon-"] {
-  &.hide {
-    display: none;
-  }
-}
-
-.icon-muted { color: @iconMuted; }
-.icon-light { color: @iconLight; }
-.icon-dark { color: @iconDark; }
-
-// Icon Borders
-// -------------------------
-
-.icon-border {
-  border: solid 1px @borderColor;
-  padding: .2em .25em .15em;
-  .border-radius(3px);
-}
-
-// Icon Sizes
-// -------------------------
-
-.icon-2x {
-  font-size: 2em;
-  &.icon-border {
-    border-width: 2px;
-    .border-radius(4px);
-  }
-}
-.icon-3x {
-  font-size: 3em;
-  &.icon-border {
-    border-width: 3px;
-    .border-radius(5px);
-  }
-}
-.icon-4x {
-  font-size: 4em;
-  &.icon-border {
-    border-width: 4px;
-    .border-radius(6px);
-  }
-}
-
-.icon-5x {
-  font-size: 5em;
-  &.icon-border {
-    border-width: 5px;
-    .border-radius(7px);
-  }
-}
-
-
-// Floats & Margins
-// -------------------------
-
-// Quick floats
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-[class^="icon-"],
-[class*=" icon-"] {
-  &.pull-left {
-    margin-right: .3em;
-  }
-  &.pull-right {
-    margin-left: .3em;
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/extras.less b/assets/less/bootstrap/font-awesome/extras.less
deleted file mode 100644
index c93c260..0000000
--- a/assets/less/bootstrap/font-awesome/extras.less
+++ /dev/null
@@ -1,93 +0,0 @@
-/* EXTRAS
- * -------------------------- */
-
-/* Stacked and layered icon */
-.icon-stack();
-
-/* Animated rotating icon */
-.icon-spin {
-  display: inline-block;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  -webkit-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-
-/* Prevent stack and spinners from being taken inline when inside a link */
-a .icon-stack,
-a .icon-spin {
-  display: inline-block;
-  text-decoration: none;
-}
-
-@-moz-keyframes spin {
-  0% { -moz-transform: rotate(0deg); }
-  100% { -moz-transform: rotate(359deg); }
-}
-@-webkit-keyframes spin {
-  0% { -webkit-transform: rotate(0deg); }
-  100% { -webkit-transform: rotate(359deg); }
-}
-@-o-keyframes spin {
-  0% { -o-transform: rotate(0deg); }
-  100% { -o-transform: rotate(359deg); }
-}
-@-ms-keyframes spin {
-  0% { -ms-transform: rotate(0deg); }
-  100% { -ms-transform: rotate(359deg); }
-}
-@keyframes spin {
-  0% { transform: rotate(0deg); }
-  100% { transform: rotate(359deg); }
-}
-
-/* Icon rotations and mirroring */
-.icon-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-
-.icon-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-
-.icon-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-
-.icon-flip-horizontal:before {
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-
-.icon-flip-vertical:before {
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-
-/* ensure rotation occurs inside anchor tags */
-a {
-  .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical {
-    &:before { display: inline-block; }
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/font-awesome-ie7.less b/assets/less/bootstrap/font-awesome/font-awesome-ie7.less
deleted file mode 100644
index 6675c49..0000000
--- a/assets/less/bootstrap/font-awesome/font-awesome-ie7.less
+++ /dev/null
@@ -1,1953 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-
-.icon-large {
-  font-size: 4/3em;
-  margin-top: -4px;
-  padding-top: 3px;
-  margin-bottom: -4px;
-  padding-bottom: 3px;
-  vertical-align: middle;
-}
-
-.nav {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    vertical-align: inherit;
-    margin-top: -4px;
-    padding-top: 3px;
-    margin-bottom: -4px;
-    padding-bottom: 3px;
-    &.icon-large {
-      vertical-align: -25%;
-    }
-  }
-}
-
-.nav-pills, .nav-tabs {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.icon-large {
-      line-height: .75em;
-      margin-top: -7px;
-      padding-top: 5px;
-      margin-bottom: -5px;
-      padding-bottom: 4px;
-    }
-  }
-}
-
-.btn {
-  [class^="icon-"],
-  [class*=" icon-"] {
-    &.pull-left, &.pull-right { vertical-align: inherit; }
-    &.icon-large {
-      margin-top: -.5em;
-    }
-  }
-}
-
-a [class^="icon-"],
-a [class*=" icon-"] {
-  cursor: pointer;
-}
-
-.ie7icon(@inner) { *zoom: ~"expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '@{inner}')"; }
-
-
-.icon-glass {
-  .ie7icon('&#xf000;');
-}
-
-
-.icon-music {
-  .ie7icon('&#xf001;');
-}
-
-
-.icon-search {
-  .ie7icon('&#xf002;');
-}
-
-
-.icon-envelope-alt {
-  .ie7icon('&#xf003;');
-}
-
-
-.icon-heart {
-  .ie7icon('&#xf004;');
-}
-
-
-.icon-star {
-  .ie7icon('&#xf005;');
-}
-
-
-.icon-star-empty {
-  .ie7icon('&#xf006;');
-}
-
-
-.icon-user {
-  .ie7icon('&#xf007;');
-}
-
-
-.icon-film {
-  .ie7icon('&#xf008;');
-}
-
-
-.icon-th-large {
-  .ie7icon('&#xf009;');
-}
-
-
-.icon-th {
-  .ie7icon('&#xf00a;');
-}
-
-
-.icon-th-list {
-  .ie7icon('&#xf00b;');
-}
-
-
-.icon-ok {
-  .ie7icon('&#xf00c;');
-}
-
-
-.icon-remove {
-  .ie7icon('&#xf00d;');
-}
-
-
-.icon-zoom-in {
-  .ie7icon('&#xf00e;');
-}
-
-
-.icon-zoom-out {
-  .ie7icon('&#xf010;');
-}
-
-
-.icon-off {
-  .ie7icon('&#xf011;');
-}
-
-.icon-power-off {
-  .ie7icon('&#xf011;');
-}
-
-
-.icon-signal {
-  .ie7icon('&#xf012;');
-}
-
-
-.icon-cog {
-  .ie7icon('&#xf013;');
-}
-
-.icon-gear {
-  .ie7icon('&#xf013;');
-}
-
-
-.icon-trash {
-  .ie7icon('&#xf014;');
-}
-
-
-.icon-home {
-  .ie7icon('&#xf015;');
-}
-
-
-.icon-file-alt {
-  .ie7icon('&#xf016;');
-}
-
-
-.icon-time {
-  .ie7icon('&#xf017;');
-}
-
-
-.icon-road {
-  .ie7icon('&#xf018;');
-}
-
-
-.icon-download-alt {
-  .ie7icon('&#xf019;');
-}
-
-
-.icon-download {
-  .ie7icon('&#xf01a;');
-}
-
-
-.icon-upload {
-  .ie7icon('&#xf01b;');
-}
-
-
-.icon-inbox {
-  .ie7icon('&#xf01c;');
-}
-
-
-.icon-play-circle {
-  .ie7icon('&#xf01d;');
-}
-
-
-.icon-repeat {
-  .ie7icon('&#xf01e;');
-}
-
-.icon-rotate-right {
-  .ie7icon('&#xf01e;');
-}
-
-
-.icon-refresh {
-  .ie7icon('&#xf021;');
-}
-
-
-.icon-list-alt {
-  .ie7icon('&#xf022;');
-}
-
-
-.icon-lock {
-  .ie7icon('&#xf023;');
-}
-
-
-.icon-flag {
-  .ie7icon('&#xf024;');
-}
-
-
-.icon-headphones {
-  .ie7icon('&#xf025;');
-}
-
-
-.icon-volume-off {
-  .ie7icon('&#xf026;');
-}
-
-
-.icon-volume-down {
-  .ie7icon('&#xf027;');
-}
-
-
-.icon-volume-up {
-  .ie7icon('&#xf028;');
-}
-
-
-.icon-qrcode {
-  .ie7icon('&#xf029;');
-}
-
-
-.icon-barcode {
-  .ie7icon('&#xf02a;');
-}
-
-
-.icon-tag {
-  .ie7icon('&#xf02b;');
-}
-
-
-.icon-tags {
-  .ie7icon('&#xf02c;');
-}
-
-
-.icon-book {
-  .ie7icon('&#xf02d;');
-}
-
-
-.icon-bookmark {
-  .ie7icon('&#xf02e;');
-}
-
-
-.icon-print {
-  .ie7icon('&#xf02f;');
-}
-
-
-.icon-camera {
-  .ie7icon('&#xf030;');
-}
-
-
-.icon-font {
-  .ie7icon('&#xf031;');
-}
-
-
-.icon-bold {
-  .ie7icon('&#xf032;');
-}
-
-
-.icon-italic {
-  .ie7icon('&#xf033;');
-}
-
-
-.icon-text-height {
-  .ie7icon('&#xf034;');
-}
-
-
-.icon-text-width {
-  .ie7icon('&#xf035;');
-}
-
-
-.icon-align-left {
-  .ie7icon('&#xf036;');
-}
-
-
-.icon-align-center {
-  .ie7icon('&#xf037;');
-}
-
-
-.icon-align-right {
-  .ie7icon('&#xf038;');
-}
-
-
-.icon-align-justify {
-  .ie7icon('&#xf039;');
-}
-
-
-.icon-list {
-  .ie7icon('&#xf03a;');
-}
-
-
-.icon-indent-left {
-  .ie7icon('&#xf03b;');
-}
-
-
-.icon-indent-right {
-  .ie7icon('&#xf03c;');
-}
-
-
-.icon-facetime-video {
-  .ie7icon('&#xf03d;');
-}
-
-
-.icon-picture {
-  .ie7icon('&#xf03e;');
-}
-
-
-.icon-pencil {
-  .ie7icon('&#xf040;');
-}
-
-
-.icon-map-marker {
-  .ie7icon('&#xf041;');
-}
-
-
-.icon-adjust {
-  .ie7icon('&#xf042;');
-}
-
-
-.icon-tint {
-  .ie7icon('&#xf043;');
-}
-
-
-.icon-edit {
-  .ie7icon('&#xf044;');
-}
-
-
-.icon-share {
-  .ie7icon('&#xf045;');
-}
-
-
-.icon-check {
-  .ie7icon('&#xf046;');
-}
-
-
-.icon-move {
-  .ie7icon('&#xf047;');
-}
-
-
-.icon-step-backward {
-  .ie7icon('&#xf048;');
-}
-
-
-.icon-fast-backward {
-  .ie7icon('&#xf049;');
-}
-
-
-.icon-backward {
-  .ie7icon('&#xf04a;');
-}
-
-
-.icon-play {
-  .ie7icon('&#xf04b;');
-}
-
-
-.icon-pause {
-  .ie7icon('&#xf04c;');
-}
-
-
-.icon-stop {
-  .ie7icon('&#xf04d;');
-}
-
-
-.icon-forward {
-  .ie7icon('&#xf04e;');
-}
-
-
-.icon-fast-forward {
-  .ie7icon('&#xf050;');
-}
-
-
-.icon-step-forward {
-  .ie7icon('&#xf051;');
-}
-
-
-.icon-eject {
-  .ie7icon('&#xf052;');
-}
-
-
-.icon-chevron-left {
-  .ie7icon('&#xf053;');
-}
-
-
-.icon-chevron-right {
-  .ie7icon('&#xf054;');
-}
-
-
-.icon-plus-sign {
-  .ie7icon('&#xf055;');
-}
-
-
-.icon-minus-sign {
-  .ie7icon('&#xf056;');
-}
-
-
-.icon-remove-sign {
-  .ie7icon('&#xf057;');
-}
-
-
-.icon-ok-sign {
-  .ie7icon('&#xf058;');
-}
-
-
-.icon-question-sign {
-  .ie7icon('&#xf059;');
-}
-
-
-.icon-info-sign {
-  .ie7icon('&#xf05a;');
-}
-
-
-.icon-screenshot {
-  .ie7icon('&#xf05b;');
-}
-
-
-.icon-remove-circle {
-  .ie7icon('&#xf05c;');
-}
-
-
-.icon-ok-circle {
-  .ie7icon('&#xf05d;');
-}
-
-
-.icon-ban-circle {
-  .ie7icon('&#xf05e;');
-}
-
-
-.icon-arrow-left {
-  .ie7icon('&#xf060;');
-}
-
-
-.icon-arrow-right {
-  .ie7icon('&#xf061;');
-}
-
-
-.icon-arrow-up {
-  .ie7icon('&#xf062;');
-}
-
-
-.icon-arrow-down {
-  .ie7icon('&#xf063;');
-}
-
-
-.icon-share-alt {
-  .ie7icon('&#xf064;');
-}
-
-.icon-mail-forward {
-  .ie7icon('&#xf064;');
-}
-
-
-.icon-resize-full {
-  .ie7icon('&#xf065;');
-}
-
-
-.icon-resize-small {
-  .ie7icon('&#xf066;');
-}
-
-
-.icon-plus {
-  .ie7icon('&#xf067;');
-}
-
-
-.icon-minus {
-  .ie7icon('&#xf068;');
-}
-
-
-.icon-asterisk {
-  .ie7icon('&#xf069;');
-}
-
-
-.icon-exclamation-sign {
-  .ie7icon('&#xf06a;');
-}
-
-
-.icon-gift {
-  .ie7icon('&#xf06b;');
-}
-
-
-.icon-leaf {
-  .ie7icon('&#xf06c;');
-}
-
-
-.icon-fire {
-  .ie7icon('&#xf06d;');
-}
-
-
-.icon-eye-open {
-  .ie7icon('&#xf06e;');
-}
-
-
-.icon-eye-close {
-  .ie7icon('&#xf070;');
-}
-
-
-.icon-warning-sign {
-  .ie7icon('&#xf071;');
-}
-
-
-.icon-plane {
-  .ie7icon('&#xf072;');
-}
-
-
-.icon-calendar {
-  .ie7icon('&#xf073;');
-}
-
-
-.icon-random {
-  .ie7icon('&#xf074;');
-}
-
-
-.icon-comment {
-  .ie7icon('&#xf075;');
-}
-
-
-.icon-magnet {
-  .ie7icon('&#xf076;');
-}
-
-
-.icon-chevron-up {
-  .ie7icon('&#xf077;');
-}
-
-
-.icon-chevron-down {
-  .ie7icon('&#xf078;');
-}
-
-
-.icon-retweet {
-  .ie7icon('&#xf079;');
-}
-
-
-.icon-shopping-cart {
-  .ie7icon('&#xf07a;');
-}
-
-
-.icon-folder-close {
-  .ie7icon('&#xf07b;');
-}
-
-
-.icon-folder-open {
-  .ie7icon('&#xf07c;');
-}
-
-
-.icon-resize-vertical {
-  .ie7icon('&#xf07d;');
-}
-
-
-.icon-resize-horizontal {
-  .ie7icon('&#xf07e;');
-}
-
-
-.icon-bar-chart {
-  .ie7icon('&#xf080;');
-}
-
-
-.icon-twitter-sign {
-  .ie7icon('&#xf081;');
-}
-
-
-.icon-facebook-sign {
-  .ie7icon('&#xf082;');
-}
-
-
-.icon-camera-retro {
-  .ie7icon('&#xf083;');
-}
-
-
-.icon-key {
-  .ie7icon('&#xf084;');
-}
-
-
-.icon-cogs {
-  .ie7icon('&#xf085;');
-}
-
-.icon-gears {
-  .ie7icon('&#xf085;');
-}
-
-
-.icon-comments {
-  .ie7icon('&#xf086;');
-}
-
-
-.icon-thumbs-up-alt {
-  .ie7icon('&#xf087;');
-}
-
-
-.icon-thumbs-down-alt {
-  .ie7icon('&#xf088;');
-}
-
-
-.icon-star-half {
-  .ie7icon('&#xf089;');
-}
-
-
-.icon-heart-empty {
-  .ie7icon('&#xf08a;');
-}
-
-
-.icon-signout {
-  .ie7icon('&#xf08b;');
-}
-
-
-.icon-linkedin-sign {
-  .ie7icon('&#xf08c;');
-}
-
-
-.icon-pushpin {
-  .ie7icon('&#xf08d;');
-}
-
-
-.icon-external-link {
-  .ie7icon('&#xf08e;');
-}
-
-
-.icon-signin {
-  .ie7icon('&#xf090;');
-}
-
-
-.icon-trophy {
-  .ie7icon('&#xf091;');
-}
-
-
-.icon-github-sign {
-  .ie7icon('&#xf092;');
-}
-
-
-.icon-upload-alt {
-  .ie7icon('&#xf093;');
-}
-
-
-.icon-lemon {
-  .ie7icon('&#xf094;');
-}
-
-
-.icon-phone {
-  .ie7icon('&#xf095;');
-}
-
-
-.icon-check-empty {
-  .ie7icon('&#xf096;');
-}
-
-.icon-unchecked {
-  .ie7icon('&#xf096;');
-}
-
-
-.icon-bookmark-empty {
-  .ie7icon('&#xf097;');
-}
-
-
-.icon-phone-sign {
-  .ie7icon('&#xf098;');
-}
-
-
-.icon-twitter {
-  .ie7icon('&#xf099;');
-}
-
-
-.icon-facebook {
-  .ie7icon('&#xf09a;');
-}
-
-
-.icon-github {
-  .ie7icon('&#xf09b;');
-}
-
-
-.icon-unlock {
-  .ie7icon('&#xf09c;');
-}
-
-
-.icon-credit-card {
-  .ie7icon('&#xf09d;');
-}
-
-
-.icon-rss {
-  .ie7icon('&#xf09e;');
-}
-
-
-.icon-hdd {
-  .ie7icon('&#xf0a0;');
-}
-
-
-.icon-bullhorn {
-  .ie7icon('&#xf0a1;');
-}
-
-
-.icon-bell {
-  .ie7icon('&#xf0a2;');
-}
-
-
-.icon-certificate {
-  .ie7icon('&#xf0a3;');
-}
-
-
-.icon-hand-right {
-  .ie7icon('&#xf0a4;');
-}
-
-
-.icon-hand-left {
-  .ie7icon('&#xf0a5;');
-}
-
-
-.icon-hand-up {
-  .ie7icon('&#xf0a6;');
-}
-
-
-.icon-hand-down {
-  .ie7icon('&#xf0a7;');
-}
-
-
-.icon-circle-arrow-left {
-  .ie7icon('&#xf0a8;');
-}
-
-
-.icon-circle-arrow-right {
-  .ie7icon('&#xf0a9;');
-}
-
-
-.icon-circle-arrow-up {
-  .ie7icon('&#xf0aa;');
-}
-
-
-.icon-circle-arrow-down {
-  .ie7icon('&#xf0ab;');
-}
-
-
-.icon-globe {
-  .ie7icon('&#xf0ac;');
-}
-
-
-.icon-wrench {
-  .ie7icon('&#xf0ad;');
-}
-
-
-.icon-tasks {
-  .ie7icon('&#xf0ae;');
-}
-
-
-.icon-filter {
-  .ie7icon('&#xf0b0;');
-}
-
-
-.icon-briefcase {
-  .ie7icon('&#xf0b1;');
-}
-
-
-.icon-fullscreen {
-  .ie7icon('&#xf0b2;');
-}
-
-
-.icon-group {
-  .ie7icon('&#xf0c0;');
-}
-
-
-.icon-link {
-  .ie7icon('&#xf0c1;');
-}
-
-
-.icon-cloud {
-  .ie7icon('&#xf0c2;');
-}
-
-
-.icon-beaker {
-  .ie7icon('&#xf0c3;');
-}
-
-
-.icon-cut {
-  .ie7icon('&#xf0c4;');
-}
-
-
-.icon-copy {
-  .ie7icon('&#xf0c5;');
-}
-
-
-.icon-paper-clip {
-  .ie7icon('&#xf0c6;');
-}
-
-.icon-paperclip {
-  .ie7icon('&#xf0c6;');
-}
-
-
-.icon-save {
-  .ie7icon('&#xf0c7;');
-}
-
-
-.icon-sign-blank {
-  .ie7icon('&#xf0c8;');
-}
-
-
-.icon-reorder {
-  .ie7icon('&#xf0c9;');
-}
-
-
-.icon-list-ul {
-  .ie7icon('&#xf0ca;');
-}
-
-
-.icon-list-ol {
-  .ie7icon('&#xf0cb;');
-}
-
-
-.icon-strikethrough {
-  .ie7icon('&#xf0cc;');
-}
-
-
-.icon-underline {
-  .ie7icon('&#xf0cd;');
-}
-
-
-.icon-table {
-  .ie7icon('&#xf0ce;');
-}
-
-
-.icon-magic {
-  .ie7icon('&#xf0d0;');
-}
-
-
-.icon-truck {
-  .ie7icon('&#xf0d1;');
-}
-
-
-.icon-pinterest {
-  .ie7icon('&#xf0d2;');
-}
-
-
-.icon-pinterest-sign {
-  .ie7icon('&#xf0d3;');
-}
-
-
-.icon-google-plus-sign {
-  .ie7icon('&#xf0d4;');
-}
-
-
-.icon-google-plus {
-  .ie7icon('&#xf0d5;');
-}
-
-
-.icon-money {
-  .ie7icon('&#xf0d6;');
-}
-
-
-.icon-caret-down {
-  .ie7icon('&#xf0d7;');
-}
-
-
-.icon-caret-up {
-  .ie7icon('&#xf0d8;');
-}
-
-
-.icon-caret-left {
-  .ie7icon('&#xf0d9;');
-}
-
-
-.icon-caret-right {
-  .ie7icon('&#xf0da;');
-}
-
-
-.icon-columns {
-  .ie7icon('&#xf0db;');
-}
-
-
-.icon-sort {
-  .ie7icon('&#xf0dc;');
-}
-
-
-.icon-sort-down {
-  .ie7icon('&#xf0dd;');
-}
-
-
-.icon-sort-up {
-  .ie7icon('&#xf0de;');
-}
-
-
-.icon-envelope {
-  .ie7icon('&#xf0e0;');
-}
-
-
-.icon-linkedin {
-  .ie7icon('&#xf0e1;');
-}
-
-
-.icon-undo {
-  .ie7icon('&#xf0e2;');
-}
-
-.icon-rotate-left {
-  .ie7icon('&#xf0e2;');
-}
-
-
-.icon-legal {
-  .ie7icon('&#xf0e3;');
-}
-
-
-.icon-dashboard {
-  .ie7icon('&#xf0e4;');
-}
-
-
-.icon-comment-alt {
-  .ie7icon('&#xf0e5;');
-}
-
-
-.icon-comments-alt {
-  .ie7icon('&#xf0e6;');
-}
-
-
-.icon-bolt {
-  .ie7icon('&#xf0e7;');
-}
-
-
-.icon-sitemap {
-  .ie7icon('&#xf0e8;');
-}
-
-
-.icon-umbrella {
-  .ie7icon('&#xf0e9;');
-}
-
-
-.icon-paste {
-  .ie7icon('&#xf0ea;');
-}
-
-
-.icon-lightbulb {
-  .ie7icon('&#xf0eb;');
-}
-
-
-.icon-exchange {
-  .ie7icon('&#xf0ec;');
-}
-
-
-.icon-cloud-download {
-  .ie7icon('&#xf0ed;');
-}
-
-
-.icon-cloud-upload {
-  .ie7icon('&#xf0ee;');
-}
-
-
-.icon-user-md {
-  .ie7icon('&#xf0f0;');
-}
-
-
-.icon-stethoscope {
-  .ie7icon('&#xf0f1;');
-}
-
-
-.icon-suitcase {
-  .ie7icon('&#xf0f2;');
-}
-
-
-.icon-bell-alt {
-  .ie7icon('&#xf0f3;');
-}
-
-
-.icon-coffee {
-  .ie7icon('&#xf0f4;');
-}
-
-
-.icon-food {
-  .ie7icon('&#xf0f5;');
-}
-
-
-.icon-file-text-alt {
-  .ie7icon('&#xf0f6;');
-}
-
-
-.icon-building {
-  .ie7icon('&#xf0f7;');
-}
-
-
-.icon-hospital {
-  .ie7icon('&#xf0f8;');
-}
-
-
-.icon-ambulance {
-  .ie7icon('&#xf0f9;');
-}
-
-
-.icon-medkit {
-  .ie7icon('&#xf0fa;');
-}
-
-
-.icon-fighter-jet {
-  .ie7icon('&#xf0fb;');
-}
-
-
-.icon-beer {
-  .ie7icon('&#xf0fc;');
-}
-
-
-.icon-h-sign {
-  .ie7icon('&#xf0fd;');
-}
-
-
-.icon-plus-sign-alt {
-  .ie7icon('&#xf0fe;');
-}
-
-
-.icon-double-angle-left {
-  .ie7icon('&#xf100;');
-}
-
-
-.icon-double-angle-right {
-  .ie7icon('&#xf101;');
-}
-
-
-.icon-double-angle-up {
-  .ie7icon('&#xf102;');
-}
-
-
-.icon-double-angle-down {
-  .ie7icon('&#xf103;');
-}
-
-
-.icon-angle-left {
-  .ie7icon('&#xf104;');
-}
-
-
-.icon-angle-right {
-  .ie7icon('&#xf105;');
-}
-
-
-.icon-angle-up {
-  .ie7icon('&#xf106;');
-}
-
-
-.icon-angle-down {
-  .ie7icon('&#xf107;');
-}
-
-
-.icon-desktop {
-  .ie7icon('&#xf108;');
-}
-
-
-.icon-laptop {
-  .ie7icon('&#xf109;');
-}
-
-
-.icon-tablet {
-  .ie7icon('&#xf10a;');
-}
-
-
-.icon-mobile-phone {
-  .ie7icon('&#xf10b;');
-}
-
-
-.icon-circle-blank {
-  .ie7icon('&#xf10c;');
-}
-
-
-.icon-quote-left {
-  .ie7icon('&#xf10d;');
-}
-
-
-.icon-quote-right {
-  .ie7icon('&#xf10e;');
-}
-
-
-.icon-spinner {
-  .ie7icon('&#xf110;');
-}
-
-
-.icon-circle {
-  .ie7icon('&#xf111;');
-}
-
-
-.icon-reply {
-  .ie7icon('&#xf112;');
-}
-
-.icon-mail-reply {
-  .ie7icon('&#xf112;');
-}
-
-
-.icon-github-alt {
-  .ie7icon('&#xf113;');
-}
-
-
-.icon-folder-close-alt {
-  .ie7icon('&#xf114;');
-}
-
-
-.icon-folder-open-alt {
-  .ie7icon('&#xf115;');
-}
-
-
-.icon-expand-alt {
-  .ie7icon('&#xf116;');
-}
-
-
-.icon-collapse-alt {
-  .ie7icon('&#xf117;');
-}
-
-
-.icon-smile {
-  .ie7icon('&#xf118;');
-}
-
-
-.icon-frown {
-  .ie7icon('&#xf119;');
-}
-
-
-.icon-meh {
-  .ie7icon('&#xf11a;');
-}
-
-
-.icon-gamepad {
-  .ie7icon('&#xf11b;');
-}
-
-
-.icon-keyboard {
-  .ie7icon('&#xf11c;');
-}
-
-
-.icon-flag-alt {
-  .ie7icon('&#xf11d;');
-}
-
-
-.icon-flag-checkered {
-  .ie7icon('&#xf11e;');
-}
-
-
-.icon-terminal {
-  .ie7icon('&#xf120;');
-}
-
-
-.icon-code {
-  .ie7icon('&#xf121;');
-}
-
-
-.icon-reply-all {
-  .ie7icon('&#xf122;');
-}
-
-
-.icon-mail-reply-all {
-  .ie7icon('&#xf122;');
-}
-
-
-.icon-star-half-empty {
-  .ie7icon('&#xf123;');
-}
-
-.icon-star-half-full {
-  .ie7icon('&#xf123;');
-}
-
-
-.icon-location-arrow {
-  .ie7icon('&#xf124;');
-}
-
-
-.icon-crop {
-  .ie7icon('&#xf125;');
-}
-
-
-.icon-code-fork {
-  .ie7icon('&#xf126;');
-}
-
-
-.icon-unlink {
-  .ie7icon('&#xf127;');
-}
-
-
-.icon-question {
-  .ie7icon('&#xf128;');
-}
-
-
-.icon-info {
-  .ie7icon('&#xf129;');
-}
-
-
-.icon-exclamation {
-  .ie7icon('&#xf12a;');
-}
-
-
-.icon-superscript {
-  .ie7icon('&#xf12b;');
-}
-
-
-.icon-subscript {
-  .ie7icon('&#xf12c;');
-}
-
-
-.icon-eraser {
-  .ie7icon('&#xf12d;');
-}
-
-
-.icon-puzzle-piece {
-  .ie7icon('&#xf12e;');
-}
-
-
-.icon-microphone {
-  .ie7icon('&#xf130;');
-}
-
-
-.icon-microphone-off {
-  .ie7icon('&#xf131;');
-}
-
-
-.icon-shield {
-  .ie7icon('&#xf132;');
-}
-
-
-.icon-calendar-empty {
-  .ie7icon('&#xf133;');
-}
-
-
-.icon-fire-extinguisher {
-  .ie7icon('&#xf134;');
-}
-
-
-.icon-rocket {
-  .ie7icon('&#xf135;');
-}
-
-
-.icon-maxcdn {
-  .ie7icon('&#xf136;');
-}
-
-
-.icon-chevron-sign-left {
-  .ie7icon('&#xf137;');
-}
-
-
-.icon-chevron-sign-right {
-  .ie7icon('&#xf138;');
-}
-
-
-.icon-chevron-sign-up {
-  .ie7icon('&#xf139;');
-}
-
-
-.icon-chevron-sign-down {
-  .ie7icon('&#xf13a;');
-}
-
-
-.icon-html5 {
-  .ie7icon('&#xf13b;');
-}
-
-
-.icon-css3 {
-  .ie7icon('&#xf13c;');
-}
-
-
-.icon-anchor {
-  .ie7icon('&#xf13d;');
-}
-
-
-.icon-unlock-alt {
-  .ie7icon('&#xf13e;');
-}
-
-
-.icon-bullseye {
-  .ie7icon('&#xf140;');
-}
-
-
-.icon-ellipsis-horizontal {
-  .ie7icon('&#xf141;');
-}
-
-
-.icon-ellipsis-vertical {
-  .ie7icon('&#xf142;');
-}
-
-
-.icon-rss-sign {
-  .ie7icon('&#xf143;');
-}
-
-
-.icon-play-sign {
-  .ie7icon('&#xf144;');
-}
-
-
-.icon-ticket {
-  .ie7icon('&#xf145;');
-}
-
-
-.icon-minus-sign-alt {
-  .ie7icon('&#xf146;');
-}
-
-
-.icon-check-minus {
-  .ie7icon('&#xf147;');
-}
-
-
-.icon-level-up {
-  .ie7icon('&#xf148;');
-}
-
-
-.icon-level-down {
-  .ie7icon('&#xf149;');
-}
-
-
-.icon-check-sign {
-  .ie7icon('&#xf14a;');
-}
-
-
-.icon-edit-sign {
-  .ie7icon('&#xf14b;');
-}
-
-
-.icon-external-link-sign {
-  .ie7icon('&#xf14c;');
-}
-
-
-.icon-share-sign {
-  .ie7icon('&#xf14d;');
-}
-
-
-.icon-compass {
-  .ie7icon('&#xf14e;');
-}
-
-
-.icon-collapse {
-  .ie7icon('&#xf150;');
-}
-
-
-.icon-collapse-top {
-  .ie7icon('&#xf151;');
-}
-
-
-.icon-expand {
-  .ie7icon('&#xf152;');
-}
-
-
-.icon-eur {
-  .ie7icon('&#xf153;');
-}
-
-.icon-euro {
-  .ie7icon('&#xf153;');
-}
-
-
-.icon-gbp {
-  .ie7icon('&#xf154;');
-}
-
-
-.icon-usd {
-  .ie7icon('&#xf155;');
-}
-
-.icon-dollar {
-  .ie7icon('&#xf155;');
-}
-
-
-.icon-inr {
-  .ie7icon('&#xf156;');
-}
-
-.icon-rupee {
-  .ie7icon('&#xf156;');
-}
-
-
-.icon-jpy {
-  .ie7icon('&#xf157;');
-}
-
-.icon-yen {
-  .ie7icon('&#xf157;');
-}
-
-
-.icon-cny {
-  .ie7icon('&#xf158;');
-}
-
-.icon-renminbi {
-  .ie7icon('&#xf158;');
-}
-
-
-.icon-krw {
-  .ie7icon('&#xf159;');
-}
-
-.icon-won {
-  .ie7icon('&#xf159;');
-}
-
-
-.icon-btc {
-  .ie7icon('&#xf15a;');
-}
-
-.icon-bitcoin {
-  .ie7icon('&#xf15a;');
-}
-
-
-.icon-file {
-  .ie7icon('&#xf15b;');
-}
-
-
-.icon-file-text {
-  .ie7icon('&#xf15c;');
-}
-
-
-.icon-sort-by-alphabet {
-  .ie7icon('&#xf15d;');
-}
-
-
-.icon-sort-by-alphabet-alt {
-  .ie7icon('&#xf15e;');
-}
-
-
-.icon-sort-by-attributes {
-  .ie7icon('&#xf160;');
-}
-
-
-.icon-sort-by-attributes-alt {
-  .ie7icon('&#xf161;');
-}
-
-
-.icon-sort-by-order {
-  .ie7icon('&#xf162;');
-}
-
-
-.icon-sort-by-order-alt {
-  .ie7icon('&#xf163;');
-}
-
-
-.icon-thumbs-up {
-  .ie7icon('&#xf164;');
-}
-
-
-.icon-thumbs-down {
-  .ie7icon('&#xf165;');
-}
-
-
-.icon-youtube-sign {
-  .ie7icon('&#xf166;');
-}
-
-
-.icon-youtube {
-  .ie7icon('&#xf167;');
-}
-
-
-.icon-xing {
-  .ie7icon('&#xf168;');
-}
-
-
-.icon-xing-sign {
-  .ie7icon('&#xf169;');
-}
-
-
-.icon-youtube-play {
-  .ie7icon('&#xf16a;');
-}
-
-
-.icon-dropbox {
-  .ie7icon('&#xf16b;');
-}
-
-
-.icon-stackexchange {
-  .ie7icon('&#xf16c;');
-}
-
-
-.icon-instagram {
-  .ie7icon('&#xf16d;');
-}
-
-
-.icon-flickr {
-  .ie7icon('&#xf16e;');
-}
-
-
-.icon-adn {
-  .ie7icon('&#xf170;');
-}
-
-
-.icon-bitbucket {
-  .ie7icon('&#xf171;');
-}
-
-
-.icon-bitbucket-sign {
-  .ie7icon('&#xf172;');
-}
-
-
-.icon-tumblr {
-  .ie7icon('&#xf173;');
-}
-
-
-.icon-tumblr-sign {
-  .ie7icon('&#xf174;');
-}
-
-
-.icon-long-arrow-down {
-  .ie7icon('&#xf175;');
-}
-
-
-.icon-long-arrow-up {
-  .ie7icon('&#xf176;');
-}
-
-
-.icon-long-arrow-left {
-  .ie7icon('&#xf177;');
-}
-
-
-.icon-long-arrow-right {
-  .ie7icon('&#xf178;');
-}
-
-
-.icon-apple {
-  .ie7icon('&#xf179;');
-}
-
-
-.icon-windows {
-  .ie7icon('&#xf17a;');
-}
-
-
-.icon-android {
-  .ie7icon('&#xf17b;');
-}
-
-
-.icon-linux {
-  .ie7icon('&#xf17c;');
-}
-
-
-.icon-dribbble {
-  .ie7icon('&#xf17d;');
-}
-
-
-.icon-skype {
-  .ie7icon('&#xf17e;');
-}
-
-
-.icon-foursquare {
-  .ie7icon('&#xf180;');
-}
-
-
-.icon-trello {
-  .ie7icon('&#xf181;');
-}
-
-
-.icon-female {
-  .ie7icon('&#xf182;');
-}
-
-
-.icon-male {
-  .ie7icon('&#xf183;');
-}
-
-
-.icon-gittip {
-  .ie7icon('&#xf184;');
-}
-
-
-.icon-sun {
-  .ie7icon('&#xf185;');
-}
-
-
-.icon-moon {
-  .ie7icon('&#xf186;');
-}
-
-
-.icon-archive {
-  .ie7icon('&#xf187;');
-}
-
-
-.icon-bug {
-  .ie7icon('&#xf188;');
-}
-
-
-.icon-vk {
-  .ie7icon('&#xf189;');
-}
-
-
-.icon-weibo {
-  .ie7icon('&#xf18a;');
-}
-
-
-.icon-renren {
-  .ie7icon('&#xf18b;');
-}
-
-
diff --git a/assets/less/bootstrap/font-awesome/font-awesome.less b/assets/less/bootstrap/font-awesome/font-awesome.less
deleted file mode 100644
index 0f45461..0000000
--- a/assets/less/bootstrap/font-awesome/font-awesome.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "bootstrap.less";
-@import "extras.less";
-@import "icons.less";
diff --git a/assets/less/bootstrap/font-awesome/icons.less b/assets/less/bootstrap/font-awesome/icons.less
deleted file mode 100644
index 476d201..0000000
--- a/assets/less/bootstrap/font-awesome/icons.less
+++ /dev/null
@@ -1,381 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.icon-glass:before { content: @glass; }
-.icon-music:before { content: @music; }
-.icon-search:before { content: @search; }
-.icon-envelope-alt:before { content: @envelope-alt; }
-.icon-heart:before { content: @heart; }
-.icon-star:before { content: @star; }
-.icon-star-empty:before { content: @star-empty; }
-.icon-user:before { content: @user; }
-.icon-film:before { content: @film; }
-.icon-th-large:before { content: @th-large; }
-.icon-th:before { content: @th; }
-.icon-th-list:before { content: @th-list; }
-.icon-ok:before { content: @ok; }
-.icon-remove:before { content: @remove; }
-.icon-zoom-in:before { content: @zoom-in; }
-.icon-zoom-out:before { content: @zoom-out; }
-.icon-power-off:before,
-.icon-off:before { content: @off; }
-.icon-signal:before { content: @signal; }
-.icon-gear:before,
-.icon-cog:before { content: @cog; }
-.icon-trash:before { content: @trash; }
-.icon-home:before { content: @home; }
-.icon-file-alt:before { content: @file-alt; }
-.icon-time:before { content: @time; }
-.icon-road:before { content: @road; }
-.icon-download-alt:before { content: @download-alt; }
-.icon-download:before { content: @download; }
-.icon-upload:before { content: @upload; }
-.icon-inbox:before { content: @inbox; }
-.icon-play-circle:before { content: @play-circle; }
-.icon-rotate-right:before,
-.icon-repeat:before { content: @repeat; }
-.icon-refresh:before { content: @refresh; }
-.icon-list-alt:before { content: @list-alt; }
-.icon-lock:before { content: @lock; }
-.icon-flag:before { content: @flag; }
-.icon-headphones:before { content: @headphones; }
-.icon-volume-off:before { content: @volume-off; }
-.icon-volume-down:before { content: @volume-down; }
-.icon-volume-up:before { content: @volume-up; }
-.icon-qrcode:before { content: @qrcode; }
-.icon-barcode:before { content: @barcode; }
-.icon-tag:before { content: @tag; }
-.icon-tags:before { content: @tags; }
-.icon-book:before { content: @book; }
-.icon-bookmark:before { content: @bookmark; }
-.icon-print:before { content: @print; }
-.icon-camera:before { content: @camera; }
-.icon-font:before { content: @font; }
-.icon-bold:before { content: @bold; }
-.icon-italic:before { content: @italic; }
-.icon-text-height:before { content: @text-height; }
-.icon-text-width:before { content: @text-width; }
-.icon-align-left:before { content: @align-left; }
-.icon-align-center:before { content: @align-center; }
-.icon-align-right:before { content: @align-right; }
-.icon-align-justify:before { content: @align-justify; }
-.icon-list:before { content: @list; }
-.icon-indent-left:before { content: @indent-left; }
-.icon-indent-right:before { content: @indent-right; }
-.icon-facetime-video:before { content: @facetime-video; }
-.icon-picture:before { content: @picture; }
-.icon-pencil:before { content: @pencil; }
-.icon-map-marker:before { content: @map-marker; }
-.icon-adjust:before { content: @adjust; }
-.icon-tint:before { content: @tint; }
-.icon-edit:before { content: @edit; }
-.icon-share:before { content: @share; }
-.icon-check:before { content: @check; }
-.icon-move:before { content: @move; }
-.icon-step-backward:before { content: @step-backward; }
-.icon-fast-backward:before { content: @fast-backward; }
-.icon-backward:before { content: @backward; }
-.icon-play:before { content: @play; }
-.icon-pause:before { content: @pause; }
-.icon-stop:before { content: @stop; }
-.icon-forward:before { content: @forward; }
-.icon-fast-forward:before { content: @fast-forward; }
-.icon-step-forward:before { content: @step-forward; }
-.icon-eject:before { content: @eject; }
-.icon-chevron-left:before { content: @chevron-left; }
-.icon-chevron-right:before { content: @chevron-right; }
-.icon-plus-sign:before { content: @plus-sign; }
-.icon-minus-sign:before { content: @minus-sign; }
-.icon-remove-sign:before { content: @remove-sign; }
-.icon-ok-sign:before { content: @ok-sign; }
-.icon-question-sign:before { content: @question-sign; }
-.icon-info-sign:before { content: @info-sign; }
-.icon-screenshot:before { content: @screenshot; }
-.icon-remove-circle:before { content: @remove-circle; }
-.icon-ok-circle:before { content: @ok-circle; }
-.icon-ban-circle:before { content: @ban-circle; }
-.icon-arrow-left:before { content: @arrow-left; }
-.icon-arrow-right:before { content: @arrow-right; }
-.icon-arrow-up:before { content: @arrow-up; }
-.icon-arrow-down:before { content: @arrow-down; }
-.icon-mail-forward:before,
-.icon-share-alt:before { content: @share-alt; }
-.icon-resize-full:before { content: @resize-full; }
-.icon-resize-small:before { content: @resize-small; }
-.icon-plus:before { content: @plus; }
-.icon-minus:before { content: @minus; }
-.icon-asterisk:before { content: @asterisk; }
-.icon-exclamation-sign:before { content: @exclamation-sign; }
-.icon-gift:before { content: @gift; }
-.icon-leaf:before { content: @leaf; }
-.icon-fire:before { content: @fire; }
-.icon-eye-open:before { content: @eye-open; }
-.icon-eye-close:before { content: @eye-close; }
-.icon-warning-sign:before { content: @warning-sign; }
-.icon-plane:before { content: @plane; }
-.icon-calendar:before { content: @calendar; }
-.icon-random:before { content: @random; }
-.icon-comment:before { content: @comment; }
-.icon-magnet:before { content: @magnet; }
-.icon-chevron-up:before { content: @chevron-up; }
-.icon-chevron-down:before { content: @chevron-down; }
-.icon-retweet:before { content: @retweet; }
-.icon-shopping-cart:before { content: @shopping-cart; }
-.icon-folder-close:before { content: @folder-close; }
-.icon-folder-open:before { content: @folder-open; }
-.icon-resize-vertical:before { content: @resize-vertical; }
-.icon-resize-horizontal:before { content: @resize-horizontal; }
-.icon-bar-chart:before { content: @bar-chart; }
-.icon-twitter-sign:before { content: @twitter-sign; }
-.icon-facebook-sign:before { content: @facebook-sign; }
-.icon-camera-retro:before { content: @camera-retro; }
-.icon-key:before { content: @key; }
-.icon-gears:before,
-.icon-cogs:before { content: @cogs; }
-.icon-comments:before { content: @comments; }
-.icon-thumbs-up-alt:before { content: @thumbs-up-alt; }
-.icon-thumbs-down-alt:before { content: @thumbs-down-alt; }
-.icon-star-half:before { content: @star-half; }
-.icon-heart-empty:before { content: @heart-empty; }
-.icon-signout:before { content: @signout; }
-.icon-linkedin-sign:before { content: @linkedin-sign; }
-.icon-pushpin:before { content: @pushpin; }
-.icon-external-link:before { content: @external-link; }
-.icon-signin:before { content: @signin; }
-.icon-trophy:before { content: @trophy; }
-.icon-github-sign:before { content: @github-sign; }
-.icon-upload-alt:before { content: @upload-alt; }
-.icon-lemon:before { content: @lemon; }
-.icon-phone:before { content: @phone; }
-.icon-unchecked:before,
-.icon-check-empty:before { content: @check-empty; }
-.icon-bookmark-empty:before { content: @bookmark-empty; }
-.icon-phone-sign:before { content: @phone-sign; }
-.icon-twitter:before { content: @twitter; }
-.icon-facebook:before { content: @facebook; }
-.icon-github:before { content: @github; }
-.icon-unlock:before { content: @unlock; }
-.icon-credit-card:before { content: @credit-card; }
-.icon-rss:before { content: @rss; }
-.icon-hdd:before { content: @hdd; }
-.icon-bullhorn:before { content: @bullhorn; }
-.icon-bell:before { content: @bell; }
-.icon-certificate:before { content: @certificate; }
-.icon-hand-right:before { content: @hand-right; }
-.icon-hand-left:before { content: @hand-left; }
-.icon-hand-up:before { content: @hand-up; }
-.icon-hand-down:before { content: @hand-down; }
-.icon-circle-arrow-left:before { content: @circle-arrow-left; }
-.icon-circle-arrow-right:before { content: @circle-arrow-right; }
-.icon-circle-arrow-up:before { content: @circle-arrow-up; }
-.icon-circle-arrow-down:before { content: @circle-arrow-down; }
-.icon-globe:before { content: @globe; }
-.icon-wrench:before { content: @wrench; }
-.icon-tasks:before { content: @tasks; }
-.icon-filter:before { content: @filter; }
-.icon-briefcase:before { content: @briefcase; }
-.icon-fullscreen:before { content: @fullscreen; }
-.icon-group:before { content: @group; }
-.icon-link:before { content: @link; }
-.icon-cloud:before { content: @cloud; }
-.icon-beaker:before { content: @beaker; }
-.icon-cut:before { content: @cut; }
-.icon-copy:before { content: @copy; }
-.icon-paperclip:before,
-.icon-paper-clip:before { content: @paper-clip; }
-.icon-save:before { content: @save; }
-.icon-sign-blank:before { content: @sign-blank; }
-.icon-reorder:before { content: @reorder; }
-.icon-list-ul:before { content: @list-ul; }
-.icon-list-ol:before { content: @list-ol; }
-.icon-strikethrough:before { content: @strikethrough; }
-.icon-underline:before { content: @underline; }
-.icon-table:before { content: @table; }
-.icon-magic:before { content: @magic; }
-.icon-truck:before { content: @truck; }
-.icon-pinterest:before { content: @pinterest; }
-.icon-pinterest-sign:before { content: @pinterest-sign; }
-.icon-google-plus-sign:before { content: @google-plus-sign; }
-.icon-google-plus:before { content: @google-plus; }
-.icon-money:before { content: @money; }
-.icon-caret-down:before { content: @caret-down; }
-.icon-caret-up:before { content: @caret-up; }
-.icon-caret-left:before { content: @caret-left; }
-.icon-caret-right:before { content: @caret-right; }
-.icon-columns:before { content: @columns; }
-.icon-sort:before { content: @sort; }
-.icon-sort-down:before { content: @sort-down; }
-.icon-sort-up:before { content: @sort-up; }
-.icon-envelope:before { content: @envelope; }
-.icon-linkedin:before { content: @linkedin; }
-.icon-rotate-left:before,
-.icon-undo:before { content: @undo; }
-.icon-legal:before { content: @legal; }
-.icon-dashboard:before { content: @dashboard; }
-.icon-comment-alt:before { content: @comment-alt; }
-.icon-comments-alt:before { content: @comments-alt; }
-.icon-bolt:before { content: @bolt; }
-.icon-sitemap:before { content: @sitemap; }
-.icon-umbrella:before { content: @umbrella; }
-.icon-paste:before { content: @paste; }
-.icon-lightbulb:before { content: @lightbulb; }
-.icon-exchange:before { content: @exchange; }
-.icon-cloud-download:before { content: @cloud-download; }
-.icon-cloud-upload:before { content: @cloud-upload; }
-.icon-user-md:before { content: @user-md; }
-.icon-stethoscope:before { content: @stethoscope; }
-.icon-suitcase:before { content: @suitcase; }
-.icon-bell-alt:before { content: @bell-alt; }
-.icon-coffee:before { content: @coffee; }
-.icon-food:before { content: @food; }
-.icon-file-text-alt:before { content: @file-text-alt; }
-.icon-building:before { content: @building; }
-.icon-hospital:before { content: @hospital; }
-.icon-ambulance:before { content: @ambulance; }
-.icon-medkit:before { content: @medkit; }
-.icon-fighter-jet:before { content: @fighter-jet; }
-.icon-beer:before { content: @beer; }
-.icon-h-sign:before { content: @h-sign; }
-.icon-plus-sign-alt:before { content: @plus-sign-alt; }
-.icon-double-angle-left:before { content: @double-angle-left; }
-.icon-double-angle-right:before { content: @double-angle-right; }
-.icon-double-angle-up:before { content: @double-angle-up; }
-.icon-double-angle-down:before { content: @double-angle-down; }
-.icon-angle-left:before { content: @angle-left; }
-.icon-angle-right:before { content: @angle-right; }
-.icon-angle-up:before { content: @angle-up; }
-.icon-angle-down:before { content: @angle-down; }
-.icon-desktop:before { content: @desktop; }
-.icon-laptop:before { content: @laptop; }
-.icon-tablet:before { content: @tablet; }
-.icon-mobile-phone:before { content: @mobile-phone; }
-.icon-circle-blank:before { content: @circle-blank; }
-.icon-quote-left:before { content: @quote-left; }
-.icon-quote-right:before { content: @quote-right; }
-.icon-spinner:before { content: @spinner; }
-.icon-circle:before { content: @circle; }
-.icon-mail-reply:before,
-.icon-reply:before { content: @reply; }
-.icon-github-alt:before { content: @github-alt; }
-.icon-folder-close-alt:before { content: @folder-close-alt; }
-.icon-folder-open-alt:before { content: @folder-open-alt; }
-.icon-expand-alt:before { content: @expand-alt; }
-.icon-collapse-alt:before { content: @collapse-alt; }
-.icon-smile:before { content: @smile; }
-.icon-frown:before { content: @frown; }
-.icon-meh:before { content: @meh; }
-.icon-gamepad:before { content: @gamepad; }
-.icon-keyboard:before { content: @keyboard; }
-.icon-flag-alt:before { content: @flag-alt; }
-.icon-flag-checkered:before { content: @flag-checkered; }
-.icon-terminal:before { content: @terminal; }
-.icon-code:before { content: @code; }
-.icon-reply-all:before { content: @reply-all; }
-.icon-mail-reply-all:before { content: @mail-reply-all; }
-.icon-star-half-full:before,
-.icon-star-half-empty:before { content: @star-half-empty; }
-.icon-location-arrow:before { content: @location-arrow; }
-.icon-crop:before { content: @crop; }
-.icon-code-fork:before { content: @code-fork; }
-.icon-unlink:before { content: @unlink; }
-.icon-question:before { content: @question; }
-.icon-info:before { content: @info; }
-.icon-exclamation:before { content: @exclamation; }
-.icon-superscript:before { content: @superscript; }
-.icon-subscript:before { content: @subscript; }
-.icon-eraser:before { content: @eraser; }
-.icon-puzzle-piece:before { content: @puzzle-piece; }
-.icon-microphone:before { content: @microphone; }
-.icon-microphone-off:before { content: @microphone-off; }
-.icon-shield:before { content: @shield; }
-.icon-calendar-empty:before { content: @calendar-empty; }
-.icon-fire-extinguisher:before { content: @fire-extinguisher; }
-.icon-rocket:before { content: @rocket; }
-.icon-maxcdn:before { content: @maxcdn; }
-.icon-chevron-sign-left:before { content: @chevron-sign-left; }
-.icon-chevron-sign-right:before { content: @chevron-sign-right; }
-.icon-chevron-sign-up:before { content: @chevron-sign-up; }
-.icon-chevron-sign-down:before { content: @chevron-sign-down; }
-.icon-html5:before { content: @html5; }
-.icon-css3:before { content: @css3; }
-.icon-anchor:before { content: @anchor; }
-.icon-unlock-alt:before { content: @unlock-alt; }
-.icon-bullseye:before { content: @bullseye; }
-.icon-ellipsis-horizontal:before { content: @ellipsis-horizontal; }
-.icon-ellipsis-vertical:before { content: @ellipsis-vertical; }
-.icon-rss-sign:before { content: @rss-sign; }
-.icon-play-sign:before { content: @play-sign; }
-.icon-ticket:before { content: @ticket; }
-.icon-minus-sign-alt:before { content: @minus-sign-alt; }
-.icon-check-minus:before { content: @check-minus; }
-.icon-level-up:before { content: @level-up; }
-.icon-level-down:before { content: @level-down; }
-.icon-check-sign:before { content: @check-sign; }
-.icon-edit-sign:before { content: @edit-sign; }
-.icon-external-link-sign:before { content: @external-link-sign; }
-.icon-share-sign:before { content: @share-sign; }
-.icon-compass:before { content: @compass; }
-.icon-collapse:before { content: @collapse; }
-.icon-collapse-top:before { content: @collapse-top; }
-.icon-expand:before { content: @expand; }
-.icon-euro:before,
-.icon-eur:before { content: @eur; }
-.icon-gbp:before { content: @gbp; }
-.icon-dollar:before,
-.icon-usd:before { content: @usd; }
-.icon-rupee:before,
-.icon-inr:before { content: @inr; }
-.icon-yen:before,
-.icon-jpy:before { content: @jpy; }
-.icon-renminbi:before,
-.icon-cny:before { content: @cny; }
-.icon-won:before,
-.icon-krw:before { content: @krw; }
-.icon-bitcoin:before,
-.icon-btc:before { content: @btc; }
-.icon-file:before { content: @file; }
-.icon-file-text:before { content: @file-text; }
-.icon-sort-by-alphabet:before { content: @sort-by-alphabet; }
-.icon-sort-by-alphabet-alt:before { content: @sort-by-alphabet-alt; }
-.icon-sort-by-attributes:before { content: @sort-by-attributes; }
-.icon-sort-by-attributes-alt:before { content: @sort-by-attributes-alt; }
-.icon-sort-by-order:before { content: @sort-by-order; }
-.icon-sort-by-order-alt:before { content: @sort-by-order-alt; }
-.icon-thumbs-up:before { content: @thumbs-up; }
-.icon-thumbs-down:before { content: @thumbs-down; }
-.icon-youtube-sign:before { content: @youtube-sign; }
-.icon-youtube:before { content: @youtube; }
-.icon-xing:before { content: @xing; }
-.icon-xing-sign:before { content: @xing-sign; }
-.icon-youtube-play:before { content: @youtube-play; }
-.icon-dropbox:before { content: @dropbox; }
-.icon-stackexchange:before { content: @stackexchange; }
-.icon-instagram:before { content: @instagram; }
-.icon-flickr:before { content: @flickr; }
-.icon-adn:before { content: @adn; }
-.icon-bitbucket:before { content: @bitbucket; }
-.icon-bitbucket-sign:before { content: @bitbucket-sign; }
-.icon-tumblr:before { content: @tumblr; }
-.icon-tumblr-sign:before { content: @tumblr-sign; }
-.icon-long-arrow-down:before { content: @long-arrow-down; }
-.icon-long-arrow-up:before { content: @long-arrow-up; }
-.icon-long-arrow-left:before { content: @long-arrow-left; }
-.icon-long-arrow-right:before { content: @long-arrow-right; }
-.icon-apple:before { content: @apple; }
-.icon-windows:before { content: @windows; }
-.icon-android:before { content: @android; }
-.icon-linux:before { content: @linux; }
-.icon-dribbble:before { content: @dribbble; }
-.icon-skype:before { content: @skype; }
-.icon-foursquare:before { content: @foursquare; }
-.icon-trello:before { content: @trello; }
-.icon-female:before { content: @female; }
-.icon-male:before { content: @male; }
-.icon-gittip:before { content: @gittip; }
-.icon-sun:before { content: @sun; }
-.icon-moon:before { content: @moon; }
-.icon-archive:before { content: @archive; }
-.icon-bug:before { content: @bug; }
-.icon-vk:before { content: @vk; }
-.icon-weibo:before { content: @weibo; }
-.icon-renren:before { content: @renren; }
diff --git a/assets/less/bootstrap/font-awesome/mixins.less b/assets/less/bootstrap/font-awesome/mixins.less
deleted file mode 100644
index f7fdda5..0000000
--- a/assets/less/bootstrap/font-awesome/mixins.less
+++ /dev/null
@@ -1,48 +0,0 @@
-// Mixins
-// --------------------------
-
-.icon(@icon) {
-  .icon-FontAwesome();
-  content: @icon;
-}
-
-.icon-FontAwesome() {
-  font-family: FontAwesome;
-  font-weight: normal;
-  font-style: normal;
-  text-decoration: inherit;
-  -webkit-font-smoothing: antialiased;
-  *margin-right: .3em; // fixes ie7 issues
-}
-
-.border-radius(@radius) {
-  -webkit-border-radius: @radius;
-  -moz-border-radius: @radius;
-  border-radius: @radius;
-}
-
-.icon-stack(@width: 2em, @height: 2em, @top-font-size: 1em, @base-font-size: 2em) {
-  .icon-stack {
-    position: relative;
-    display: inline-block;
-    width: @width;
-    height: @height;
-    line-height: @width;
-    vertical-align: -35%;
-    [class^="icon-"],
-    [class*=" icon-"] {
-      display: block;
-      text-align: center;
-      position: absolute;
-      width: 100%;
-      height: 100%;
-      font-size: @top-font-size;
-      line-height: inherit;
-      *line-height: @height;
-    }
-    .icon-stack-base {
-      font-size: @base-font-size;
-      *line-height: @height / @base-font-size;
-    }
-  }
-}
diff --git a/assets/less/bootstrap/font-awesome/path.less b/assets/less/bootstrap/font-awesome/path.less
deleted file mode 100644
index 8ccef8c..0000000
--- a/assets/less/bootstrap/font-awesome/path.less
+++ /dev/null
@@ -1,14 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}');
-  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=@{FontAwesomeVersion}') format('embedded-opentype'),
-    url('@{FontAwesomePath}/fontawesome-webfont.woff?v=@{FontAwesomeVersion}') format('woff'),
-    url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=@{FontAwesomeVersion}') format('truetype'),
-    url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=@{FontAwesomeVersion}') format('svg');
-//  src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}
diff --git a/assets/less/bootstrap/font-awesome/variables.less b/assets/less/bootstrap/font-awesome/variables.less
deleted file mode 100644
index 53d9ed4..0000000
--- a/assets/less/bootstrap/font-awesome/variables.less
+++ /dev/null
@@ -1,734 +0,0 @@
-// Variables
-// --------------------------
-
-@FontAwesomePath:    "../../../fonts";
-//@FontAwesomePath:    "//netdna.bootstrapcdn.com/font-awesome/3.2.1/font"; // for referencing Bootstrap CDN font files directly
-@FontAwesomeVersion: "3.2.1";
-@borderColor:        #eee;
-@iconMuted:          #eee;
-@iconLight:          #fff;
-@iconDark:           #333;
-@icons-li-width:     30/14em;
-
-
-  @glass: "\f000";
-
-  @music: "\f001";
-
-  @search: "\f002";
-
-  @envelope-alt: "\f003";
-
-  @heart: "\f004";
-
-  @star: "\f005";
-
-  @star-empty: "\f006";
-
-  @user: "\f007";
-
-  @film: "\f008";
-
-  @th-large: "\f009";
-
-  @th: "\f00a";
-
-  @th-list: "\f00b";
-
-  @ok: "\f00c";
-
-  @remove: "\f00d";
-
-  @zoom-in: "\f00e";
-
-  @zoom-out: "\f010";
-
-  @off: "\f011";
-
-  @signal: "\f012";
-
-  @cog: "\f013";
-
-  @trash: "\f014";
-
-  @home: "\f015";
-
-  @file-alt: "\f016";
-
-  @time: "\f017";
-
-  @road: "\f018";
-
-  @download-alt: "\f019";
-
-  @download: "\f01a";
-
-  @upload: "\f01b";
-
-  @inbox: "\f01c";
-
-  @play-circle: "\f01d";
-
-  @repeat: "\f01e";
-
-  @refresh: "\f021";
-
-  @list-alt: "\f022";
-
-  @lock: "\f023";
-
-  @flag: "\f024";
-
-  @headphones: "\f025";
-
-  @volume-off: "\f026";
-
-  @volume-down: "\f027";
-
-  @volume-up: "\f028";
-
-  @qrcode: "\f029";
-
-  @barcode: "\f02a";
-
-  @tag: "\f02b";
-
-  @tags: "\f02c";
-
-  @book: "\f02d";
-
-  @bookmark: "\f02e";
-
-  @print: "\f02f";
-
-  @camera: "\f030";
-
-  @font: "\f031";
-
-  @bold: "\f032";
-
-  @italic: "\f033";
-
-  @text-height: "\f034";
-
-  @text-width: "\f035";
-
-  @align-left: "\f036";
-
-  @align-center: "\f037";
-
-  @align-right: "\f038";
-
-  @align-justify: "\f039";
-
-  @list: "\f03a";
-
-  @indent-left: "\f03b";
-
-  @indent-right: "\f03c";
-
-  @facetime-video: "\f03d";
-
-  @picture: "\f03e";
-
-  @pencil: "\f040";
-
-  @map-marker: "\f041";
-
-  @adjust: "\f042";
-
-  @tint: "\f043";
-
-  @edit: "\f044";
-
-  @share: "\f045";
-
-  @check: "\f046";
-
-  @move: "\f047";
-
-  @step-backward: "\f048";
-
-  @fast-backward: "\f049";
-
-  @backward: "\f04a";
-
-  @play: "\f04b";
-
-  @pause: "\f04c";
-
-  @stop: "\f04d";
-
-  @forward: "\f04e";
-
-  @fast-forward: "\f050";
-
-  @step-forward: "\f051";
-
-  @eject: "\f052";
-
-  @chevron-left: "\f053";
-
-  @chevron-right: "\f054";
-
-  @plus-sign: "\f055";
-
-  @minus-sign: "\f056";
-
-  @remove-sign: "\f057";
-
-  @ok-sign: "\f058";
-
-  @question-sign: "\f059";
-
-  @info-sign: "\f05a";
-
-  @screenshot: "\f05b";
-
-  @remove-circle: "\f05c";
-
-  @ok-circle: "\f05d";
-
-  @ban-circle: "\f05e";
-
-  @arrow-left: "\f060";
-
-  @arrow-right: "\f061";
-
-  @arrow-up: "\f062";
-
-  @arrow-down: "\f063";
-
-  @share-alt: "\f064";
-
-  @resize-full: "\f065";
-
-  @resize-small: "\f066";
-
-  @plus: "\f067";
-
-  @minus: "\f068";
-
-  @asterisk: "\f069";
-
-  @exclamation-sign: "\f06a";
-
-  @gift: "\f06b";
-
-  @leaf: "\f06c";
-
-  @fire: "\f06d";
-
-  @eye-open: "\f06e";
-
-  @eye-close: "\f070";
-
-  @warning-sign: "\f071";
-
-  @plane: "\f072";
-
-  @calendar: "\f073";
-
-  @random: "\f074";
-
-  @comment: "\f075";
-
-  @magnet: "\f076";
-
-  @chevron-up: "\f077";
-
-  @chevron-down: "\f078";
-
-  @retweet: "\f079";
-
-  @shopping-cart: "\f07a";
-
-  @folder-close: "\f07b";
-
-  @folder-open: "\f07c";
-
-  @resize-vertical: "\f07d";
-
-  @resize-horizontal: "\f07e";
-
-  @bar-chart: "\f080";
-
-  @twitter-sign: "\f081";
-
-  @facebook-sign: "\f082";
-
-  @camera-retro: "\f083";
-
-  @key: "\f084";
-
-  @cogs: "\f085";
-
-  @comments: "\f086";
-
-  @thumbs-up-alt: "\f087";
-
-  @thumbs-down-alt: "\f088";
-
-  @star-half: "\f089";
-
-  @heart-empty: "\f08a";
-
-  @signout: "\f08b";
-
-  @linkedin-sign: "\f08c";
-
-  @pushpin: "\f08d";
-
-  @external-link: "\f08e";
-
-  @signin: "\f090";
-
-  @trophy: "\f091";
-
-  @github-sign: "\f092";
-
-  @upload-alt: "\f093";
-
-  @lemon: "\f094";
-
-  @phone: "\f095";
-
-  @check-empty: "\f096";
-
-  @bookmark-empty: "\f097";
-
-  @phone-sign: "\f098";
-
-  @twitter: "\f099";
-
-  @facebook: "\f09a";
-
-  @github: "\f09b";
-
-  @unlock: "\f09c";
-
-  @credit-card: "\f09d";
-
-  @rss: "\f09e";
-
-  @hdd: "\f0a0";
-
-  @bullhorn: "\f0a1";
-
-  @bell: "\f0a2";
-
-  @certificate: "\f0a3";
-
-  @hand-right: "\f0a4";
-
-  @hand-left: "\f0a5";
-
-  @hand-up: "\f0a6";
-
-  @hand-down: "\f0a7";
-
-  @circle-arrow-left: "\f0a8";
-
-  @circle-arrow-right: "\f0a9";
-
-  @circle-arrow-up: "\f0aa";
-
-  @circle-arrow-down: "\f0ab";
-
-  @globe: "\f0ac";
-
-  @wrench: "\f0ad";
-
-  @tasks: "\f0ae";
-
-  @filter: "\f0b0";
-
-  @briefcase: "\f0b1";
-
-  @fullscreen: "\f0b2";
-
-  @group: "\f0c0";
-
-  @link: "\f0c1";
-
-  @cloud: "\f0c2";
-
-  @beaker: "\f0c3";
-
-  @cut: "\f0c4";
-
-  @copy: "\f0c5";
-
-  @paper-clip: "\f0c6";
-
-  @save: "\f0c7";
-
-  @sign-blank: "\f0c8";
-
-  @reorder: "\f0c9";
-
-  @list-ul: "\f0ca";
-
-  @list-ol: "\f0cb";
-
-  @strikethrough: "\f0cc";
-
-  @underline: "\f0cd";
-
-  @table: "\f0ce";
-
-  @magic: "\f0d0";
-
-  @truck: "\f0d1";
-
-  @pinterest: "\f0d2";
-
-  @pinterest-sign: "\f0d3";
-
-  @google-plus-sign: "\f0d4";
-
-  @google-plus: "\f0d5";
-
-  @money: "\f0d6";
-
-  @caret-down: "\f0d7";
-
-  @caret-up: "\f0d8";
-
-  @caret-left: "\f0d9";
-
-  @caret-right: "\f0da";
-
-  @columns: "\f0db";
-
-  @sort: "\f0dc";
-
-  @sort-down: "\f0dd";
-
-  @sort-up: "\f0de";
-
-  @envelope: "\f0e0";
-
-  @linkedin: "\f0e1";
-
-  @undo: "\f0e2";
-
-  @legal: "\f0e3";
-
-  @dashboard: "\f0e4";
-
-  @comment-alt: "\f0e5";
-
-  @comments-alt: "\f0e6";
-
-  @bolt: "\f0e7";
-
-  @sitemap: "\f0e8";
-
-  @umbrella: "\f0e9";
-
-  @paste: "\f0ea";
-
-  @lightbulb: "\f0eb";
-
-  @exchange: "\f0ec";
-
-  @cloud-download: "\f0ed";
-
-  @cloud-upload: "\f0ee";
-
-  @user-md: "\f0f0";
-
-  @stethoscope: "\f0f1";
-
-  @suitcase: "\f0f2";
-
-  @bell-alt: "\f0f3";
-
-  @coffee: "\f0f4";
-
-  @food: "\f0f5";
-
-  @file-text-alt: "\f0f6";
-
-  @building: "\f0f7";
-
-  @hospital: "\f0f8";
-
-  @ambulance: "\f0f9";
-
-  @medkit: "\f0fa";
-
-  @fighter-jet: "\f0fb";
-
-  @beer: "\f0fc";
-
-  @h-sign: "\f0fd";
-
-  @plus-sign-alt: "\f0fe";
-
-  @double-angle-left: "\f100";
-
-  @double-angle-right: "\f101";
-
-  @double-angle-up: "\f102";
-
-  @double-angle-down: "\f103";
-
-  @angle-left: "\f104";
-
-  @angle-right: "\f105";
-
-  @angle-up: "\f106";
-
-  @angle-down: "\f107";
-
-  @desktop: "\f108";
-
-  @laptop: "\f109";
-
-  @tablet: "\f10a";
-
-  @mobile-phone: "\f10b";
-
-  @circle-blank: "\f10c";
-
-  @quote-left: "\f10d";
-
-  @quote-right: "\f10e";
-
-  @spinner: "\f110";
-
-  @circle: "\f111";
-
-  @reply: "\f112";
-
-  @github-alt: "\f113";
-
-  @folder-close-alt: "\f114";
-
-  @folder-open-alt: "\f115";
-
-  @expand-alt: "\f116";
-
-  @collapse-alt: "\f117";
-
-  @smile: "\f118";
-
-  @frown: "\f119";
-
-  @meh: "\f11a";
-
-  @gamepad: "\f11b";
-
-  @keyboard: "\f11c";
-
-  @flag-alt: "\f11d";
-
-  @flag-checkered: "\f11e";
-
-  @terminal: "\f120";
-
-  @code: "\f121";
-
-  @reply-all: "\f122";
-
-  @mail-reply-all: "\f122";
-
-  @star-half-empty: "\f123";
-
-  @location-arrow: "\f124";
-
-  @crop: "\f125";
-
-  @code-fork: "\f126";
-
-  @unlink: "\f127";
-
-  @question: "\f128";
-
-  @info: "\f129";
-
-  @exclamation: "\f12a";
-
-  @superscript: "\f12b";
-
-  @subscript: "\f12c";
-
-  @eraser: "\f12d";
-
-  @puzzle-piece: "\f12e";
-
-  @microphone: "\f130";
-
-  @microphone-off: "\f131";
-
-  @shield: "\f132";
-
-  @calendar-empty: "\f133";
-
-  @fire-extinguisher: "\f134";
-
-  @rocket: "\f135";
-
-  @maxcdn: "\f136";
-
-  @chevron-sign-left: "\f137";
-
-  @chevron-sign-right: "\f138";
-
-  @chevron-sign-up: "\f139";
-
-  @chevron-sign-down: "\f13a";
-
-  @html5: "\f13b";
-
-  @css3: "\f13c";
-
-  @anchor: "\f13d";
-
-  @unlock-alt: "\f13e";
-
-  @bullseye: "\f140";
-
-  @ellipsis-horizontal: "\f141";
-
-  @ellipsis-vertical: "\f142";
-
-  @rss-sign: "\f143";
-
-  @play-sign: "\f144";
-
-  @ticket: "\f145";
-
-  @minus-sign-alt: "\f146";
-
-  @check-minus: "\f147";
-
-  @level-up: "\f148";
-
-  @level-down: "\f149";
-
-  @check-sign: "\f14a";
-
-  @edit-sign: "\f14b";
-
-  @external-link-sign: "\f14c";
-
-  @share-sign: "\f14d";
-
-  @compass: "\f14e";
-
-  @collapse: "\f150";
-
-  @collapse-top: "\f151";
-
-  @expand: "\f152";
-
-  @eur: "\f153";
-
-  @gbp: "\f154";
-
-  @usd: "\f155";
-
-  @inr: "\f156";
-
-  @jpy: "\f157";
-
-  @cny: "\f158";
-
-  @krw: "\f159";
-
-  @btc: "\f15a";
-
-  @file: "\f15b";
-
-  @file-text: "\f15c";
-
-  @sort-by-alphabet: "\f15d";
-
-  @sort-by-alphabet-alt: "\f15e";
-
-  @sort-by-attributes: "\f160";
-
-  @sort-by-attributes-alt: "\f161";
-
-  @sort-by-order: "\f162";
-
-  @sort-by-order-alt: "\f163";
-
-  @thumbs-up: "\f164";
-
-  @thumbs-down: "\f165";
-
-  @youtube-sign: "\f166";
-
-  @youtube: "\f167";
-
-  @xing: "\f168";
-
-  @xing-sign: "\f169";
-
-  @youtube-play: "\f16a";
-
-  @dropbox: "\f16b";
-
-  @stackexchange: "\f16c";
-
-  @instagram: "\f16d";
-
-  @flickr: "\f16e";
-
-  @adn: "\f170";
-
-  @bitbucket: "\f171";
-
-  @bitbucket-sign: "\f172";
-
-  @tumblr: "\f173";
-
-  @tumblr-sign: "\f174";
-
-  @long-arrow-down: "\f175";
-
-  @long-arrow-up: "\f176";
-
-  @long-arrow-left: "\f177";
-
-  @long-arrow-right: "\f178";
-
-  @apple: "\f179";
-
-  @windows: "\f17a";
-
-  @android: "\f17b";
-
-  @linux: "\f17c";
-
-  @dribbble: "\f17d";
-
-  @skype: "\f17e";
-
-  @foursquare: "\f180";
-
-  @trello: "\f181";
-
-  @female: "\f182";
-
-  @male: "\f183";
-
-  @gittip: "\f184";
-
-  @sun: "\f185";
-
-  @moon: "\f186";
-
-  @archive: "\f187";
-
-  @bug: "\f188";
-
-  @vk: "\f189";
-
-  @weibo: "\f18a";
-
-  @renren: "\f18b";
diff --git a/assets/less/bootstrap/forms.less b/assets/less/bootstrap/forms.less
deleted file mode 100644
index 10b4751..0000000
--- a/assets/less/bootstrap/forms.less
+++ /dev/null
@@ -1,690 +0,0 @@
-//
-// Forms
-// --------------------------------------------------
-
-
-// GENERAL STYLES
-// --------------
-
-// Make all forms have space below them
-form {
-  margin: 0 0 @baseLineHeight;
-}
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-
-// Groups of fields with labels on top (legends)
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: @baseLineHeight;
-  font-size: @baseFontSize * 1.5;
-  line-height: @baseLineHeight * 2;
-  color: @grayDark;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-
-  // Small
-  small {
-    font-size: @baseLineHeight * .75;
-    color: @grayLight;
-  }
-}
-
-// Set font for forms
-label,
-input,
-button,
-select,
-textarea {
-  #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
-}
-input,
-button,
-select,
-textarea {
-  font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
-}
-
-// Identify controls by their labels
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-
-// Form controls
-// -------------------------
-
-// Shared size and type resets
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: @baseLineHeight;
-  padding: 4px 6px;
-  margin-bottom: @baseLineHeight / 2;
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  color: @gray;
-  .border-radius(@inputBorderRadius);
-  vertical-align: middle;
-}
-
-// Reset appearance properties for textual inputs and textarea
-// Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
-input,
-textarea,
-.uneditable-input {
-  width: 206px; // plus 12px padding and 2px border
-}
-// Reset height since textareas have rows
-textarea {
-  height: auto;
-}
-// Everything else
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: @inputBackground;
-  border: 1px solid @inputBorder;
-  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
-  .transition(~"border linear .2s, box-shadow linear .2s");
-
-  // Focus state
-  &:focus {
-    border-color: rgba(82,168,236,.8);
-    outline: 0;
-    outline: thin dotted \9; /* IE6-9 */
-    .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
-  }
-}
-
-// Position radios and checkboxes better
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  *margin-top: 0; /* IE7 */
-  margin-top: 1px \9; /* IE8-9 */
-  line-height: normal;
-}
-
-// Reset width of input images, buttons, radios, checkboxes
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto; // Override of generic input selector
-}
-
-// Set the height of select and file controls to match text inputs
-select,
-input[type="file"] {
-  height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */
-  *margin-top: 4px; /* For IE7, add top margin to align select with labels */
-  line-height: @inputHeight;
-}
-
-// Make select elements obey height by applying a border
-select {
-  width: 220px; // default input width + 10px of padding that doesn't get applied
-  border: 1px solid @inputBorder;
-  background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color
-}
-
-// Make multiple select elements height not fixed
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-// Focus for select, file, radio, and checkbox
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  .tab-focus();
-}
-
-
-// Uneditable inputs
-// -------------------------
-
-// Make uneditable inputs look inactive
-.uneditable-input,
-.uneditable-textarea {
-  color: @grayLight;
-  background-color: darken(@inputBackground, 1%);
-  border-color: @inputBorder;
-  .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
-  cursor: not-allowed;
-}
-
-// For text that needs to appear as an input but should not be an input
-.uneditable-input {
-  overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
-  white-space: nowrap;
-}
-
-// Make uneditable textareas behave like a textarea
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-
-
-// Placeholder
-// -------------------------
-
-// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
-input,
-textarea {
-  .placeholder();
-}
-
-
-// CHECKBOXES & RADIOS
-// -------------------
-
-// Indent the labels to position radios/checkboxes as hanging
-.radio,
-.checkbox {
-  min-height: @baseLineHeight; // clear the floating input if there is no label text
-  padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-
-// Move the options list down to align with labels
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px; // has to be padding because margin collaspes
-}
-
-// Radios and checkboxes on same line
-// TODO v3: Convert .inline to .control-inline
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px; // space out consecutive inline controls
-}
-
-
-
-// INPUT SIZES
-// -----------
-
-// General classes for quick sizes
-.input-mini       { width: 60px; }
-.input-small      { width: 90px; }
-.input-medium     { width: 150px; }
-.input-large      { width: 210px; }
-.input-xlarge     { width: 270px; }
-.input-xxlarge    { width: 530px; }
-
-// Grid style input sizes
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-// Redeclare since the fluid row class is more specific
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-// Ensure input-prepend/append never wraps
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-
-
-
-// GRID SIZING FOR INPUTS
-// ----------------------
-
-// Grid sizes
-#grid > .input(@gridColumnWidth, @gridGutterWidth);
-
-// Control row for multiple inputs per line
-.controls-row {
-  .clearfix(); // Clear the float from controls
-}
-
-// Float to collapse white-space for proper grid alignment
-.controls-row [class*="span"],
-// Redeclare the fluid grid collapse since we undo the float for inputs
-.row-fluid .controls-row [class*="span"] {
-  float: left;
-}
-// Explicity set top padding on all checkboxes/radios, not just first-child
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
-  padding-top: 5px;
-}
-
-
-
-
-// DISABLED STATE
-// --------------
-
-// Disabled and read-only inputs
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: @inputDisabledBackground;
-}
-// Explicitly reset the colors here
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-
-
-
-
-// FORM FIELD FEEDBACK STATES
-// --------------------------
-
-// Warning
-.control-group.warning {
-  .formFieldState(@warningText, @warningText, @warningBackground);
-}
-// Error
-.control-group.error {
-  .formFieldState(@errorText, @errorText, @errorBackground);
-}
-// Success
-.control-group.success {
-  .formFieldState(@successText, @successText, @successBackground);
-}
-// Success
-.control-group.info {
-  .formFieldState(@infoText, @infoText, @infoBackground);
-}
-
-// HTML5 invalid states
-// Shares styles with the .control-group.error above
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-  &:focus {
-    border-color: darken(#ee5f5b, 10%);
-    @shadow: 0 0 6px lighten(#ee5f5b, 20%);
-    .box-shadow(@shadow);
-  }
-}
-
-
-
-// FORM ACTIONS
-// ------------
-
-.form-actions {
-  padding: (@baseLineHeight - 1) 20px @baseLineHeight;
-  margin-top: @baseLineHeight;
-  margin-bottom: @baseLineHeight;
-  background-color: @formActionsBackground;
-  border-top: 1px solid #e5e5e5;
-  .clearfix(); // Adding clearfix to allow for .pull-right button containers
-}
-
-
-
-// HELP TEXT
-// ---------
-
-.help-block,
-.help-inline {
-  color: lighten(@textColor, 15%); // lighten the text some for contrast
-}
-
-.help-block {
-  display: block; // account for any element using help-block
-  margin-bottom: @baseLineHeight / 2;
-}
-
-.help-inline {
-  display: inline-block;
-  .ie7-inline-block();
-  vertical-align: middle;
-  padding-left: 5px;
-}
-
-
-
-// INPUT GROUPS
-// ------------
-
-// Allow us to put symbols and text within the input field for a cleaner look
-.input-append,
-.input-prepend {
-  display: inline-block;
-  margin-bottom: @baseLineHeight / 2;
-  vertical-align: middle;
-  font-size: 0; // white space collapse hack
-  white-space: nowrap; // Prevent span and input from separating
-
-  // Reset the white space collapse hack
-  input,
-  select,
-  .uneditable-input,
-  .dropdown-menu,
-  .popover {
-    font-size: @baseFontSize;
-  }
-
-  input,
-  select,
-  .uneditable-input {
-    position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness
-    margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
-    *margin-left: 0;
-    vertical-align: top;
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    // Make input on top when focused so blue border and shadow always show
-    &:focus {
-      z-index: 2;
-    }
-  }
-  .add-on {
-    display: inline-block;
-    width: auto;
-    height: @baseLineHeight;
-    min-width: 16px;
-    padding: 4px 5px;
-    font-size: @baseFontSize;
-    font-weight: normal;
-    line-height: @baseLineHeight;
-    text-align: center;
-    text-shadow: 0 1px 0 @white;
-    background-color: @grayLighter;
-    border: 1px solid #ccc;
-  }
-  .add-on,
-  .btn,
-  .btn-group > .dropdown-toggle {
-    vertical-align: top;
-    .border-radius(0);
-  }
-  .active {
-    background-color: lighten(@green, 30);
-    border-color: @green;
-  }
-}
-
-.input-prepend {
-  .add-on,
-  .btn {
-    margin-right: -1px;
-  }
-  .add-on:first-child,
-  .btn:first-child {
-    // FYI, `.btn:first-child` accounts for a button group that's prepended
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-  }
-}
-
-.input-append {
-  input,
-  select,
-  .uneditable-input {
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-    + .btn-group .btn:last-child {
-      .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    }
-  }
-  .add-on,
-  .btn,
-  .btn-group {
-    margin-left: -1px;
-  }
-  .add-on:last-child,
-  .btn:last-child,
-  .btn-group:last-child > .dropdown-toggle {
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-  }
-}
-
-// Remove all border-radius for inputs with both prepend and append
-.input-prepend.input-append {
-  input,
-  select,
-  .uneditable-input {
-    .border-radius(0);
-    + .btn-group .btn {
-      .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-    }
-  }
-  .add-on:first-child,
-  .btn:first-child {
-    margin-right: -1px;
-    .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
-  }
-  .add-on:last-child,
-  .btn:last-child {
-    margin-left: -1px;
-    .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
-  }
-  .btn-group:first-child {
-    margin-left: 0;
-  }
-}
-
-
-
-
-// SEARCH FORM
-// -----------
-
-input.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
-  margin-bottom: 0; // Remove the default margin on all inputs
-  .border-radius(15px);
-}
-
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
-  .border-radius(0); // Override due to specificity
-}
-.form-search .input-append .search-query {
-  .border-radius(14px 0 0 14px);
-}
-.form-search .input-append .btn {
-  .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .search-query {
-  .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .btn {
-  .border-radius(14px 0 0 14px);
-}
-
-
-
-
-// HORIZONTAL & VERTICAL FORMS
-// ---------------------------
-
-// Common properties
-// -----------------
-
-.form-search,
-.form-inline,
-.form-horizontal {
-  input,
-  textarea,
-  select,
-  .help-inline,
-  .uneditable-input,
-  .input-prepend,
-  .input-append {
-    display: inline-block;
-    .ie7-inline-block();
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  // Re-hide hidden elements due to specificity
-  .hide {
-    display: none;
-  }
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
-  display: inline-block;
-}
-// Remove margin for input-prepend/-append
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-// Inline checkbox/radio labels (remove padding on left)
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-// Remove float and margin, set to inline-block
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-
-
-// Margin to space out fieldsets
-.control-group {
-  margin-bottom: @baseLineHeight / 2;
-}
-
-// Legend collapses margin, so next element is responsible for spacing
-legend + .control-group {
-  margin-top: @baseLineHeight;
-  -webkit-margin-top-collapse: separate;
-}
-
-// Horizontal-specific styles
-// --------------------------
-
-.form-horizontal {
-  // Increase spacing between groups
-  .control-group {
-    margin-bottom: @baseLineHeight;
-    .clearfix();
-  }
-  // Float the labels left
-  .control-label {
-    float: left;
-    width: @horizontalComponentOffset - 20;
-    padding-top: 5px;
-    text-align: right;
-  }
-  // Move over all input controls and content
-  .controls {
-    // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
-    // don't inherit the margin of the parent, in this case .controls
-    *display: inline-block;
-    *padding-left: 20px;
-    margin-left: @horizontalComponentOffset;
-    *margin-left: 0;
-    &:first-child {
-      *padding-left: @horizontalComponentOffset;
-    }
-  }
-  // Remove bottom margin on block level help text since that's accounted for on .control-group
-  .help-block {
-    margin-bottom: 0;
-  }
-  // And apply it only to .help-block instances that follow a form control
-  input,
-  select,
-  textarea,
-  .uneditable-input,
-  .input-prepend,
-  .input-append {
-    + .help-block {
-      margin-top: @baseLineHeight / 2;
-    }
-  }
-  // Move over buttons in .form-actions to align with .controls
-  .form-actions {
-    padding-left: @horizontalComponentOffset;
-  }
-}
diff --git a/assets/less/bootstrap/grid.less b/assets/less/bootstrap/grid.less
deleted file mode 100644
index 750d203..0000000
--- a/assets/less/bootstrap/grid.less
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Grid system
-// --------------------------------------------------
-
-
-// Fixed (940px)
-#grid > .core(@gridColumnWidth, @gridGutterWidth);
-
-// Fluid (940px)
-#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
-
-// Reset utility classes due to specificity
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
-  display: none;
-}
-
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
-  float: right;
-}
diff --git a/assets/less/bootstrap/hero-unit.less b/assets/less/bootstrap/hero-unit.less
deleted file mode 100644
index 763d86a..0000000
--- a/assets/less/bootstrap/hero-unit.less
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Hero unit
-// --------------------------------------------------
-
-
-.hero-unit {
-  padding: 60px;
-  margin-bottom: 30px;
-  font-size: 18px;
-  font-weight: 200;
-  line-height: @baseLineHeight * 1.5;
-  color: @heroUnitLeadColor;
-  background-color: @heroUnitBackground;
-  .border-radius(6px);
-  h1 {
-    margin-bottom: 0;
-    font-size: 60px;
-    line-height: 1;
-    color: @heroUnitHeadingColor;
-    letter-spacing: -1px;
-  }
-  li {
-    line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less
-  }
-}
diff --git a/assets/less/bootstrap/labels-badges.less b/assets/less/bootstrap/labels-badges.less
deleted file mode 100644
index 054a6ae..0000000
--- a/assets/less/bootstrap/labels-badges.less
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Labels and badges
-// --------------------------------------------------
-
-
-// Base classes
-.label,
-.badge {
-  display: inline-block;
-  padding: 2px 4px;
-  font-size: @baseFontSize * .846;
-  font-weight: bold;
-  line-height: 14px; // ensure proper line-height if floated
-  color: @white;
-  vertical-align: baseline;
-  white-space: nowrap;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-  background-color: @grayLight;
-}
-// Set unique padding and border-radii
-.label {
-  .border-radius(3px);
-}
-.badge {
-  padding-left: 9px;
-  padding-right: 9px;
-  .border-radius(9px);
-}
-
-// Empty labels/badges collapse
-.label,
-.badge {
-  &:empty {
-    display: none;
-  }
-}
-
-// Hover/focus state, but only for links
-a {
-  &.label:hover,
-  &.label:focus,
-  &.badge:hover,
-  &.badge:focus {
-    color: @white;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
-
-// Colors
-// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute)
-.label,
-.badge {
-  // Important (red)
-  &-important         { background-color: @errorText; }
-  &-important[href]   { background-color: darken(@errorText, 10%); }
-  // Warnings (orange)
-  &-warning           { background-color: @dangerRed; }
-  &-warning[href]     { background-color: darken(@dangerRed, 10%); }
-  // Success (green)
-  &-success           { background-color: @successText; }
-  &-success[href]     { background-color: darken(@successText, 10%); }
-  // Info (turquoise)
-  &-info              { background-color: @infoText; }
-  &-info[href]        { background-color: darken(@infoText, 10%); }
-  // Inverse (black)
-  &-inverse           { background-color: @grayDark; }
-  &-inverse[href]     { background-color: darken(@grayDark, 10%); }
-}
-
-// Quick fix for labels/badges in buttons
-.btn {
-  .label,
-  .badge {
-    position: relative;
-    top: -1px;
-  }
-}
-.btn-mini {
-  .label,
-  .badge {
-    top: 0;
-  }
-}
diff --git a/assets/less/bootstrap/layouts.less b/assets/less/bootstrap/layouts.less
deleted file mode 100644
index 24a2062..0000000
--- a/assets/less/bootstrap/layouts.less
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Layouts
-// --------------------------------------------------
-
-
-// Container (centered, fixed-width layouts)
-.container {
-  .container-fixed();
-}
-
-// Fluid layouts (left aligned, with sidebar, min- & max-width content)
-.container-fluid {
-  padding-right: @gridGutterWidth;
-  padding-left: @gridGutterWidth;
-  .clearfix();
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/media.less b/assets/less/bootstrap/media.less
deleted file mode 100644
index e461e44..0000000
--- a/assets/less/bootstrap/media.less
+++ /dev/null
@@ -1,55 +0,0 @@
-// Media objects
-// Source: http://stubbornella.org/content/?p=497
-// --------------------------------------------------
-
-
-// Common styles
-// -------------------------
-
-// Clear the floats
-.media,
-.media-body {
-  overflow: hidden;
-  *overflow: visible;
-  zoom: 1;
-}
-
-// Proper spacing between instances of .media
-.media,
-.media .media {
-  margin-top: 15px;
-}
-.media:first-child {
-  margin-top: 0;
-}
-
-// For images and videos, set to block
-.media-object {
-  display: block;
-}
-
-// Reset margins on headings for tighter default spacing
-.media-heading {
-  margin: 0 0 5px;
-}
-
-
-// Media image alignment
-// -------------------------
-
-.media > .pull-left {
-  margin-right: 10px;
-}
-.media > .pull-right {
-  margin-left: 10px;
-}
-
-
-// Media list variation
-// -------------------------
-
-// Undo default ul/ol styles
-.media-list {
-  margin-left: 0;
-  list-style: none;
-}
diff --git a/assets/less/bootstrap/mixins.less b/assets/less/bootstrap/mixins.less
deleted file mode 100644
index 92034a0..0000000
--- a/assets/less/bootstrap/mixins.less
+++ /dev/null
@@ -1,716 +0,0 @@
-//
-// Mixins
-// --------------------------------------------------
-
-
-// UTILITY MIXINS
-// --------------------------------------------------
-
-// Clearfix
-// --------
-// For clearing floats like a boss h5bp.com/q
-.clearfix {
-  *zoom: 1;
-  &:before,
-  &:after {
-    display: table;
-    content: "";
-    // Fixes Opera/contenteditable bug:
-    // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
-    line-height: 0;
-  }
-  &:after {
-    clear: both;
-  }
-}
-
-// Webkit-style focus
-// ------------------
-.tab-focus() {
-  // Default
-  outline: thin dotted #333;
-  // Webkit
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-// Center-align a block level element
-// ----------------------------------
-.center-block() {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-// IE7 inline-block
-// ----------------
-.ie7-inline-block() {
-  *display: inline; /* IE7 inline-block hack */
-  *zoom: 1;
-}
-
-// IE7 likes to collapse whitespace on either side of the inline-block elements.
-// Ems because we're attempting to match the width of a space character. Left
-// version is for form buttons, which typically come after other elements, and
-// right version is for icons, which come before. Applying both is ok, but it will
-// mean that space between those elements will be .6em (~2 space characters) in IE7,
-// instead of the 1 space in other browsers.
-.ie7-restore-left-whitespace() {
-  *margin-left: .3em;
-
-  &:first-child {
-    *margin-left: 0;
-  }
-}
-
-.ie7-restore-right-whitespace() {
-  *margin-right: .3em;
-}
-
-// Sizing shortcuts
-// -------------------------
-.size(@height, @width) {
-  width: @width;
-  height: @height;
-}
-.square(@size) {
-  .size(@size, @size);
-}
-
-// Placeholder text
-// -------------------------
-.placeholder(@color: @placeholderText) {
-  &:-moz-placeholder {
-    color: @color;
-  }
-  &:-ms-input-placeholder {
-    color: @color;
-  }
-  &::-webkit-input-placeholder {
-    color: @color;
-  }
-}
-
-// Text overflow
-// -------------------------
-// Requires inline-block or block for proper styling
-.text-overflow() {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-// CSS image replacement
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-
-// FONTS
-// --------------------------------------------------
-
-#font {
-  #family {
-    .serif() {
-      font-family: @serifFontFamily;
-    }
-    .sans-serif() {
-      font-family: @sansFontFamily;
-    }
-    .monospace() {
-      font-family: @monoFontFamily;
-    }
-  }
-  .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    font-size: @size;
-    font-weight: @weight;
-    line-height: @lineHeight;
-  }
-  .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .serif;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-  .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .sans-serif;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-  .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
-    #font > #family > .monospace;
-    #font > .shorthand(@size, @weight, @lineHeight);
-  }
-}
-
-
-// FORMS
-// --------------------------------------------------
-
-// Block level inputs
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
-  .box-sizing(border-box); // Makes inputs behave like true block-level elements
-}
-
-
-
-// Mixin for form field states
-.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
-  // Set the text color
-  .control-label,
-  .help-block,
-  .help-inline {
-    color: @textColor;
-  }
-  // Style inputs accordingly
-  .checkbox,
-  .radio,
-  input,
-  select,
-  textarea {
-    color: @textColor;
-  }
-  input,
-  select,
-  textarea {
-    border-color: @borderColor;
-    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
-    &:focus {
-      border-color: darken(@borderColor, 10%);
-      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%);
-      .box-shadow(@shadow);
-    }
-  }
-  // Give a small background color for input-prepend/-append
-  .input-prepend .add-on,
-  .input-append .add-on {
-    color: @textColor;
-    background-color: @backgroundColor;
-    border-color: @textColor;
-  }
-}
-
-
-
-// CSS3 PROPERTIES
-// --------------------------------------------------
-
-// Border Radius
-.border-radius(@radius) {
-  -webkit-border-radius: @radius;
-     -moz-border-radius: @radius;
-          border-radius: @radius;
-}
-
-// Single Corner Border Radius
-.border-top-left-radius(@radius) {
-  -webkit-border-top-left-radius: @radius;
-      -moz-border-radius-topleft: @radius;
-          border-top-left-radius: @radius;
-}
-.border-top-right-radius(@radius) {
-  -webkit-border-top-right-radius: @radius;
-      -moz-border-radius-topright: @radius;
-          border-top-right-radius: @radius;
-}
-.border-bottom-right-radius(@radius) {
-  -webkit-border-bottom-right-radius: @radius;
-      -moz-border-radius-bottomright: @radius;
-          border-bottom-right-radius: @radius;
-}
-.border-bottom-left-radius(@radius) {
-  -webkit-border-bottom-left-radius: @radius;
-      -moz-border-radius-bottomleft: @radius;
-          border-bottom-left-radius: @radius;
-}
-
-// Single Side Border Radius
-.border-top-radius(@radius) {
-  .border-top-right-radius(@radius);
-  .border-top-left-radius(@radius);
-}
-.border-right-radius(@radius) {
-  .border-top-right-radius(@radius);
-  .border-bottom-right-radius(@radius);
-}
-.border-bottom-radius(@radius) {
-  .border-bottom-right-radius(@radius);
-  .border-bottom-left-radius(@radius);
-}
-.border-left-radius(@radius) {
-  .border-top-left-radius(@radius);
-  .border-bottom-left-radius(@radius);
-}
-
-// Drop shadows
-.box-shadow(@shadow) {
-  -webkit-box-shadow: @shadow;
-     -moz-box-shadow: @shadow;
-          box-shadow: @shadow;
-}
-
-// Transitions
-.transition(@transition) {
-  -webkit-transition: @transition;
-     -moz-transition: @transition;
-       -o-transition: @transition;
-          transition: @transition;
-}
-.transition-delay(@transition-delay) {
-  -webkit-transition-delay: @transition-delay;
-     -moz-transition-delay: @transition-delay;
-       -o-transition-delay: @transition-delay;
-          transition-delay: @transition-delay;
-}
-.transition-duration(@transition-duration) {
-  -webkit-transition-duration: @transition-duration;
-     -moz-transition-duration: @transition-duration;
-       -o-transition-duration: @transition-duration;
-          transition-duration: @transition-duration;
-}
-
-// Transformations
-.rotate(@degrees) {
-  -webkit-transform: rotate(@degrees);
-     -moz-transform: rotate(@degrees);
-      -ms-transform: rotate(@degrees);
-       -o-transform: rotate(@degrees);
-          transform: rotate(@degrees);
-}
-.scale(@ratio) {
-  -webkit-transform: scale(@ratio);
-     -moz-transform: scale(@ratio);
-      -ms-transform: scale(@ratio);
-       -o-transform: scale(@ratio);
-          transform: scale(@ratio);
-}
-.translate(@x, @y) {
-  -webkit-transform: translate(@x, @y);
-     -moz-transform: translate(@x, @y);
-      -ms-transform: translate(@x, @y);
-       -o-transform: translate(@x, @y);
-          transform: translate(@x, @y);
-}
-.skew(@x, @y) {
-  -webkit-transform: skew(@x, @y);
-     -moz-transform: skew(@x, @y);
-      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885
-       -o-transform: skew(@x, @y);
-          transform: skew(@x, @y);
-  -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319
-}
-.translate3d(@x, @y, @z) {
-  -webkit-transform: translate3d(@x, @y, @z);
-     -moz-transform: translate3d(@x, @y, @z);
-       -o-transform: translate3d(@x, @y, @z);
-          transform: translate3d(@x, @y, @z);
-}
-
-// Backface visibility
-// Prevent browsers from flickering when using CSS 3D transforms.
-// Default value is `visible`, but can be changed to `hidden
-// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
-.backface-visibility(@visibility){
-	-webkit-backface-visibility: @visibility;
-	   -moz-backface-visibility: @visibility;
-	        backface-visibility: @visibility;
-}
-
-// Background clipping
-// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
-.background-clip(@clip) {
-  -webkit-background-clip: @clip;
-     -moz-background-clip: @clip;
-          background-clip: @clip;
-}
-
-// Background sizing
-.background-size(@size) {
-  -webkit-background-size: @size;
-     -moz-background-size: @size;
-       -o-background-size: @size;
-          background-size: @size;
-}
-
-
-// Box sizing
-.box-sizing(@boxmodel) {
-  -webkit-box-sizing: @boxmodel;
-     -moz-box-sizing: @boxmodel;
-          box-sizing: @boxmodel;
-}
-
-// User select
-// For selecting text on the page
-.user-select(@select) {
-  -webkit-user-select: @select;
-     -moz-user-select: @select;
-      -ms-user-select: @select;
-       -o-user-select: @select;
-          user-select: @select;
-}
-
-// Resize anything
-.resizable(@direction) {
-  resize: @direction; // Options: horizontal, vertical, both
-  overflow: auto; // Safari fix
-}
-
-// CSS3 Content Columns
-.content-columns(@columnCount, @columnGap: @gridGutterWidth) {
-  -webkit-column-count: @columnCount;
-     -moz-column-count: @columnCount;
-          column-count: @columnCount;
-  -webkit-column-gap: @columnGap;
-     -moz-column-gap: @columnGap;
-          column-gap: @columnGap;
-}
-
-// Optional hyphenation
-.hyphens(@mode: auto) {
-  word-wrap: break-word;
-  -webkit-hyphens: @mode;
-     -moz-hyphens: @mode;
-      -ms-hyphens: @mode;
-       -o-hyphens: @mode;
-          hyphens: @mode;
-}
-
-// Opacity
-.opacity(@opacity) {
-  opacity: @opacity / 100;
-  filter: ~"alpha(opacity=@{opacity})";
-}
-
-
-
-// BACKGROUNDS
-// --------------------------------------------------
-
-// Add an alphatransparency value to any background or border color (via Elyse Holladay)
-#translucent {
-  .background(@color: @white, @alpha: 1) {
-    background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
-  }
-  .border(@color: @white, @alpha: 1) {
-    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
-    .background-clip(padding-box);
-  }
-}
-
-// Gradient Bar Colors for buttons and alerts
-.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
-  color: @textColor;
-  text-shadow: @textShadow;
-  #gradient > .vertical(@primaryColor, @secondaryColor);
-  border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
-  border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
-}
-
-// Gradients
-#gradient {
-  .horizontal(@startColor: #555, @endColor: #333) {
-    background-color: @endColor;
-    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
-    background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10
-    background-repeat: repeat-x;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
-  }
-  .vertical(@startColor: #555, @endColor: #333) {
-    background-color: mix(@startColor, @endColor, 60%);
-    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
-    background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
-    background-repeat: repeat-x;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
-  }
-  .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
-    background-color: @endColor;
-    background-repeat: repeat-x;
-    background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
-    background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
-    background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
-    background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
-  }
-  .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
-    background-color: mix(@midColor, @endColor, 80%);
-    background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
-    background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
-    background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor);
-    background-repeat: no-repeat;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
-  }
-
-  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
-    background-color: mix(@midColor, @endColor, 80%);
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
-    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
-    background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
-    background-repeat: no-repeat;
-    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
-  }
-  .radial(@innerColor: #555, @outerColor: #333) {
-    background-color: @outerColor;
-    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
-    background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
-    background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
-    background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
-    background-repeat: no-repeat;
-  }
-  .striped(@color: #555, @angle: 45deg) {
-    background-color: @color;
-    background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
-    background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
-  }
-}
-// Reset filters for IE
-.reset-filter() {
-  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
-}
-
-
-
-// COMPONENT MIXINS
-// --------------------------------------------------
-
-// Horizontal dividers
-// -------------------------
-// Dividers (basically an hr) within dropdowns and nav lists
-.nav-divider(@top: #e5e5e5, @bottom: @white) {
-  // IE7 needs a set width since we gave a height. Restricting just
-  // to IE7 to keep the 1px left/right space in other browsers.
-  // It is unclear where IE is getting the extra space that we need
-  // to negative-margin away, but so it goes.
-  *width: 100%;
-  height: 1px;
-  margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: @top;
-  border-bottom: 1px solid @bottom;
-}
-
-// Button backgrounds
-// ------------------
-.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
-  // gradientBar will set the background to a pleasing blend of these, to support IE<=9
-  .gradientBar(@startColor, @endColor, @textColor, @textShadow);
-  *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  .reset-filter();
-
-  // in these cases the gradient won't cover the background, so we override
-  &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
-    color: @textColor;
-    background-color: @endColor;
-    *background-color: darken(@endColor, 5%);
-  }
-
-  // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
-  &:active,
-  &.active {
-    background-color: darken(@endColor, 10%) e("\9");
-  }
-}
-
-// Navbar vertical align
-// -------------------------
-// Vertically center elements in the navbar.
-// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
-.navbarVerticalAlign(@elementHeight) {
-  margin-top: (@navbarHeight - @elementHeight) / 2;
-}
-
-
-
-// Grid System
-// -----------
-
-// Centered container element
-.container-fixed() {
-  margin-right: auto;
-  margin-left: auto;
-  .clearfix();
-}
-
-// Table columns
-.tableColumns(@columnSpan: 1) {
-  float: none; // undo default grid column styles
-  width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
-  margin-left: 0; // undo default grid column styles
-}
-
-// Make a Grid
-// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
-.makeRow() {
-  margin-left: @gridGutterWidth * -1;
-  .clearfix();
-}
-.makeColumn(@columns: 1, @offset: 0) {
-  float: left;
-  margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2);
-  width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-}
-
-// The Grid
-#grid {
-
-  .core (@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
-    }
-
-    .span (@columns) {
-      width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-    }
-
-    .row {
-      margin-left: @gridGutterWidth * -1;
-      .clearfix();
-    }
-
-    [class*="span"] {
-      float: left;
-      min-height: 1px; // prevent collapsing columns
-      margin-left: @gridGutterWidth;
-    }
-
-    // Set the container width, and override it for fixed navbars in media queries
-    .container,
-    .navbar-static-top .container,
-    .navbar-fixed-top .container,
-    .navbar-fixed-bottom .container { .span(@gridColumns); }
-
-    // generate .spanX and .offsetX
-    .spanX (@gridColumns);
-    .offsetX (@gridColumns);
-
-  }
-
-  .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      .span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .offsetX (@index) when (@index > 0) {
-      .offset@{index} { .offset(@index); }
-      .offset@{index}:first-child { .offsetFirstChild(@index); }
-      .offsetX(@index - 1);
-    }
-    .offsetX (0) {}
-
-    .offset (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
-  	  *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .offsetFirstChild (@columns) {
-      margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
-      *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .span (@columns) {
-      width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
-      *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
-    }
-
-    .row-fluid {
-      width: 100%;
-      .clearfix();
-      [class*="span"] {
-        .input-block-level();
-        float: left;
-        margin-left: @fluidGridGutterWidth;
-        *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
-      }
-      [class*="span"]:first-child {
-        margin-left: 0;
-      }
-
-      // Space grid-sized controls properly if multiple per line
-      .controls-row [class*="span"] + [class*="span"] {
-        margin-left: @fluidGridGutterWidth;
-      }
-
-      // generate .spanX and .offsetX
-      .spanX (@gridColumns);
-      .offsetX (@gridColumns);
-    }
-
-  }
-
-  .input(@gridColumnWidth, @gridGutterWidth) {
-
-    .spanX (@index) when (@index > 0) {
-      input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
-      .spanX(@index - 1);
-    }
-    .spanX (0) {}
-
-    .span(@columns) {
-      width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
-    }
-
-    input,
-    textarea,
-    .uneditable-input {
-      margin-left: 0; // override margin-left from core grid system
-    }
-
-    // Space grid-sized controls properly if multiple per line
-    .controls-row [class*="span"] + [class*="span"] {
-      margin-left: @gridGutterWidth;
-    }
-
-    // generate .spanX
-    .spanX (@gridColumns);
-
-  }
-}
-
-.customTransition(@prop, @delay, @a, @b, @c, @d){
--webkit-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-   -moz-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-    -ms-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-     -o-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); 
-        transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); /* custom */
-
--webkit-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-   -moz-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-    -ms-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-     -o-transition-timing-function: cubic-bezier(@a, @b, @c, @d); 
-        transition-timing-function: cubic-bezier(@a, @b, @c, @d); /* custom */
-}
diff --git a/assets/less/bootstrap/modals.less b/assets/less/bootstrap/modals.less
deleted file mode 100644
index ca8f2dc..0000000
--- a/assets/less/bootstrap/modals.less
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Modals
-// --------------------------------------------------
-
-// Background
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: @zindexModalBackdrop;
-  background-color: @black;
-  // Fade for backdrop
-  &.fade { opacity: 0; }
-}
-
-.modal-backdrop,
-.modal-backdrop.fade.in {
-  .opacity(80);
-}
-
-// Base modal
-.modal {
-  position: fixed;
-  top: 10%;
-  left: 50%;
-  z-index: @zindexModal;
-  width: 560px;
-  margin-left: -280px;
-  background-color: @white;
-  border: 1px solid #999;
-  border: 1px solid rgba(0,0,0,.3);
-  *border: 1px solid #999; /* IE6-7 */
-  .border-radius(6px);
-  .box-shadow(0 3px 7px rgba(0,0,0,0.3));
-  .background-clip(padding-box);
-  // Remove focus outline from opened modal
-  outline: none;
-
-  &.fade {
-    .transition(e('opacity .3s linear, top .3s ease-out'));
-    top: -25%;
-  }
-  &.fade.in { top: 10%; }
-}
-.modal-header {
-  padding: 9px 15px;
-  border-bottom: 1px solid #eee;
-  // Close icon
-  .close { margin-top: 2px; }
-  // Heading
-  h3 {
-    margin: 0;
-    line-height: 30px;
-  }
-}
-
-// Body (where all modal content resides)
-.modal-body {
-  position: relative;
-  overflow-y: auto;
-  max-height: 600px;
-  padding: 15px;
-}
-// Remove bottom margin if need be
-.modal-form {
-  margin-bottom: 0;
-}
-
-// Footer (for actions)
-.modal-footer {
-  padding: 14px 15px 15px;
-  margin-bottom: 0;
-  text-align: right; // right align buttons
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  .border-radius(0 0 6px 6px);
-  .box-shadow(inset 0 1px 0 @white);
-  .clearfix(); // clear it in case folks use .pull-* classes on buttons
-
-  // Properly space out buttons
-  .btn + .btn {
-    margin-left: 5px;
-    margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
-  }
-  // but override that for button groups
-  .btn-group .btn + .btn {
-    margin-left: -1px;
-  }
-  // and override it for block buttons as well
-  .btn-block + .btn-block {
-    margin-left: 0;
-  }
-}
diff --git a/assets/less/bootstrap/navbar.less b/assets/less/bootstrap/navbar.less
deleted file mode 100644
index 5cf656e..0000000
--- a/assets/less/bootstrap/navbar.less
+++ /dev/null
@@ -1,496 +0,0 @@
-//
-// Navbars (Redux)
-// --------------------------------------------------
-
-
-// COMMON STYLES
-// -------------
-
-// Base class and wrapper
-.navbar {
-  overflow: visible;
-  margin-bottom: @baseLineHeight;
-
-  // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar
-  *position: relative;
-  *z-index: 2;
-}
-
-// Inner for background effects
-// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present
-.navbar-inner {
-  min-height: @navbarHeight;
-  padding-left:  20px;
-  padding-right: 20px;
-  #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground);
-  border: 1px solid @navbarBorder;
-  .border-radius(@baseBorderRadius);
-
-  // Prevent floats from breaking the navbar
-  .clearfix();
-}
-
-// Set width to auto for default container
-// We then reset it for fixed navbars in the #gridSystem mixin
-.navbar .container {
-  width: auto;
-}
-
-// Override the default collapsed state
-.nav-collapse.collapse {
-  height: auto;
-  overflow: visible;
-}
-
-
-// Brand: website or project name
-// -------------------------
-.navbar .brand {
-  float: left;
-  display: block;
-  // Vertically center the text given @navbarHeight
-  padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2);
-  margin-left: -20px; // negative indent to left-align the text down the page
-  font-size: 20px;
-  font-weight: 200;
-  color: @navbarBrandColor;
-  text-shadow: 0 1px 0 @navbarBackgroundHighlight;
-  &:hover,
-  &:focus {
-    text-decoration: none;
-  }
-}
-
-// Plain text in topbar
-// -------------------------
-.navbar-text {
-  margin-bottom: 0;
-  line-height: @navbarHeight;
-  color: @navbarText;
-}
-
-// Janky solution for now to account for links outside the .nav
-// -------------------------
-.navbar-link {
-  color: @navbarLinkColor;
-  &:hover,
-  &:focus {
-    color: @navbarLinkColorHover;
-  }
-}
-
-// Dividers in navbar
-// -------------------------
-.navbar .divider-vertical {
-  height: @navbarHeight;
-  margin: 0 9px;
-  border-left: 1px solid @navbarBackground;
-  border-right: 1px solid @navbarBackgroundHighlight;
-}
-
-// Buttons in navbar
-// -------------------------
-.navbar .btn,
-.navbar .btn-group {
-  .navbarVerticalAlign(30px); // Vertically center in navbar
-}
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn,
-.navbar .input-prepend .btn-group,
-.navbar .input-append .btn-group {
-  margin-top: 0; // then undo the margin here so we don't accidentally double it
-}
-
-// Navbar forms
-// -------------------------
-.navbar-form {
-  margin-bottom: 0; // remove default bottom margin
-  .clearfix();
-  input,
-  select,
-  .radio,
-  .checkbox {
-    .navbarVerticalAlign(30px); // Vertically center in navbar
-  }
-  input,
-  select,
-  .btn {
-    display: inline-block;
-    margin-bottom: 0;
-  }
-  input[type="image"],
-  input[type="checkbox"],
-  input[type="radio"] {
-    margin-top: 3px;
-  }
-  .input-append,
-  .input-prepend {
-    margin-top: 0px;
-    white-space: nowrap; // prevent two items from separating within a .navbar-form that has .pull-left
-    input {
-      margin-top: 0; // remove the margin on top since it's on the parent
-    }
-  }
-}
-
-// Navbar search
-// -------------------------
-.navbar-search {
-  position: relative;
-  float: left;
-  .navbarVerticalAlign(30px); // Vertically center in navbar
-  margin-bottom: 0;
-  .search-query {
-    margin-bottom: 0;
-    padding: 4px 14px;
-    #font > .sans-serif(13px, normal, 1);
-    .border-radius(15px); // redeclare because of specificity of the type attribute
-  }
-}
-
-
-
-// Static navbar
-// -------------------------
-
-.navbar-static-top {
-  position: static;
-  margin-bottom: 0; // remove 18px margin for default navbar
-  .navbar-inner {
-    .border-radius(0);
-  }
-}
-
-
-
-// Fixed navbar
-// -------------------------
-
-// Shared (top/bottom) styles
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: @zindexFixedNavbar;
-  margin-bottom: 0; // remove 18px margin for default navbar
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom .navbar-inner {
-  border-width: 1px 0 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
-  padding-left:  0;
-  padding-right: 0;
-  .border-radius(0);
-}
-
-// Reset container width
-// Required here as we reset the width earlier on and the grid mixins don't override early enough
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  #grid > .core > .span(@gridColumns);
-}
-
-// Fixed to top
-.navbar-fixed-top {
-  top: 0;
-}
-.navbar-fixed-top,
-.navbar-static-top {
-  .navbar-inner {
-    .box-shadow(~"0 1px 10px rgba(0,0,0,.1)");
-  }
-}
-
-// Fixed to bottom
-.navbar-fixed-bottom {
-  bottom: 0;
-  .navbar-inner {
-    .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)");
-  }
-}
-
-
-
-// NAVIGATION
-// ----------
-
-.navbar .nav {
-  position: relative;
-  left: 0;
-  display: block;
-  float: left;
-  margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
-  float: right; // redeclare due to specificity
-  margin-right: 0; // remove margin on float right nav
-}
-.navbar .nav > li {
-  float: left;
-}
-
-// Links
-.navbar .nav > li > a {
-  float: none;
-  // Vertically center the text given @navbarHeight
-  padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2);
-  color: @navbarLinkColor;
-  text-decoration: none;
-  text-shadow: 0 1px 0 @navbarBackgroundHighlight;
-}
-.navbar .nav .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-// Hover/focus
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
-  background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active
-  color: @navbarLinkColorHover;
-  text-decoration: none;
-}
-
-// Active nav items
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
-  color: @navbarLinkColorActive;
-  text-decoration: none;
-  background-color: @navbarLinkBackgroundActive;
-  .box-shadow(inset 0 3px 8px rgba(0,0,0,.125));
-}
-
-// Navbar button for toggling navbar items in responsive layouts
-// These definitions need to come after '.navbar .btn'
-.navbar .btn-navbar {
-  display: none;
-  float: right;
-  padding: 7px 10px;
-  margin-left: 5px;
-  margin-right: 5px;
-  .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%));
-  .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)");
-}
-.navbar .btn-navbar .icon-bar {
-  display: block;
-  width: 18px;
-  height: 2px;
-  background-color: #f5f5f5;
-  .border-radius(1px);
-  .box-shadow(0 1px 0 rgba(0,0,0,.25));
-}
-.btn-navbar .icon-bar + .icon-bar {
-  margin-top: 3px;
-}
-
-
-
-// Dropdown menus
-// --------------
-
-// Menu position and menu carets
-.navbar .nav > li > .dropdown-menu {
-  &:before {
-    content: '';
-    display: inline-block;
-    border-left:   7px solid transparent;
-    border-right:  7px solid transparent;
-    border-bottom: 7px solid #ccc;
-    border-bottom-color: @dropdownBorder;
-    position: absolute;
-    top: -7px;
-    left: 9px;
-  }
-  &:after {
-    content: '';
-    display: inline-block;
-    border-left:   6px solid transparent;
-    border-right:  6px solid transparent;
-    border-bottom: 6px solid @dropdownBackground;
-    position: absolute;
-    top: -6px;
-    left: 10px;
-  }
-}
-// Menu position and menu caret support for dropups via extra dropup class
-.navbar-fixed-bottom .nav > li > .dropdown-menu {
-  &:before {
-    border-top: 7px solid #ccc;
-    border-top-color: @dropdownBorder;
-    border-bottom: 0;
-    bottom: -7px;
-    top: auto;
-  }
-  &:after {
-    border-top: 6px solid @dropdownBackground;
-    border-bottom: 0;
-    bottom: -6px;
-    top: auto;
-  }
-}
-
-// Caret should match text color on hover/focus
-.navbar .nav li.dropdown > a:hover .caret,
-.navbar .nav li.dropdown > a:focus .caret {
-  border-top-color: @navbarLinkColorHover;
-  border-bottom-color: @navbarLinkColorHover;
-}
-
-// Remove background color from open dropdown
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
-  background-color: @navbarLinkBackgroundActive;
-  color: @navbarLinkColorActive;
-}
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
-  border-top-color: @navbarLinkColor;
-  border-bottom-color: @navbarLinkColor;
-}
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
-  border-top-color: @navbarLinkColorActive;
-  border-bottom-color: @navbarLinkColorActive;
-}
-
-// Right aligned menus need alt position
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
-  left: auto;
-  right: 0;
-  &:before {
-    left: auto;
-    right: 12px;
-  }
-  &:after {
-    left: auto;
-    right: 13px;
-  }
-  .dropdown-menu {
-    left: auto;
-    right: 100%;
-    margin-left: 0;
-    margin-right: -1px;
-    .border-radius(6px 0 6px 6px);
-  }
-}
-
-
-// Inverted navbar
-// -------------------------
-
-.navbar-inverse {
-
-  .navbar-inner {
-    #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground);
-    border-color: @navbarInverseBorder;
-  }
-
-  .brand,
-  .nav > li > a {
-    color: @navbarInverseLinkColor;
-    text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-    &:hover,
-    &:focus {
-      color: @navbarInverseLinkColorHover;
-    }
-  }
-
-  .brand {
-    color: @navbarInverseBrandColor;
-  }
-
-  .navbar-text {
-    color: @navbarInverseText;
-  }
-
-  .nav > li > a:focus,
-  .nav > li > a:hover {
-    background-color: @navbarInverseLinkBackgroundHover;
-    color: @navbarInverseLinkColorHover;
-  }
-
-  .nav .active > a,
-  .nav .active > a:hover,
-  .nav .active > a:focus {
-    color: @navbarInverseLinkColorActive;
-    background-color: @navbarInverseLinkBackgroundActive;
-  }
-
-  // Inline text links
-  .navbar-link {
-    color: @navbarInverseLinkColor;
-    &:hover,
-    &:focus {
-      color: @navbarInverseLinkColorHover;
-    }
-  }
-
-  // Dividers in navbar
-  .divider-vertical {
-    border-left-color: @navbarInverseBackground;
-    border-right-color: @navbarInverseBackgroundHighlight;
-  }
-
-  // Dropdowns
-  .nav li.dropdown.open > .dropdown-toggle,
-  .nav li.dropdown.active > .dropdown-toggle,
-  .nav li.dropdown.open.active > .dropdown-toggle {
-    background-color: @navbarInverseLinkBackgroundActive;
-    color: @navbarInverseLinkColorActive;
-  }
-  .nav li.dropdown > a:hover .caret,
-  .nav li.dropdown > a:focus .caret {
-    border-top-color: @navbarInverseLinkColorActive;
-    border-bottom-color: @navbarInverseLinkColorActive;
-  }
-  .nav li.dropdown > .dropdown-toggle .caret {
-    border-top-color: @navbarInverseLinkColor;
-    border-bottom-color: @navbarInverseLinkColor;
-  }
-  .nav li.dropdown.open > .dropdown-toggle .caret,
-  .nav li.dropdown.active > .dropdown-toggle .caret,
-  .nav li.dropdown.open.active > .dropdown-toggle .caret {
-    border-top-color: @navbarInverseLinkColorActive;
-    border-bottom-color: @navbarInverseLinkColorActive;
-  }
-
-  // Navbar search
-  .navbar-search {
-    .search-query {
-      color: @white;
-      background-color: @navbarInverseSearchBackground;
-      border-color: @navbarInverseSearchBorder;
-      .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)");
-      .transition(none);
-      .placeholder(@navbarInverseSearchPlaceholderColor);
-
-      // Focus states (we use .focused since IE7-8 and down doesn't support :focus)
-      &:focus,
-      &.focused {
-        padding: 5px 15px;
-        color: @grayDark;
-        text-shadow: 0 1px 0 @white;
-        background-color: @navbarInverseSearchBackgroundFocus;
-        border: 0;
-        .box-shadow(0 0 3px rgba(0,0,0,.15));
-        outline: 0;
-      }
-    }
-  }
-
-  // Navbar collapse button
-  .btn-navbar {
-    .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%));
-  }
-
-}
diff --git a/assets/less/bootstrap/navs.less b/assets/less/bootstrap/navs.less
deleted file mode 100644
index 0013179..0000000
--- a/assets/less/bootstrap/navs.less
+++ /dev/null
@@ -1,406 +0,0 @@
-//
-// Navs
-// --------------------------------------------------
-
-
-// BASE CLASS
-// ----------
-
-.nav {
-  margin-left: 0;
-  margin-bottom: @baseLineHeight;
-  list-style: none;
-}
-
-// Make links block level
-.nav > li > a {
-  display: block;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: @grayLighter;
-}
-
-// Prevent IE8 from misplacing imgs
-// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
-.nav > li > a > img {
-  max-width: none;
-}
-
-// Redeclare pull classes because of specifity
-.nav > .pull-right {
-  float: right;
-}
-
-// Nav headers (for dropdowns and lists)
-.nav-header {
-  display: block;
-  padding: 3px 15px;
-  line-height: @baseLineHeight;
-  color: @grayLight;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-}
-// Space them out when they follow another list item (link)
-.nav li + .nav-header {
-  margin-top: 9px;
-}
-
-
-
-// NAV LIST
-// --------
-
-.nav-list {
-  padding-left: 15px;
-  padding-right: 15px;
-  margin-bottom: 0;
-}
-.nav-list > li > a,
-.nav-list .nav-header {
-  margin-left:  -15px;
-  margin-right: -15px;
-  text-shadow: 0 1px 0 rgba(255,255,255,.5);
-}
-.nav-list > li > a {
-  padding: 3px 15px;
-}
-.nav-list > .active > a,
-.nav-list > .active > a:hover,
-.nav-list > .active > a:focus {
-  color: @white;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
-  background-color: @linkColor;
-}
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  margin-right: 2px;
-}
-// Dividers (basically an hr) within the dropdown
-.nav-list .divider {
-  .nav-divider();
-}
-
-
-
-// TABS AND PILLS
-// -------------
-
-// Common styles
-.nav-tabs,
-.nav-pills {
-  .clearfix();
-}
-.nav-tabs > li,
-.nav-pills > li {
-  float: left;
-}
-.nav-tabs > li > a,
-.nav-pills > li > a {
-  padding-right: 12px;
-  padding-left: 12px;
-  margin-right: 2px;
-  line-height: 14px; // keeps the overall height an even number
-}
-
-// TABS
-// ----
-
-// Give the tabs something to sit on
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-// Make the list-items overlay the bottom border
-.nav-tabs > li {
-  margin-bottom: -1px;
-}
-// Actual tabs (as links)
-.nav-tabs > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  line-height: @baseLineHeight;
-  border: 1px solid transparent;
-  .border-radius(4px 4px 0 0);
-  &:hover,
-  &:focus {
-    border-color: @grayLighter @grayLighter #ddd;
-  }
-}
-// Active state, and it's :hover/:focus to override normal :hover/:focus
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover,
-.nav-tabs > .active > a:focus {
-  color: @gray;
-  background-color: @bodyBackground;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-  cursor: default;
-}
-
-
-// PILLS
-// -----
-
-// Links rendered as pills
-.nav-pills > li > a {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  margin-top: 2px;
-  margin-bottom: 2px;
-  .border-radius(5px);
-}
-
-// Active state
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover,
-.nav-pills > .active > a:focus {
-  color: @white;
-  background-color: @linkColor;
-}
-
-
-
-// STACKED NAV
-// -----------
-
-// Stacked tabs and pills
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li > a {
-  margin-right: 0; // no need for the gap between nav items
-}
-
-// Tabs
-.nav-tabs.nav-stacked {
-  border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
-  border: 1px solid #ddd;
-  .border-radius(0);
-}
-.nav-tabs.nav-stacked > li:first-child > a {
-  .border-top-radius(4px);
-}
-.nav-tabs.nav-stacked > li:last-child > a {
-  .border-bottom-radius(4px);
-}
-.nav-tabs.nav-stacked > li > a:hover,
-.nav-tabs.nav-stacked > li > a:focus {
-  border-color: #ddd;
-  z-index: 2;
-}
-
-// Pills
-.nav-pills.nav-stacked > li > a {
-  margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
-  margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
-}
-
-
-
-// DROPDOWNS
-// ---------
-
-.nav-tabs .dropdown-menu {
-  .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu
-}
-.nav-pills .dropdown-menu {
-  .border-radius(6px); // make rounded corners match the pills
-}
-
-// Default dropdown links
-// -------------------------
-// Make carets use linkColor to start
-.nav .dropdown-toggle .caret {
-  border-top-color: @linkColor;
-  border-bottom-color: @linkColor;
-  margin-top: 6px;
-}
-.nav .dropdown-toggle:hover .caret,
-.nav .dropdown-toggle:focus .caret {
-  border-top-color: @linkColorHover;
-  border-bottom-color: @linkColorHover;
-}
-/* move down carets for tabs */
-.nav-tabs .dropdown-toggle .caret {
-  margin-top: 8px;
-}
-
-// Active dropdown links
-// -------------------------
-.nav .active .dropdown-toggle .caret {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.nav-tabs .active .dropdown-toggle .caret {
-  border-top-color: @gray;
-  border-bottom-color: @gray;
-}
-
-// Active:hover/:focus dropdown links
-// -------------------------
-.nav > .dropdown.active > a:hover,
-.nav > .dropdown.active > a:focus {
-  cursor: pointer;
-}
-
-// Open dropdowns
-// -------------------------
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover,
-.nav > li.dropdown.open.active > a:focus {
-  color: @white;
-  background-color: @grayLight;
-  border-color: @grayLight;
-}
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret,
-.nav li.dropdown.open a:focus .caret {
-  border-top-color: @white;
-  border-bottom-color: @white;
-  .opacity(100);
-}
-
-// Dropdowns in stacked tabs
-.tabs-stacked .open > a:hover,
-.tabs-stacked .open > a:focus {
-  border-color: @grayLight;
-}
-
-
-
-// TABBABLE
-// --------
-
-
-// COMMON STYLES
-// -------------
-
-// Clear any floats
-.tabbable {
-  .clearfix();
-}
-.tab-content {
-  overflow: auto; // prevent content from running below tabs
-}
-
-// Remove border on bottom, left, right
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
-  border-bottom: 0;
-}
-
-// Show/hide tabbable areas
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
-  display: none;
-}
-.tab-content > .active,
-.pill-content > .active {
-  display: block;
-}
-
-
-// BOTTOM
-// ------
-
-.tabs-below > .nav-tabs {
-  border-top: 1px solid #ddd;
-}
-.tabs-below > .nav-tabs > li {
-  margin-top: -1px;
-  margin-bottom: 0;
-}
-.tabs-below > .nav-tabs > li > a {
-  .border-radius(0 0 4px 4px);
-  &:hover,
-  &:focus {
-    border-bottom-color: transparent;
-    border-top-color: #ddd;
-  }
-}
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover,
-.tabs-below > .nav-tabs > .active > a:focus {
-  border-color: transparent #ddd #ddd #ddd;
-}
-
-// LEFT & RIGHT
-// ------------
-
-// Common styles
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
-  float: none;
-}
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
-  min-width: 74px;
-  margin-right: 0;
-  margin-bottom: 3px;
-}
-
-// Tabs on the left
-.tabs-left > .nav-tabs {
-  float: left;
-  margin-right: 19px;
-  border-right: 1px solid #ddd;
-}
-.tabs-left > .nav-tabs > li > a {
-  margin-right: -1px;
-  .border-radius(4px 0 0 4px);
-}
-.tabs-left > .nav-tabs > li > a:hover,
-.tabs-left > .nav-tabs > li > a:focus {
-  border-color: @grayLighter #ddd @grayLighter @grayLighter;
-}
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover,
-.tabs-left > .nav-tabs .active > a:focus {
-  border-color: #ddd transparent #ddd #ddd;
-  *border-right-color: @white;
-}
-
-// Tabs on the right
-.tabs-right > .nav-tabs {
-  float: right;
-  margin-left: 19px;
-  border-left: 1px solid #ddd;
-}
-.tabs-right > .nav-tabs > li > a {
-  margin-left: -1px;
-  .border-radius(0 4px 4px 0);
-}
-.tabs-right > .nav-tabs > li > a:hover,
-.tabs-right > .nav-tabs > li > a:focus {
-  border-color: @grayLighter @grayLighter @grayLighter #ddd;
-}
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover,
-.tabs-right > .nav-tabs .active > a:focus {
-  border-color: #ddd #ddd #ddd transparent;
-  *border-left-color: @white;
-}
-
-
-
-// DISABLED STATES
-// ---------------
-
-// Gray out text
-.nav > .disabled > a {
-  color: @grayLight;
-}
-// Nuke hover/focus effects
-.nav > .disabled > a:hover,
-.nav > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  cursor: default;
-}
diff --git a/assets/less/bootstrap/pager.less b/assets/less/bootstrap/pager.less
deleted file mode 100644
index 1476188..0000000
--- a/assets/less/bootstrap/pager.less
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Pager pagination
-// --------------------------------------------------
-
-
-.pager {
-  margin: @baseLineHeight 0;
-  list-style: none;
-  text-align: center;
-  .clearfix();
-}
-.pager li {
-  display: inline;
-}
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  .border-radius(15px);
-}
-.pager li > a:hover,
-.pager li > a:focus {
-  text-decoration: none;
-  background-color: #f5f5f5;
-}
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
-  color: @grayLight;
-  background-color: #fff;
-  cursor: default;
-}
\ No newline at end of file
diff --git a/assets/less/bootstrap/pagination.less b/assets/less/bootstrap/pagination.less
deleted file mode 100644
index a789db2..0000000
--- a/assets/less/bootstrap/pagination.less
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-
-// Space out pagination from surrounding content
-.pagination {
-  margin: @baseLineHeight 0;
-}
-
-.pagination ul {
-  // Allow for text-based alignment
-  display: inline-block;
-  .ie7-inline-block();
-  // Reset default ul styles
-  margin-left: 0;
-  margin-bottom: 0;
-  // Visuals
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-.pagination ul > li {
-  display: inline; // Remove list-style and block-level defaults
-}
-.pagination ul > li > a,
-.pagination ul > li > span {
-  float: left; // Collapse white-space
-  padding: 4px 12px;
-  line-height: @baseLineHeight;
-  text-decoration: none;
-  background-color: @paginationBackground;
-  border: 1px solid @paginationBorder;
-  border-left-width: 0;
-}
-.pagination ul > li > a:hover,
-.pagination ul > li > a:focus,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  background-color: @paginationActiveBackground;
-}
-.pagination ul > .active > a,
-.pagination ul > .active > span {
-  color: @grayLight;
-  cursor: default;
-}
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover,
-.pagination ul > .disabled > a:focus {
-  color: @grayLight;
-  background-color: transparent;
-  cursor: default;
-}
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
-  border-left-width: 1px;
-  .border-left-radius(@baseBorderRadius);
-}
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
-  .border-right-radius(@baseBorderRadius);
-}
-
-
-// Alignment
-// --------------------------------------------------
-
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-large {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingLarge;
-    font-size: @fontSizeLarge;
-  }
-  ul > li:first-child > a,
-  ul > li:first-child > span {
-    .border-left-radius(@borderRadiusLarge);
-  }
-  ul > li:last-child > a,
-  ul > li:last-child > span {
-    .border-right-radius(@borderRadiusLarge);
-  }
-}
-
-// Small and mini
-.pagination-mini,
-.pagination-small {
-  ul > li:first-child > a,
-  ul > li:first-child > span {
-    .border-left-radius(@borderRadiusSmall);
-  }
-  ul > li:last-child > a,
-  ul > li:last-child > span {
-    .border-right-radius(@borderRadiusSmall);
-  }
-}
-
-// Small
-.pagination-small {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingSmall;
-    font-size: @fontSizeSmall;
-  }
-}
-// Mini
-.pagination-mini {
-  ul > li > a,
-  ul > li > span {
-    padding: @paddingMini;
-    font-size: @fontSizeMini;
-  }
-}
diff --git a/assets/less/bootstrap/popovers.less b/assets/less/bootstrap/popovers.less
deleted file mode 100644
index aae35c8..0000000
--- a/assets/less/bootstrap/popovers.less
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-// Popovers
-// --------------------------------------------------
-
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: @zindexPopover;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  text-align: left; // Reset given new insertion method
-  background-color: @popoverBackground;
-  -webkit-background-clip: padding-box;
-     -moz-background-clip: padding;
-          background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0,0,0,.2);
-  .border-radius(6px);
-  .box-shadow(0 5px 10px rgba(0,0,0,.2));
-
-  // Overrides for proper insertion
-  white-space: normal;
-
-  // Offset the popover to account for the popover arrow
-  &.top     { margin-top: -10px; }
-  &.right   { margin-left: 10px; }
-  &.bottom  { margin-top: 10px; }
-  &.left    { margin-left: -10px; }
-}
-
-.popover-title {
-  margin: 0; // reset heading margin
-  padding: 8px 14px;
-  font-size: 14px;
-  font-weight: normal;
-  line-height: 18px;
-  background-color: @popoverTitleBackground;
-  border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
-  .border-radius(5px 5px 0 0);
-
-  &:empty {
-    display: none;
-  }
-}
-
-.popover-content {
-  padding: 9px 14px;
-}
-
-// Arrows
-//
-// .arrow is outer, .arrow:after is inner
-
-.popover .arrow,
-.popover .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.popover .arrow {
-  border-width: @popoverArrowOuterWidth;
-}
-.popover .arrow:after {
-  border-width: @popoverArrowWidth;
-  content: "";
-}
-
-.popover {
-  &.top .arrow {
-    left: 50%;
-    margin-left: -@popoverArrowOuterWidth;
-    border-bottom-width: 0;
-    border-top-color: #999; // IE8 fallback
-    border-top-color: @popoverArrowOuterColor;
-    bottom: -@popoverArrowOuterWidth;
-    &:after {
-      bottom: 1px;
-      margin-left: -@popoverArrowWidth;
-      border-bottom-width: 0;
-      border-top-color: @popoverArrowColor;
-    }
-  }
-  &.right .arrow {
-    top: 50%;
-    left: -@popoverArrowOuterWidth;
-    margin-top: -@popoverArrowOuterWidth;
-    border-left-width: 0;
-    border-right-color: #999; // IE8 fallback
-    border-right-color: @popoverArrowOuterColor;
-    &:after {
-      left: 1px;
-      bottom: -@popoverArrowWidth;
-      border-left-width: 0;
-      border-right-color: @popoverArrowColor;
-    }
-  }
-  &.bottom .arrow {
-    left: 50%;
-    margin-left: -@popoverArrowOuterWidth;
-    border-top-width: 0;
-    border-bottom-color: #999; // IE8 fallback
-    border-bottom-color: @popoverArrowOuterColor;
-    top: -@popoverArrowOuterWidth;
-    &:after {
-      top: 1px;
-      margin-left: -@popoverArrowWidth;
-      border-top-width: 0;
-      border-bottom-color: @popoverArrowColor;
-    }
-  }
-
-  &.left .arrow {
-    top: 50%;
-    right: -@popoverArrowOuterWidth;
-    margin-top: -@popoverArrowOuterWidth;
-    border-right-width: 0;
-    border-left-color: #999; // IE8 fallback
-    border-left-color: @popoverArrowOuterColor;
-    &:after {
-      right: 1px;
-      border-right-width: 0;
-      border-left-color: @popoverArrowColor;
-      bottom: -@popoverArrowWidth;
-    }
-  }
-
-}
diff --git a/assets/less/bootstrap/progress-bars.less b/assets/less/bootstrap/progress-bars.less
deleted file mode 100644
index 5e0c3dd..0000000
--- a/assets/less/bootstrap/progress-bars.less
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Progress bars
-// --------------------------------------------------
-
-
-// ANIMATIONS
-// ----------
-
-// Webkit
-@-webkit-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// Firefox
-@-moz-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// IE9
-@-ms-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// Opera
-@-o-keyframes progress-bar-stripes {
-  from  { background-position: 0 0; }
-  to    { background-position: 40px 0; }
-}
-
-// Spec
-@keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-
-
-// THE BARS
-// --------
-
-// Outer container
-.progress {
-  overflow: hidden;
-  height: @baseLineHeight;
-  margin-bottom: @baseLineHeight;
-  #gradient > .vertical(#f5f5f5, #f9f9f9);
-  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
-  .border-radius(@baseBorderRadius);
-}
-
-// Bar of progress
-.progress .bar {
-  width: 0%;
-  height: 100%;
-  color: @white;
-  float: left;
-  font-size: 12px;
-  text-align: center;
-  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-  #gradient > .vertical(#149bdf, #0480be);
-  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
-  .box-sizing(border-box);
-  .transition(width .6s ease);
-}
-.progress .bar + .bar {
-  .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)");
-}
-
-// Striped bars
-.progress-striped .bar {
-  #gradient > .striped(#149bdf);
-  .background-size(40px 40px);
-}
-
-// Call animation for the active one
-.progress.active .bar {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-     -moz-animation: progress-bar-stripes 2s linear infinite;
-      -ms-animation: progress-bar-stripes 2s linear infinite;
-       -o-animation: progress-bar-stripes 2s linear infinite;
-          animation: progress-bar-stripes 2s linear infinite;
-}
-
-
-
-// COLORS
-// ------
-
-// Danger (red)
-.progress-danger .bar, .progress .bar-danger {
-  #gradient > .vertical(#ee5f5b, #c43c35);
-}
-.progress-danger.progress-striped .bar, .progress-striped .bar-danger {
-  #gradient > .striped(#ee5f5b);
-}
-
-// Success (green)
-.progress-success .bar, .progress .bar-success {
-  #gradient > .vertical(#62c462, #57a957);
-}
-.progress-success.progress-striped .bar, .progress-striped .bar-success {
-  #gradient > .striped(#62c462);
-}
-
-// Info (teal)
-.progress-info .bar, .progress .bar-info {
-  #gradient > .vertical(#5bc0de, #339bb9);
-}
-.progress-info.progress-striped .bar, .progress-striped .bar-info {
-  #gradient > .striped(#5bc0de);
-}
-
-// Warning (orange)
-.progress-warning .bar, .progress .bar-warning {
-  #gradient > .vertical(lighten(@orange, 15%), @orange);
-}
-.progress-warning.progress-striped .bar, .progress-striped .bar-warning {
-  #gradient > .striped(lighten(@orange, 15%));
-}
diff --git a/assets/less/bootstrap/reset.less b/assets/less/bootstrap/reset.less
deleted file mode 100644
index 4806bd5..0000000
--- a/assets/less/bootstrap/reset.less
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-// Reset CSS
-// Adapted from http://github.com/necolas/normalize.css
-// --------------------------------------------------
-
-
-// Display in IE6-9 and FF3
-// -------------------------
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-
-// Display block in IE6-9 and FF3
-// -------------------------
-
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-
-// Prevents modern browsers from displaying 'audio' without controls
-// -------------------------
-
-audio:not([controls]) {
-    display: none;
-}
-
-// Base settings
-// -------------------------
-
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-      -ms-text-size-adjust: 100%;
-}
-// Focus states
-a:focus {
-  .tab-focus();
-}
-// Hover & Active
-a:hover,
-a:active {
-  outline: 0;
-}
-
-// Prevents sub and sup affecting line-height in all browsers
-// -------------------------
-
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-
-// Img border in a's and image quality
-// -------------------------
-
-img {
-  /* Responsive images (ensure images don't scale beyond their parents) */
-  max-width: 100%; /* Part 1: Set a maxium relative to the parent */
-  width: auto\9; /* IE7-8 need help adjusting responsive images */
-  height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */
-
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-
-// Prevent max-width from affecting Google Maps
-#map_canvas img,
-.google-maps img {
-  max-width: none;
-}
-
-// Forms
-// -------------------------
-
-// Font size in all browsers, margin changes, misc consistency
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button,
-input {
-  *overflow: visible; // Inner spacing ie IE6/7
-  line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
-  padding: 0;
-  border: 0;
-}
-button,
-html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls.
-input[type="reset"],
-input[type="submit"] {
-    -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS.
-    cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
-    cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-input[type="search"] { // Appearance in Safari/Chrome
-  .box-sizing(content-box);
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
-}
-textarea {
-  overflow: auto; // Remove vertical scrollbar in IE6-9
-  vertical-align: top; // Readability and alignment cross-browser
-}
-
-
-// Printing
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
-
-@media print {
-
-  * {
-    text-shadow: none !important;
-    color: #000 !important; // Black prints faster: h5bp.com/s
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-
-  // Don't show links for images, or javascript/internal links
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-
-  thead {
-    display: table-header-group; // h5bp.com/t
-  }
-
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-
-  img {
-    max-width: 100% !important;
-  }
-
-  @page {
-    margin: 0.5cm;
-  }
-
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-}
diff --git a/assets/less/bootstrap/responsive-1200px-min.less b/assets/less/bootstrap/responsive-1200px-min.less
deleted file mode 100644
index 4f35ba6..0000000
--- a/assets/less/bootstrap/responsive-1200px-min.less
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Responsive: Large desktop and up
-// --------------------------------------------------
-
-
-@media (min-width: 1200px) {
-
-  // Fixed grid
-  #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
-
-  // Fluid grid
-  #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
-
-  // Input grid
-  #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
-
-  // Thumbnails
-  .thumbnails {
-    margin-left: -@gridGutterWidth1200;
-  }
-  .thumbnails > li {
-    margin-left: @gridGutterWidth1200;
-  }
-  .row-fluid .thumbnails {
-    margin-left: 0;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-767px-max.less b/assets/less/bootstrap/responsive-767px-max.less
deleted file mode 100644
index 128f4ce..0000000
--- a/assets/less/bootstrap/responsive-767px-max.less
+++ /dev/null
@@ -1,193 +0,0 @@
-//
-// Responsive: Landscape phone to desktop/tablet
-// --------------------------------------------------
-
-
-@media (max-width: 767px) {
-
-  // Padding to set content in a bit
-  body {
-    padding-left: 20px;
-    padding-right: 20px;
-  }
-  // Negative indent the now static "fixed" navbar
-  .navbar-fixed-top,
-  .navbar-fixed-bottom,
-  .navbar-static-top {
-    margin-left: -20px;
-    margin-right: -20px;
-  }
-  // Remove padding on container given explicit padding set on body
-  .container-fluid {
-    padding: 0;
-  }
-
-  // TYPOGRAPHY
-  // ----------
-  // Reset horizontal dl
-  .dl-horizontal {
-    dt {
-      float: none;
-      clear: none;
-      width: auto;
-      text-align: left;
-    }
-    dd {
-      margin-left: 0;
-    }
-  }
-
-  // GRID & CONTAINERS
-  // -----------------
-  // Remove width from containers
-  .container {
-    width: auto;
-  }
-  // Fluid rows
-  .row-fluid {
-    width: 100%;
-  }
-  // Undo negative margin on rows and thumbnails
-  .row,
-  .thumbnails {
-    margin-left: 0;
-  }
-  .thumbnails > li {
-    float: none;
-    margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present
-  }
-  // Make all grid-sized elements block level again
-  [class*="span"],
-  .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing
-  .row-fluid [class*="span"] {
-    float: none;
-    display: block;
-    width: 100%;
-    margin-left: 0;
-    .box-sizing(border-box);
-  }
-  .span12,
-  .row-fluid .span12 {
-    width: 100%;
-    .box-sizing(border-box);
-  }
-  .row-fluid [class*="offset"]:first-child {
-    margin-left: 0;
-  }
-
-  // FORM FIELDS
-  // -----------
-  // Make span* classes full width
-  .input-large,
-  .input-xlarge,
-  .input-xxlarge,
-  input[class*="span"],
-  select[class*="span"],
-  textarea[class*="span"],
-  .uneditable-input {
-    .input-block-level();
-  }
-  // But don't let it screw up prepend/append inputs
-  .input-prepend input,
-  .input-append input,
-  .input-prepend input[class*="span"],
-  .input-append input[class*="span"] {
-    display: inline-block; // redeclare so they don't wrap to new lines
-    width: auto;
-  }
-  .controls-row [class*="span"] + [class*="span"] {
-    margin-left: 0;
-  }
-
-  // Modals
-  .modal {
-    position: fixed;
-    top:   20px;
-    left:  20px;
-    right: 20px;
-    width: auto;
-    margin: 0;
-    &.fade  { top: -100px; }
-    &.fade.in { top: 20px; }
-  }
-
-}
-
-
-
-// UP TO LANDSCAPE PHONE
-// ---------------------
-
-@media (max-width: 480px) {
-
-  // Smooth out the collapsing/expanding nav
-  .nav-collapse {
-    -webkit-transform: translate3d(0, 0, 0); // activate the GPU
-  }
-
-  // Block level the page header small tag for readability
-  .page-header h1 small {
-    display: block;
-    line-height: @baseLineHeight;
-  }
-
-  // Update checkboxes for iOS
-  input[type="checkbox"],
-  input[type="radio"] {
-    border: 1px solid #ccc;
-  }
-
-  // Remove the horizontal form styles
-  .form-horizontal {
-    .control-label {
-      float: none;
-      width: auto;
-      padding-top: 0;
-      text-align: left;
-    }
-    // Move over all input controls and content
-    .controls {
-      margin-left: 0;
-    }
-    // Move the options list down to align with labels
-    .control-list {
-      padding-top: 0; // has to be padding because margin collaspes
-    }
-    // Move over buttons in .form-actions to align with .controls
-    .form-actions {
-      padding-left: 10px;
-      padding-right: 10px;
-    }
-  }
-
-  // Medias
-  // Reset float and spacing to stack
-  .media .pull-left,
-  .media .pull-right  {
-    float: none;
-    display: block;
-    margin-bottom: 10px;
-  }
-  // Remove side margins since we stack instead of indent
-  .media-object {
-    margin-right: 0;
-    margin-left: 0;
-  }
-
-  // Modals
-  .modal {
-    top:   10px;
-    left:  10px;
-    right: 10px;
-  }
-  .modal-header .close {
-    padding: 10px;
-    margin: -10px;
-  }
-
-  // Carousel
-  .carousel-caption {
-    position: static;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-768px-979px.less b/assets/less/bootstrap/responsive-768px-979px.less
deleted file mode 100644
index 8e8c486..0000000
--- a/assets/less/bootstrap/responsive-768px-979px.less
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Responsive: Tablet to desktop
-// --------------------------------------------------
-
-
-@media (min-width: 768px) and (max-width: 979px) {
-
-  // Fixed grid
-  #grid > .core(@gridColumnWidth768, @gridGutterWidth768);
-
-  // Fluid grid
-  #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768);
-
-  // Input grid
-  #grid > .input(@gridColumnWidth768, @gridGutterWidth768);
-
-  // No need to reset .thumbnails here since it's the same @gridGutterWidth
-
-}
diff --git a/assets/less/bootstrap/responsive-navbar.less b/assets/less/bootstrap/responsive-navbar.less
deleted file mode 100644
index 21cd3ba..0000000
--- a/assets/less/bootstrap/responsive-navbar.less
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Responsive: Navbar
-// --------------------------------------------------
-
-
-// TABLETS AND BELOW
-// -----------------
-@media (max-width: @navbarCollapseWidth) {
-
-  // UNFIX THE TOPBAR
-  // ----------------
-  // Remove any padding from the body
-  body {
-    padding-top: 0;
-  }
-  // Unfix the navbars
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    position: static;
-  }
-  .navbar-fixed-top {
-    margin-bottom: @baseLineHeight;
-  }
-  .navbar-fixed-bottom {
-    margin-top: @baseLineHeight;
-  }
-  .navbar-fixed-top .navbar-inner,
-  .navbar-fixed-bottom .navbar-inner {
-    padding: 5px;
-  }
-  .navbar .container {
-    width: auto;
-    padding: 0;
-  }
-  // Account for brand name
-  .navbar .brand {
-    padding-left: 10px;
-    padding-right: 10px;
-    margin: 0 0 0 -5px;
-  }
-
-  // COLLAPSIBLE NAVBAR
-  // ------------------
-  // Nav collapse clears brand
-  .nav-collapse {
-    clear: both;
-  }
-  // Block-level the nav
-  .nav-collapse .nav {
-    float: none;
-    margin: 0 0 (@baseLineHeight / 2);
-  }
-  .nav-collapse .nav > li {
-    float: none;
-  }
-  .nav-collapse .nav > li > a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > .divider-vertical {
-    display: none;
-  }
-  .nav-collapse .nav .nav-header {
-    color: @navbarText;
-    text-shadow: none;
-  }
-  // Nav and dropdown links in navbar
-  .nav-collapse .nav > li > a,
-  .nav-collapse .dropdown-menu a {
-    padding: 9px 15px;
-    font-weight: bold;
-    color: @navbarLinkColor;
-    .border-radius(3px);
-  }
-  // Buttons
-  .nav-collapse .btn {
-    padding: 4px 10px 4px;
-    font-weight: normal;
-    .border-radius(@baseBorderRadius);
-  }
-  .nav-collapse .dropdown-menu li + li a {
-    margin-bottom: 2px;
-  }
-  .nav-collapse .nav > li > a:hover,
-  .nav-collapse .nav > li > a:focus,
-  .nav-collapse .dropdown-menu a:hover,
-  .nav-collapse .dropdown-menu a:focus {
-    background-color: @navbarBackground;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a,
-  .navbar-inverse .nav-collapse .dropdown-menu a {
-    color: @navbarInverseLinkColor;
-  }
-  .navbar-inverse .nav-collapse .nav > li > a:hover,
-  .navbar-inverse .nav-collapse .nav > li > a:focus,
-  .navbar-inverse .nav-collapse .dropdown-menu a:hover,
-  .navbar-inverse .nav-collapse .dropdown-menu a:focus {
-    background-color: @navbarInverseBackground;
-  }
-  // Buttons in the navbar
-  .nav-collapse.in .btn-group {
-    margin-top: 5px;
-    padding: 0;
-  }
-  // Dropdowns in the navbar
-  .nav-collapse .dropdown-menu {
-    position: static;
-    top: auto;
-    left: auto;
-    float: none;
-    display: none;
-    max-width: none;
-    margin: 0 15px;
-    padding: 0;
-    background-color: transparent;
-    border: none;
-    .border-radius(0);
-    .box-shadow(none);
-  }
-  .nav-collapse .open > .dropdown-menu { 
-    display: block; 
-  }
-
-  .nav-collapse .dropdown-menu:before,
-  .nav-collapse .dropdown-menu:after {
-    display: none;
-  }
-  .nav-collapse .dropdown-menu .divider {
-    display: none;
-  }
-  .nav-collapse .nav > li > .dropdown-menu {
-    &:before,
-    &:after {
-      display: none;
-    }
-  }
-  // Forms in navbar
-  .nav-collapse .navbar-form,
-  .nav-collapse .navbar-search {
-    float: none;
-    padding: (@baseLineHeight / 2) 15px;
-    margin: (@baseLineHeight / 2) 0;
-    border-top: 1px solid @navbarBackground;
-    border-bottom: 1px solid @navbarBackground;
-    .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)");
-  }
-  .navbar-inverse .nav-collapse .navbar-form,
-  .navbar-inverse .nav-collapse .navbar-search {
-    border-top-color: @navbarInverseBackground;
-    border-bottom-color: @navbarInverseBackground;
-  }
-  // Pull right (secondary) nav content
-  .navbar .nav-collapse .nav.pull-right {
-    float: none;
-    margin-left: 0;
-  }
-  // Hide everything in the navbar save .brand and toggle button */
-  .nav-collapse,
-  .nav-collapse.collapse {
-    overflow: hidden;
-    height: 0;
-  }
-  // Navbar button
-  .navbar .btn-navbar {
-    display: block;
-  }
-
-  // STATIC NAVBAR
-  // -------------
-  .navbar-static .navbar-inner {
-    padding-left:  10px;
-    padding-right: 10px;
-  }
-
-
-}
-
-
-// DEFAULT DESKTOP
-// ---------------
-
-@media (min-width: @navbarCollapseDesktopWidth) {
-
-  // Required to make the collapsing navbar work on regular desktops
-  .nav-collapse.collapse {
-    height: auto !important;
-    overflow: visible !important;
-  }
-
-}
diff --git a/assets/less/bootstrap/responsive-utilities.less b/assets/less/bootstrap/responsive-utilities.less
deleted file mode 100644
index bf43e8e..0000000
--- a/assets/less/bootstrap/responsive-utilities.less
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Responsive: Utility classes
-// --------------------------------------------------
-
-
-// IE10 Metro responsive
-// Required for Windows 8 Metro split-screen snapping with IE10
-// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
-@-ms-viewport{
-  width: device-width;
-}
-
-// Hide from screenreaders and browsers
-// Credit: HTML5 Boilerplate
-.hidden {
-  display: none;
-  visibility: hidden;
-}
-
-// Visibility utilities
-
-// For desktops
-.visible-phone     { display: none !important; }
-.visible-tablet    { display: none !important; }
-.hidden-phone      { }
-.hidden-tablet     { }
-.hidden-desktop    { display: none !important; }
-.visible-desktop   { display: inherit !important; }
-
-// Tablets & small desktops only
-@media (min-width: 768px) and (max-width: 979px) {
-  // Hide everything else
-  .hidden-desktop    { display: inherit !important; }
-  .visible-desktop   { display: none !important ; }
-  // Show
-  .visible-tablet    { display: inherit !important; }
-  // Hide
-  .hidden-tablet     { display: none !important; }
-}
-
-// Phones only
-@media (max-width: 767px) {
-  // Hide everything else
-  .hidden-desktop    { display: inherit !important; }
-  .visible-desktop   { display: none !important; }
-  // Show
-  .visible-phone     { display: inherit !important; } // Use inherit to restore previous behavior
-  // Hide
-  .hidden-phone      { display: none !important; }
-}
-
-// Print utilities
-.visible-print    { display: none !important; }
-.hidden-print     { }
-
-@media print {
-  .visible-print  { display: inherit !important; }
-  .hidden-print   { display: none !important; }
-}
diff --git a/assets/less/bootstrap/responsive.less b/assets/less/bootstrap/responsive.less
deleted file mode 100644
index 9e5f9b1..0000000
--- a/assets/less/bootstrap/responsive.less
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-
-// Responsive.less
-// For phone and tablet devices
-// -------------------------------------------------------------
-
-
-// REPEAT VARIABLES & MIXINS
-// -------------------------
-// Required since we compile the responsive stuff separately
-
-@import "variables.less"; // Modify this for custom colors, font-sizes, etc
-@import "mixins.less";
-
-
-// RESPONSIVE CLASSES
-// ------------------
-
-@import "responsive-utilities.less";
-
-
-// MEDIA QUERIES
-// ------------------
-
-// Large desktops
-@import "responsive-1200px-min.less";
-
-// Tablets to regular desktops
-@import "responsive-768px-979px.less";
-
-// Phones to portrait tablets and narrow desktops
-@import "responsive-767px-max.less";
-
-
-// RESPONSIVE NAVBAR
-// ------------------
-
-// From 979px and below, show a button to toggle navbar contents
-@import "responsive-navbar.less";
diff --git a/assets/less/bootstrap/scaffolding.less b/assets/less/bootstrap/scaffolding.less
deleted file mode 100644
index f17e8ca..0000000
--- a/assets/less/bootstrap/scaffolding.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Scaffolding
-// --------------------------------------------------
-
-
-// Body reset
-// -------------------------
-
-body {
-  margin: 0;
-  font-family: @baseFontFamily;
-  font-size: @baseFontSize;
-  line-height: @baseLineHeight;
-  color: @textColor;
-  background-color: @bodyBackground;
-}
-
-
-// Links
-// -------------------------
-
-a {
-  color: @linkColor;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: @linkColorHover;
-  text-decoration: underline;
-}
-
-
-// Images
-// -------------------------
-
-// Rounded corners
-.img-rounded {
-  .border-radius(6px);
-}
-
-// Add polaroid-esque trim
-.img-polaroid {
-  padding: 4px;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0,0,0,.2);
-  .box-shadow(0 1px 3px rgba(0,0,0,.1));
-}
-
-// Perfect circle
-.img-circle {
-  .border-radius(500px); // crank the border-radius so it works with most reasonably sized images
-}
diff --git a/assets/less/bootstrap/sprites.less b/assets/less/bootstrap/sprites.less
deleted file mode 100644
index 1812bf7..0000000
--- a/assets/less/bootstrap/sprites.less
+++ /dev/null
@@ -1,197 +0,0 @@
-//
-// Sprites
-// --------------------------------------------------
-
-
-// ICONS
-// -----
-
-// All icons receive the styles of the <i> tag with a base class
-// of .i and are then given a unique class to add width, height,
-// and background-position. Your resulting HTML will look like
-// <i class="icon-inbox"></i>.
-
-// For the white version of the icons, just add the .icon-white class:
-// <i class="icon-inbox icon-white"></i>
-
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-  .ie7-restore-right-whitespace();
-  line-height: 14px;
-  vertical-align: text-top;
-  background-image: url("@{iconSpritePath}");
-  background-position: 14px 14px;
-  background-repeat: no-repeat;
-  margin-top: 1px;
-}
-
-/* White icons with optional class, or on hover/focus/active states of certain elements */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:focus > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > li > a:focus > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:focus > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"],
-.dropdown-submenu:focus > a > [class*=" icon-"] {
-  background-image: url("@{iconWhiteSpritePath}");
-}
-
-.icon-glass              { background-position: 0      0; }
-.icon-music              { background-position: -24px  0; }
-.icon-search             { background-position: -48px  0; }
-.icon-envelope           { background-position: -72px  0; }
-.icon-heart              { background-position: -96px  0; }
-.icon-star               { background-position: -120px 0; }
-.icon-star-empty         { background-position: -144px 0; }
-.icon-user               { background-position: -168px 0; }
-.icon-film               { background-position: -192px 0; }
-.icon-th-large           { background-position: -216px 0; }
-.icon-th                 { background-position: -240px 0; }
-.icon-th-list            { background-position: -264px 0; }
-.icon-ok                 { background-position: -288px 0; }
-.icon-remove             { background-position: -312px 0; }
-.icon-zoom-in            { background-position: -336px 0; }
-.icon-zoom-out           { background-position: -360px 0; }
-.icon-off                { background-position: -384px 0; }
-.icon-signal             { background-position: -408px 0; }
-.icon-cog                { background-position: -432px 0; }
-.icon-trash              { background-position: -456px 0; }
-
-.icon-home               { background-position: 0      -24px; }
-.icon-file               { background-position: -24px  -24px; }
-.icon-time               { background-position: -48px  -24px; }
-.icon-road               { background-position: -72px  -24px; }
-.icon-download-alt       { background-position: -96px  -24px; }
-.icon-download           { background-position: -120px -24px; }
-.icon-upload             { background-position: -144px -24px; }
-.icon-inbox              { background-position: -168px -24px; }
-.icon-play-circle        { background-position: -192px -24px; }
-.icon-repeat             { background-position: -216px -24px; }
-.icon-refresh            { background-position: -240px -24px; }
-.icon-list-alt           { background-position: -264px -24px; }
-.icon-lock               { background-position: -287px -24px; } // 1px off
-.icon-flag               { background-position: -312px -24px; }
-.icon-headphones         { background-position: -336px -24px; }
-.icon-volume-off         { background-position: -360px -24px; }
-.icon-volume-down        { background-position: -384px -24px; }
-.icon-volume-up          { background-position: -408px -24px; }
-.icon-qrcode             { background-position: -432px -24px; }
-.icon-barcode            { background-position: -456px -24px; }
-
-.icon-tag                { background-position: 0      -48px; }
-.icon-tags               { background-position: -25px  -48px; } // 1px off
-.icon-book               { background-position: -48px  -48px; }
-.icon-bookmark           { background-position: -72px  -48px; }
-.icon-print              { background-position: -96px  -48px; }
-.icon-camera             { background-position: -120px -48px; }
-.icon-font               { background-position: -144px -48px; }
-.icon-bold               { background-position: -167px -48px; } // 1px off
-.icon-italic             { background-position: -192px -48px; }
-.icon-text-height        { background-position: -216px -48px; }
-.icon-text-width         { background-position: -240px -48px; }
-.icon-align-left         { background-position: -264px -48px; }
-.icon-align-center       { background-position: -288px -48px; }
-.icon-align-right        { background-position: -312px -48px; }
-.icon-align-justify      { background-position: -336px -48px; }
-.icon-list               { background-position: -360px -48px; }
-.icon-indent-left        { background-position: -384px -48px; }
-.icon-indent-right       { background-position: -408px -48px; }
-.icon-facetime-video     { background-position: -432px -48px; }
-.icon-picture            { background-position: -456px -48px; }
-
-.icon-pencil             { background-position: 0      -72px; }
-.icon-map-marker         { background-position: -24px  -72px; }
-.icon-adjust             { background-position: -48px  -72px; }
-.icon-tint               { background-position: -72px  -72px; }
-.icon-edit               { background-position: -96px  -72px; }
-.icon-share              { background-position: -120px -72px; }
-.icon-check              { background-position: -144px -72px; }
-.icon-move               { background-position: -168px -72px; }
-.icon-step-backward      { background-position: -192px -72px; }
-.icon-fast-backward      { background-position: -216px -72px; }
-.icon-backward           { background-position: -240px -72px; }
-.icon-play               { background-position: -264px -72px; }
-.icon-pause              { background-position: -288px -72px; }
-.icon-stop               { background-position: -312px -72px; }
-.icon-forward            { background-position: -336px -72px; }
-.icon-fast-forward       { background-position: -360px -72px; }
-.icon-step-forward       { background-position: -384px -72px; }
-.icon-eject              { background-position: -408px -72px; }
-.icon-chevron-left       { background-position: -432px -72px; }
-.icon-chevron-right      { background-position: -456px -72px; }
-
-.icon-plus-sign          { background-position: 0      -96px; }
-.icon-minus-sign         { background-position: -24px  -96px; }
-.icon-remove-sign        { background-position: -48px  -96px; }
-.icon-ok-sign            { background-position: -72px  -96px; }
-.icon-question-sign      { background-position: -96px  -96px; }
-.icon-info-sign          { background-position: -120px -96px; }
-.icon-screenshot         { background-position: -144px -96px; }
-.icon-remove-circle      { background-position: -168px -96px; }
-.icon-ok-circle          { background-position: -192px -96px; }
-.icon-ban-circle         { background-position: -216px -96px; }
-.icon-arrow-left         { background-position: -240px -96px; }
-.icon-arrow-right        { background-position: -264px -96px; }
-.icon-arrow-up           { background-position: -289px -96px; } // 1px off
-.icon-arrow-down         { background-position: -312px -96px; }
-.icon-share-alt          { background-position: -336px -96px; }
-.icon-resize-full        { background-position: -360px -96px; }
-.icon-resize-small       { background-position: -384px -96px; }
-.icon-plus               { background-position: -408px -96px; }
-.icon-minus              { background-position: -433px -96px; }
-.icon-asterisk           { background-position: -456px -96px; }
-
-.icon-exclamation-sign   { background-position: 0      -120px; }
-.icon-gift               { background-position: -24px  -120px; }
-.icon-leaf               { background-position: -48px  -120px; }
-.icon-fire               { background-position: -72px  -120px; }
-.icon-eye-open           { background-position: -96px  -120px; }
-.icon-eye-close          { background-position: -120px -120px; }
-.icon-warning-sign       { background-position: -144px -120px; }
-.icon-plane              { background-position: -168px -120px; }
-.icon-calendar           { background-position: -192px -120px; }
-.icon-random             { background-position: -216px -120px; width: 16px; }
-.icon-comment            { background-position: -240px -120px; }
-.icon-magnet             { background-position: -264px -120px; }
-.icon-chevron-up         { background-position: -288px -120px; }
-.icon-chevron-down       { background-position: -313px -119px; } // 1px, 1px off
-.icon-retweet            { background-position: -336px -120px; }
-.icon-shopping-cart      { background-position: -360px -120px; }
-.icon-folder-close       { background-position: -384px -120px; width: 16px; }
-.icon-folder-open        { background-position: -408px -120px; width: 16px; }
-.icon-resize-vertical    { background-position: -432px -119px; } // 1px, 1px off
-.icon-resize-horizontal  { background-position: -456px -118px; } // 1px, 2px off
-
-.icon-hdd                     { background-position: 0      -144px; }
-.icon-bullhorn                { background-position: -24px  -144px; }
-.icon-bell                    { background-position: -48px  -144px; }
-.icon-certificate             { background-position: -72px  -144px; }
-.icon-thumbs-up               { background-position: -96px  -144px; }
-.icon-thumbs-down             { background-position: -120px -144px; }
-.icon-hand-right              { background-position: -144px -144px; }
-.icon-hand-left               { background-position: -168px -144px; }
-.icon-hand-up                 { background-position: -192px -144px; }
-.icon-hand-down               { background-position: -216px -144px; }
-.icon-circle-arrow-right      { background-position: -240px -144px; }
-.icon-circle-arrow-left       { background-position: -264px -144px; }
-.icon-circle-arrow-up         { background-position: -288px -144px; }
-.icon-circle-arrow-down       { background-position: -312px -144px; }
-.icon-globe                   { background-position: -336px -144px; }
-.icon-wrench                  { background-position: -360px -144px; }
-.icon-tasks                   { background-position: -384px -144px; }
-.icon-filter                  { background-position: -408px -144px; }
-.icon-briefcase               { background-position: -432px -144px; }
-.icon-fullscreen              { background-position: -456px -144px; }
diff --git a/assets/less/bootstrap/tables.less b/assets/less/bootstrap/tables.less
deleted file mode 100644
index 0e35271..0000000
--- a/assets/less/bootstrap/tables.less
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// Tables
-// --------------------------------------------------
-
-
-// BASE TABLES
-// -----------------
-
-table {
-  max-width: 100%;
-  background-color: @tableBackground;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-// BASELINE STYLES
-// ---------------
-
-.table {
-  width: 100%;
-  margin-bottom: @baseLineHeight;
-  // Cells
-  th,
-  td {
-    padding: 8px;
-    line-height: @baseLineHeight;
-    text-align: left;
-    vertical-align: top;
-    border-top: 1px solid @tableBorder;
-  }
-  th {
-    font-weight: bold;
-  }
-  // Bottom align for column headings
-  thead th {
-    vertical-align: bottom;
-  }
-  // Remove top border from thead by default
-  caption + thead tr:first-child th,
-  caption + thead tr:first-child td,
-  colgroup + thead tr:first-child th,
-  colgroup + thead tr:first-child td,
-  thead:first-child tr:first-child th,
-  thead:first-child tr:first-child td {
-    border-top: 0;
-  }
-  // Account for multiple tbody instances
-  tbody + tbody {
-    border-top: 2px solid @tableBorder;
-  }
-
-  // Nesting
-  .table {
-    background-color: @bodyBackground;
-  }
-}
-
-
-
-// CONDENSED TABLE W/ HALF PADDING
-// -------------------------------
-
-.table-condensed {
-  th,
-  td {
-    padding: 4px 5px;
-  }
-}
-
-
-// BORDERED VERSION
-// ----------------
-
-.table-bordered {
-  border: 1px solid @tableBorder;
-  border-collapse: separate; // Done so we can round those corners!
-  *border-collapse: collapse; // IE7 can't round corners anyway
-  border-left: 0;
-  .border-radius(@baseBorderRadius);
-  th,
-  td {
-    border-left: 1px solid @tableBorder;
-  }
-  // Prevent a double border
-  caption + thead tr:first-child th,
-  caption + tbody tr:first-child th,
-  caption + tbody tr:first-child td,
-  colgroup + thead tr:first-child th,
-  colgroup + tbody tr:first-child th,
-  colgroup + tbody tr:first-child td,
-  thead:first-child tr:first-child th,
-  tbody:first-child tr:first-child th,
-  tbody:first-child tr:first-child td {
-    border-top: 0;
-  }
-  // For first th/td in the first row in the first thead or tbody
-  thead:first-child tr:first-child > th:first-child,
-  tbody:first-child tr:first-child > td:first-child,
-  tbody:first-child tr:first-child > th:first-child {
-    .border-top-left-radius(@baseBorderRadius);
-  }
-  // For last th/td in the first row in the first thead or tbody
-  thead:first-child tr:first-child > th:last-child,
-  tbody:first-child tr:first-child > td:last-child,
-  tbody:first-child tr:first-child > th:last-child {
-    .border-top-right-radius(@baseBorderRadius);
-  }
-  // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot
-  thead:last-child tr:last-child > th:first-child,
-  tbody:last-child tr:last-child > td:first-child,
-  tbody:last-child tr:last-child > th:first-child,
-  tfoot:last-child tr:last-child > td:first-child,
-  tfoot:last-child tr:last-child > th:first-child {
-    .border-bottom-left-radius(@baseBorderRadius);
-  }
-  // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot
-  thead:last-child tr:last-child > th:last-child,
-  tbody:last-child tr:last-child > td:last-child,
-  tbody:last-child tr:last-child > th:last-child,
-  tfoot:last-child tr:last-child > td:last-child,
-  tfoot:last-child tr:last-child > th:last-child {
-    .border-bottom-right-radius(@baseBorderRadius);
-  }
-
-  // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot
-  tfoot + tbody:last-child tr:last-child td:first-child {
-    .border-bottom-left-radius(0);
-  }
-  tfoot + tbody:last-child tr:last-child td:last-child {
-    .border-bottom-right-radius(0);
-  }
-
-  // Special fixes to round the left border on the first td/th
-  caption + thead tr:first-child th:first-child,
-  caption + tbody tr:first-child td:first-child,
-  colgroup + thead tr:first-child th:first-child,
-  colgroup + tbody tr:first-child td:first-child {
-    .border-top-left-radius(@baseBorderRadius);
-  }
-  caption + thead tr:first-child th:last-child,
-  caption + tbody tr:first-child td:last-child,
-  colgroup + thead tr:first-child th:last-child,
-  colgroup + tbody tr:first-child td:last-child {
-    .border-top-right-radius(@baseBorderRadius);
-  }
-
-}
-
-
-
-
-// ZEBRA-STRIPING
-// --------------
-
-// Default zebra-stripe styles (alternating gray and transparent backgrounds)
-.table-striped {
-  tbody {
-    > tr:nth-child(odd) > td,
-    > tr:nth-child(odd) > th {
-      background-color: @tableBackgroundAccent;
-    }
-  }
-}
-
-
-// HOVER EFFECT
-// ------------
-// Placed here since it has to come after the potential zebra striping
-.table-hover {
-  tbody {
-    tr:hover > td,
-    tr:hover > th {
-      background-color: @tableBackgroundHover;
-    }
-  }
-}
-
-
-// TABLE CELL SIZING
-// -----------------
-
-// Reset default grid behavior
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
-  display: table-cell;
-  float: none; // undo default grid column styles
-  margin-left: 0; // undo default grid column styles
-}
-
-// Change the column widths to account for td/th padding
-.table td,
-.table th {
-  &.span1     { .tableColumns(1); }
-  &.span2     { .tableColumns(2); }
-  &.span3     { .tableColumns(3); }
-  &.span4     { .tableColumns(4); }
-  &.span5     { .tableColumns(5); }
-  &.span6     { .tableColumns(6); }
-  &.span7     { .tableColumns(7); }
-  &.span8     { .tableColumns(8); }
-  &.span9     { .tableColumns(9); }
-  &.span10    { .tableColumns(10); }
-  &.span11    { .tableColumns(11); }
-  &.span12    { .tableColumns(12); }
-}
-
-
-
-// TABLE BACKGROUNDS
-// -----------------
-// Exact selectors below required to override .table-striped
-
-.table tbody tr {
-  &.success > td {
-    background-color: @successBackground;
-  }
-  &.error > td {
-    background-color: @errorBackground;
-  }
-  &.warning > td {
-    background-color: @warningBackground;
-  }
-  &.info > td {
-    background-color: @infoBackground;
-  }
-}
-
-// Hover states for .table-hover
-.table-hover tbody tr {
-  &.success:hover > td {
-    background-color: darken(@successBackground, 5%);
-  }
-  &.error:hover > td {
-    background-color: darken(@errorBackground, 5%);
-  }
-  &.warning:hover > td {
-    background-color: darken(@warningBackground, 5%);
-  }
-  &.info:hover > td {
-    background-color: darken(@infoBackground, 5%);
-  }
-}
diff --git a/assets/less/bootstrap/tests/buttons.html b/assets/less/bootstrap/tests/buttons.html
deleted file mode 100644
index 3f41165..0000000
--- a/assets/less/bootstrap/tests/buttons.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <title>Buttons &middot; Bootstrap</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="description" content="">
-    <meta name="author" content="">
-
-    <!-- Le styles -->
-    <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet">
-    <style>
-      body {
-        padding-top: 30px;
-        padding-bottom: 30px;
-      }
-    </style>
-    <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-    <!--[if lt IE 9]>
-      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- Le fav and touch icons -->
-    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png">
-    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png">
-      <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png">
-                    <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png">
-                                   <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png">
-  </head>
-
-  <body>
-
-    <div class="container">
-
-      <h2>Dropups</h2>
-      <div class="btn-toolbar">
-        <div class="btn-group dropup">
-          <button class="btn">Dropup</button>
-          <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-primary">Dropup</button>
-          <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-danger">Dropup</button>
-          <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-warning">Dropup</button>
-          <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-success">Dropup</button>
-          <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-secondary">Dropup</button>
-          <button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-        <div class="btn-group dropup">
-          <button class="btn btn-inverse">Dropup</button>
-          <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
-          <ul class="dropdown-menu">
-            <li><a href="#">Action</a></li>
-            <li><a href="#">Another action</a></li>
-            <li><a href="#">Something else here</a></li>
-            <li class="divider"></li>
-            <li><a href="#">Separated link</a></li>
-          </ul>
-        </div><!-- /btn-group -->
-      </div><!-- /btn-toolbar -->
-
-
-    </div> <!-- /container -->
-
-    <!-- Le javascript
-    ================================================== -->
-    <!-- Placed at the end of the document so the pages load faster -->
-    <script src="../../docs/assets/js/jquery.js"></script>
-    <script src="../../docs/assets/js/bootstrap-transition.js"></script>
-    <script src="../../docs/assets/js/bootstrap-alert.js"></script>
-    <script src="../../docs/assets/js/bootstrap-modal.js"></script>
-    <script src="../../docs/assets/js/bootstrap-dropdown.js"></script>
-    <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script>
-    <script src="../../docs/assets/js/bootstrap-tab.js"></script>
-    <script src="../../docs/assets/js/bootstrap-tooltip.js"></script>
-    <script src="../../docs/assets/js/bootstrap-popover.js"></script>
-    <script src="../../docs/assets/js/bootstrap-button.js"></script>
-    <script src="../../docs/assets/js/bootstrap-collapse.js"></script>
-    <script src="../../docs/assets/js/bootstrap-carousel.js"></script>
-    <script src="../../docs/assets/js/bootstrap-typeahead.js"></script>
-
-  </body>
-</html>
diff --git a/assets/less/bootstrap/tests/css-tests.css b/assets/less/bootstrap/tests/css-tests.css
deleted file mode 100644
index 0f5604e..0000000
--- a/assets/less/bootstrap/tests/css-tests.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/*!
- * Bootstrap CSS Tests
- */
-
-
-/* Remove background image */
-body {
-  background-image: none;
-}
-
-/* Space out subhead */
-.subhead {
-  margin-bottom: 36px;
-}
-/*h4 {
-  margin-bottom: 5px;
-}
-*/
-
-.type-test {
-  margin-bottom: 20px;
-  padding: 0 20px 20px;
-  background: url(../../docs/assets/img/grid-baseline-20px.png);
-}
-.type-test h1,
-.type-test h2,
-.type-test h3,
-.type-test h4,
-.type-test h5,
-.type-test h6 {
-  background-color: rgba(255,0,0,.2);
-}
-
-
-/* colgroup tests */
-.col1 {
-  background-color: rgba(255,0,0,.1);
-}
-.col2 {
-  background-color: rgba(0,255,0,.1);
-}
-.col3 {
-  background-color: rgba(0,0,255,.1);
-}
-
-
-/* Fluid row inputs */
-#rowInputs .row > [class*=span],
-#fluidRowInputs .row-fluid > [class*=span] {
-  background-color: rgba(255,0,0,.1);
-}
-
-
-/* Fluid grid */
-.fluid-grid {
-  margin-bottom: 45px;
-}
-.fluid-grid .row {
-  height: 40px;
-  padding-top: 10px;
-  margin-top: 10px;
-  color: #ddd;
-  text-align: center;
-}
-.fluid-grid .span1 {
-  background-color: #999;
-}
-
-
-/* Gradients */
-
-[class^="gradient-"] {
-  width: 100%;
-  height: 400px;
-  margin: 20px 0;
-  -webkit-border-radius: 5px;
-     -moz-border-radius: 5px;
-          border-radius: 5px;
-}
-
-.gradient-horizontal {
-  background-color: #333333;
-  background-image: -moz-linear-gradient(left, #555555, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#555555), to(#333333));
-  background-image: -webkit-linear-gradient(left, #555555, #333333);
-  background-image: -o-linear-gradient(left, #555555, #333333);
-  background-image: linear-gradient(to right, #555555, #333333);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=1);
-}
-
-.gradient-vertical {
-  background-color: #474747;
-  background-image: -moz-linear-gradient(top, #555555, #333333);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333));
-  background-image: -webkit-linear-gradient(top, #555555, #333333);
-  background-image: -o-linear-gradient(top, #555555, #333333);
-  background-image: linear-gradient(to bottom, #555555, #333333);
-  background-repeat: repeat-x;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0);
-}
-
-.gradient-directional {
-  background-color: #333333;
-  background-image: -moz-linear-gradient(45deg, #555555, #333333);
-  background-image: -webkit-linear-gradient(45deg, #555555, #333333);
-  background-image: -o-linear-gradient(45deg, #555555, #333333);
-  background-image: linear-gradient(45deg, #555555, #333333);
-  background-repeat: repeat-x;
-}
-
-.gradient-vertical-three {
-  background-color: #8940a5;
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f));
-  background-image: -webkit-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -moz-linear-gradient(top, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -o-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-image: linear-gradient(#00b3ee, #7a43b6 50%, #c3325f);
-  background-repeat: no-repeat;
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff00b3ee', endColorstr='#ffc3325f', GradientType=0);
-}
-
-.gradient-radial {
-  background-color: #333333;
-  background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(#555555), to(#333333));
-  background-image: -webkit-radial-gradient(circle, #555555, #333333);
-  background-image: -moz-radial-gradient(circle, #555555, #333333);
-  background-image: -o-radial-gradient(circle, #555555, #333333);
-  background-repeat: no-repeat;
-}
-
-.gradient-striped {
-  background-color: #555555;
-  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.gradient-horizontal-three {
-  background-color: #00b3ee;
-  background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f));
-  background-image: -webkit-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -moz-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: -o-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f);
-  background-image: linear-gradient(to right, #00b3ee, #7a43b6 50%, #c3325f);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b3ee', endColorstr='#c3325f', GradientType=0);
-}
diff --git a/assets/less/bootstrap/thumbnails.less b/assets/less/bootstrap/thumbnails.less
deleted file mode 100644
index 4fd07d2..0000000
--- a/assets/less/bootstrap/thumbnails.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Thumbnails
-// --------------------------------------------------
-
-
-// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files
-
-// Make wrapper ul behave like the grid
-.thumbnails {
-  margin-left: -@gridGutterWidth;
-  list-style: none;
-  .clearfix();
-}
-// Fluid rows have no left margin
-.row-fluid .thumbnails {
-  margin-left: 0;
-}
-
-// Float li to make thumbnails appear in a row
-.thumbnails > li {
-  float: left; // Explicity set the float since we don't require .span* classes
-  margin-bottom: @baseLineHeight;
-  margin-left: @gridGutterWidth;
-}
-
-// The actual thumbnail (can be `a` or `div`)
-.thumbnail {
-  display: block;
-  padding: 4px;
-  line-height: @baseLineHeight;
-  border: 1px solid #ddd;
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 3px rgba(0,0,0,.055));
-  .transition(all .2s ease-in-out);
-}
-// Add a hover/focus state for linked versions only
-a.thumbnail:hover,
-a.thumbnail:focus {
-  border-color: @linkColor;
-  .box-shadow(0 1px 4px rgba(0,105,214,.25));
-}
-
-// Images and captions
-.thumbnail > img {
-  display: block;
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-}
-.thumbnail .caption {
-  padding: 9px;
-  color: @gray;
-}
diff --git a/assets/less/bootstrap/tooltip.less b/assets/less/bootstrap/tooltip.less
deleted file mode 100644
index 83d5f2b..0000000
--- a/assets/less/bootstrap/tooltip.less
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Tooltips
-// --------------------------------------------------
-
-
-// Base class
-.tooltip {
-  position: absolute;
-  z-index: @zindexTooltip;
-  display: block;
-  visibility: visible;
-  font-size: 11px;
-  line-height: 1.4;
-  .opacity(0);
-  &.in     { .opacity(80); }
-  &.top    { margin-top:  -3px; padding: 5px 0; }
-  &.right  { margin-left:  3px; padding: 0 5px; }
-  &.bottom { margin-top:   3px; padding: 5px 0; }
-  &.left   { margin-left: -3px; padding: 0 5px; }
-}
-
-// Wrapper for the tooltip content
-.tooltip-inner {
-  max-width: 200px;
-  padding: 8px;
-  color: @tooltipColor;
-  text-align: center;
-  text-decoration: none;
-  background-color: @tooltipBackground;
-  .border-radius(@baseBorderRadius);
-}
-
-// Arrows
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-.tooltip {
-  &.top .tooltip-arrow {
-    bottom: 0;
-    left: 50%;
-    margin-left: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth @tooltipArrowWidth 0;
-    border-top-color: @tooltipArrowColor;
-  }
-  &.right .tooltip-arrow {
-    top: 50%;
-    left: 0;
-    margin-top: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0;
-    border-right-color: @tooltipArrowColor;
-  }
-  &.left .tooltip-arrow {
-    top: 50%;
-    right: 0;
-    margin-top: -@tooltipArrowWidth;
-    border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth;
-    border-left-color: @tooltipArrowColor;
-  }
-  &.bottom .tooltip-arrow {
-    top: 0;
-    left: 50%;
-    margin-left: -@tooltipArrowWidth;
-    border-width: 0 @tooltipArrowWidth @tooltipArrowWidth;
-    border-bottom-color: @tooltipArrowColor;
-  }
-}
diff --git a/assets/less/bootstrap/type.less b/assets/less/bootstrap/type.less
deleted file mode 100644
index 337138a..0000000
--- a/assets/less/bootstrap/type.less
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// Typography
-// --------------------------------------------------
-
-
-// Body text
-// -------------------------
-
-p {
-  margin: 0 0 @baseLineHeight / 2;
-}
-.lead {
-  margin-bottom: @baseLineHeight;
-  font-size: @baseFontSize * 1.5;
-  font-weight: 200;
-  line-height: @baseLineHeight * 1.5;
-}
-
-
-// Emphasis & misc
-// -------------------------
-
-// Ex: 14px base font * 85% = about 12px
-small   { font-size: 85%; }
-
-strong  { font-weight: bold; }
-em      { font-style: italic; }
-cite    { font-style: normal; }
-
-// Utility classes
-.muted               { color: @grayLight; }
-a.muted:hover,
-a.muted:focus        { color: darken(@grayLight, 10%); }
-
-.text-warning        { color: @warningText; }
-a.text-warning:hover,
-a.text-warning:focus { color: darken(@warningText, 10%); }
-
-.text-error          { color: @errorText; }
-a.text-error:hover,
-a.text-error:focus   { color: darken(@errorText, 10%); }
-
-.text-info           { color: @infoText; }
-a.text-info:hover,
-a.text-info:focus    { color: darken(@infoText, 10%); }
-
-.text-success        { color: @successText; }
-a.text-success:hover,
-a.text-success:focus { color: darken(@successText, 10%); }
-
-.text-left           { text-align: left; }
-.text-right          { text-align: right; }
-.text-center         { text-align: center; }
-
-
-// Headings
-// -------------------------
-
-h1, h2, h3, h4, h5, h6 {
-  margin: (@baseLineHeight / 2) 0;
-  font-family: @headingsFontFamily;
-  font-weight: @headingsFontWeight;
-  line-height: @baseLineHeight;
-  color: @headingsColor;
-  text-rendering: optimizelegibility; // Fix the character spacing for headings
-  small {
-    font-weight: normal;
-    line-height: 1;
-    color: @grayLight;
-  }
-}
-
-h1,
-h2,
-h3 { line-height: @baseLineHeight * 2; }
-
-h1 { font-size: @baseFontSize * 2.75; } // ~38px
-h2 { font-size: @baseFontSize * 2.25; } // ~32px
-h3 { font-size: @baseFontSize * 1.75; } // ~24px
-h4 { font-size: @baseFontSize * 1.25; } // ~18px
-h5 { font-size: @baseFontSize; }
-h6 { font-size: @baseFontSize * 0.85; } // ~12px
-
-h1 small { font-size: @baseFontSize * 1.75; } // ~24px
-h2 small { font-size: @baseFontSize * 1.25; } // ~18px
-h3 small { font-size: @baseFontSize; }
-h4 small { font-size: @baseFontSize; }
-
-
-// Page header
-// -------------------------
-
-.page-header {
-  padding-bottom: (@baseLineHeight / 2) - 1;
-  margin: @baseLineHeight 0 (@baseLineHeight * 1.5);
-  border-bottom: 1px solid @grayLighter;
-}
-
-
-
-// Lists
-// --------------------------------------------------
-
-// Unordered and Ordered lists
-ul, ol {
-  padding: 0;
-  margin: 0 0 @baseLineHeight / 2 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-li {
-  line-height: @baseLineHeight;
-}
-
-// Remove default list styles
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-
-// Single-line list items
-ul.inline,
-ol.inline {
-  margin-left: 0;
-  list-style: none;
-  > li {
-    display: inline-block;
-    .ie7-inline-block();
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-}
-
-// Description Lists
-dl {
-  margin-bottom: @baseLineHeight;
-}
-dt,
-dd {
-  line-height: @baseLineHeight;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: @baseLineHeight / 2;
-}
-// Horizontal layout (like forms)
-.dl-horizontal {
-  .clearfix(); // Ensure dl clears floats if empty dd elements present
-  dt {
-    float: left;
-    width: @horizontalComponentOffset - 20;
-    clear: left;
-    text-align: right;
-    .text-overflow();
-  }
-  dd {
-    margin-left: @horizontalComponentOffset;
-  }
-}
-
-// MISC
-// ----
-
-// Horizontal rules
-hr {
-  margin: @baseLineHeight 0;
-  border: 0;
-  border-top: 1px solid @hrBorder;
-  border-bottom: 1px solid @white;
-}
-
-// Abbreviations and acronyms
-abbr[title],
-// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted @grayLight;
-}
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-
-// Blockquotes
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 @baseLineHeight;
-  border-left: 5px solid @grayLighter;
-  p {
-    margin-bottom: 0;
-    font-size: @baseFontSize * 1.25;
-    font-weight: 300;
-    line-height: 1.25;
-  }
-  small {
-    display: block;
-    line-height: @baseLineHeight;
-    color: @grayLight;
-    &:before {
-      content: '\2014 \00A0';
-    }
-  }
-
-  // Float right with text-align: right
-  &.pull-right {
-    float: right;
-    padding-right: 15px;
-    padding-left: 0;
-    border-right: 5px solid @grayLighter;
-    border-left: 0;
-    p,
-    small {
-      text-align: right;
-    }
-    small {
-      &:before {
-        content: '';
-      }
-      &:after {
-        content: '\00A0 \2014';
-      }
-    }
-  }
-}
-
-// Quotes
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-
-// Addresses
-address {
-  display: block;
-  margin-bottom: @baseLineHeight;
-  font-style: normal;
-  line-height: @baseLineHeight;
-}
diff --git a/assets/less/bootstrap/utilities.less b/assets/less/bootstrap/utilities.less
deleted file mode 100644
index 314b4ff..0000000
--- a/assets/less/bootstrap/utilities.less
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Utility classes
-// --------------------------------------------------
-
-
-// Quick floats
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-
-// Toggling content
-.hide {
-  display: none;
-}
-.show {
-  display: block;
-}
-
-// Visibility
-.invisible {
-  visibility: hidden;
-}
-
-// For Affix plugin
-.affix {
-  position: fixed;
-}
diff --git a/assets/less/bootstrap/variables.less b/assets/less/bootstrap/variables.less
deleted file mode 100644
index 486eb7b..0000000
--- a/assets/less/bootstrap/variables.less
+++ /dev/null
@@ -1,301 +0,0 @@
-//
-// Variables
-// --------------------------------------------------
-
-
-// Global values
-// --------------------------------------------------
-
-
-// Grays
-// -------------------------
-@black:                 #000;
-@grayDarker:            #222;
-@grayDark:              #333;
-@gray:                  #555;
-@grayLight:             #999;
-@grayLighter:           #eee;
-@white:                 #fff;
-
-
-// Accent colors
-// -------------------------
-@blue:                  #049cdb;
-@blueDark:              #0064cd;
-@green:                 #46a546;
-@dangerRed:             #9d261d;
-@yellow:                #ffc40d;
-@orange:                #f89406;
-@pink:                  #c3325f;
-@purple:                #7a43b6;
-
-
-// Scaffolding
-// -------------------------
-@bodyBackground:        @white;
-@textColor:             @grayDark;
-
-
-// Links
-// -------------------------
-@linkColor:             #08c;
-@linkColorHover:        darken(@linkColor, 15%);
-
-
-// Typography
-// -------------------------
-@sansFontFamily:        "Helvetica Neue", Helvetica, Arial, sans-serif;
-@serifFontFamily:       Georgia, "Times New Roman", Times, serif;
-@monoFontFamily:        Monaco, Menlo, Consolas, "Courier New", monospace;
-
-@baseFontSize:          14px;
-@baseFontFamily:        @sansFontFamily;
-@baseLineHeight:        20px;
-@altFontFamily:         @serifFontFamily;
-
-@headingsFontFamily:    inherit; // empty to use BS default, @baseFontFamily
-@headingsFontWeight:    bold;    // instead of browser default, bold
-@headingsColor:         inherit; // empty to use BS default, @textColor
-
-
-// Component sizing
-// -------------------------
-// Based on 14px font-size and 20px line-height
-
-@fontSizeLarge:         @baseFontSize * 1.25; // ~18px
-@fontSizeSmall:         @baseFontSize * 0.85; // ~12px
-@fontSizeMini:          @baseFontSize * 0.75; // ~11px
-
-@paddingLarge:          11px 19px; // 44px
-@paddingSmall:          2px 10px;  // 26px
-@paddingMini:           0 6px;   // 22px
-
-@baseBorderRadius:      4px;
-@borderRadiusLarge:     6px;
-@borderRadiusSmall:     3px;
-
-
-// Tables
-// -------------------------
-@tableBackground:                   transparent; // overall background-color
-@tableBackgroundAccent:             #f9f9f9; // for striping
-@tableBackgroundHover:              #f5f5f5; // for hover
-@tableBorder:                       #ddd; // table and cell border
-
-// Buttons
-// -------------------------
-@btnBackground:                     @white;
-@btnBackgroundHighlight:            darken(@white, 10%);
-@btnBorder:                         #ccc;
-
-@btnPrimaryBackground:              @linkColor;
-@btnPrimaryBackgroundHighlight:     spin(@btnPrimaryBackground, 20%);
-
-@btnInfoBackground:                 #5bc0de;
-@btnInfoBackgroundHighlight:        #2f96b4;
-
-@btnSuccessBackground:              #62c462;
-@btnSuccessBackgroundHighlight:     #51a351;
-
-@btnWarningBackground:              lighten(@dangerRed, 15%);
-@btnWarningBackgroundHighlight:     @dangerRed;
-
-@btnDangerBackground:               @dangerRed;
-@btnDangerBackgroundHighlight:      @hoverHighlight;
-
-@btnInverseBackground:              #444;
-@btnInverseBackgroundHighlight:     @grayDarker;
-
-
-// Forms
-// -------------------------
-@inputBackground:               @white;
-@inputBorder:                   #ccc;
-@inputBorderRadius:             @baseBorderRadius;
-@inputDisabledBackground:       @grayLighter;
-@formActionsBackground:         #f5f5f5;
-@inputHeight:                   @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
-
-
-// Dropdowns
-// -------------------------
-@dropdownBackground:            #2B2F33;
-@dropdownBorder:                rgba(0,0,0,.2);
-@dropdownDividerTop:            #1A1A1A;
-@dropdownDividerBottom:         #1A1A1A;
-
-@dropdownLinkColor:             #D9D9D9;
-@dropdownLinkColorHover:        @white;
-@dropdownLinkColorActive:       @white;
-
-@dropdownLinkBackgroundActive:  @linkColor;
-@dropdownLinkBackgroundHover:   @dropdownLinkBackgroundActive;
-
-
-
-// COMPONENT VARIABLES
-// --------------------------------------------------
-
-
-// Z-index master list
-// -------------------------
-// Used for a bird's eye view of components dependent on the z-axis
-// Try to avoid customizing these :)
-@zindexDropdown:          1000;
-@zindexPopover:           1010;
-@zindexTooltip:           1030;
-@zindexFixedNavbar:       1030;
-@zindexModalBackdrop:     1040;
-@zindexModal:             1050;
-
-
-// Sprite icons path
-// -------------------------
-@iconSpritePath:          "../img/glyphicons-halflings.png";
-@iconWhiteSpritePath:     "../img/glyphicons-halflings-white.png";
-
-
-// Input placeholder text color
-// -------------------------
-@placeholderText:         @grayLight;
-
-
-// Hr border color
-// -------------------------
-@hrBorder:                @grayLighter;
-
-
-// Horizontal forms & lists
-// -------------------------
-@horizontalComponentOffset:       180px;
-
-
-// Wells
-// -------------------------
-@wellBackground:                  #f5f5f5;
-
-
-// Navbar
-// -------------------------
-@navbarCollapseWidth:             979px;
-@navbarCollapseDesktopWidth:      @navbarCollapseWidth + 1;
-
-@navbarHeight:                    40px;
-@navbarBackgroundHighlight:       #ffffff;
-@navbarBackground:                darken(@navbarBackgroundHighlight, 5%);
-@navbarBorder:                    darken(@navbarBackground, 12%);
-
-@navbarText:                      #777;
-@navbarLinkColor:                 #777;
-@navbarLinkColorHover:            @grayDark;
-@navbarLinkColorActive:           @gray;
-@navbarLinkBackgroundHover:       transparent;
-@navbarLinkBackgroundActive:      darken(@navbarBackground, 5%);
-
-@navbarBrandColor:                @navbarLinkColor;
-
-// Inverted navbar
-@navbarInverseBackground:                #111111;
-@navbarInverseBackgroundHighlight:       #222222;
-@navbarInverseBorder:                    #252525;
-
-@navbarInverseText:                      @grayLight;
-@navbarInverseLinkColor:                 @grayLight;
-@navbarInverseLinkColorHover:            @white;
-@navbarInverseLinkColorActive:           @navbarInverseLinkColorHover;
-@navbarInverseLinkBackgroundHover:       transparent;
-@navbarInverseLinkBackgroundActive:      @navbarInverseBackground;
-
-@navbarInverseSearchBackground:          lighten(@navbarInverseBackground, 25%);
-@navbarInverseSearchBackgroundFocus:     @white;
-@navbarInverseSearchBorder:              @navbarInverseBackground;
-@navbarInverseSearchPlaceholderColor:    #ccc;
-
-@navbarInverseBrandColor:                @navbarInverseLinkColor;
-
-
-// Pagination
-// -------------------------
-@paginationBackground:                #fff;
-@paginationBorder:                    #ddd;
-@paginationActiveBackground:          #f5f5f5;
-
-
-// Hero unit
-// -------------------------
-@heroUnitBackground:              @grayLighter;
-@heroUnitHeadingColor:            inherit;
-@heroUnitLeadColor:               inherit;
-
-
-// Form states and alerts
-// -------------------------
-@warningText:             #c09853;
-@warningBackground:       #fcf8e3;
-@warningBorder:           darken(spin(@warningBackground, -10), 3%);
-
-@errorText:               #b94a48;
-@errorBackground:         #f2dede;
-@errorBorder:             darken(spin(@errorBackground, -10), 3%);
-
-@successText:             #468847;
-@successBackground:       #dff0d8;
-@successBorder:           darken(spin(@successBackground, -10), 5%);
-
-@infoText:                #3a87ad;
-@infoBackground:          #d9edf7;
-@infoBorder:              darken(spin(@infoBackground, -10), 7%);
-
-
-// Tooltips and popovers
-// -------------------------
-@tooltipColor:            #fff;
-@tooltipBackground:       #000;
-@tooltipArrowWidth:       5px;
-@tooltipArrowColor:       @tooltipBackground;
-
-@popoverBackground:       #fff;
-@popoverArrowWidth:       10px;
-@popoverArrowColor:       #fff;
-@popoverTitleBackground:  darken(@popoverBackground, 3%);
-
-// Special enhancement for popovers
-@popoverArrowOuterWidth:  @popoverArrowWidth + 1;
-@popoverArrowOuterColor:  rgba(0,0,0,.25);
-
-
-
-// GRID
-// --------------------------------------------------
-
-
-// Default 940px grid
-// -------------------------
-@gridColumns:             12;
-@gridColumnWidth:         60px;
-@gridGutterWidth:         20px;
-@gridRowWidth:            (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
-
-// 1200px min
-@gridColumnWidth1200:     70px;
-@gridGutterWidth1200:     30px;
-@gridRowWidth1200:        (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
-
-// 768px-979px
-@gridColumnWidth768:      42px;
-@gridGutterWidth768:      20px;
-@gridRowWidth768:         (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
-
-
-// Fluid grid
-// -------------------------
-@fluidGridColumnWidth:    percentage(@gridColumnWidth/@gridRowWidth);
-@fluidGridGutterWidth:    percentage(@gridGutterWidth/@gridRowWidth);
-
-// 1200px min
-@fluidGridColumnWidth1200:     percentage(@gridColumnWidth1200/@gridRowWidth1200);
-@fluidGridGutterWidth1200:     percentage(@gridGutterWidth1200/@gridRowWidth1200);
-
-// 768px-979px
-@fluidGridColumnWidth768:      percentage(@gridColumnWidth768/@gridRowWidth768);
-@fluidGridGutterWidth768:      percentage(@gridGutterWidth768/@gridRowWidth768);
diff --git a/assets/less/bootstrap/wells.less b/assets/less/bootstrap/wells.less
deleted file mode 100644
index 84a744b..0000000
--- a/assets/less/bootstrap/wells.less
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Wells
-// --------------------------------------------------
-
-
-// Base class
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: @wellBackground;
-  border: 1px solid darken(@wellBackground, 7%);
-  .border-radius(@baseBorderRadius);
-  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
-  blockquote {
-    border-color: #ddd;
-    border-color: rgba(0,0,0,.15);
-  }
-}
-
-// Sizes
-.well-large {
-  padding: 24px;
-  .border-radius(@borderRadiusLarge);
-}
-.well-small {
-  padding: 9px;
-  .border-radius(@borderRadiusSmall);
-}
diff --git a/assets/less/code-editors.less b/assets/less/code-editors.less
deleted file mode 100644
index 25edcf5..0000000
--- a/assets/less/code-editors.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Licensed 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.
-
-
-/* site-wide Ace Editor theme overrides */
-
-.ace_scrollbar-h {
-  right: 0 !important;
-  height: 15px !important;
-}
-
-body {
-  .ace-idle-fingers .ace_marker-layer .ace_selection {
-    background: #015F6F;
-  }
-  .ace-idle-fingers .ace_gutter {
-    background: #3A3A3A;
-  }
-  .ace-idle-fingers {
-    background-color: #4d4d4d;
-  }
-  .ace-idle-fingers .ace_cursor {
-    color: #ffffff;
-  }
-  .ace-idle-fingers.ace_multiselect .ace_selection.ace_start {
-    box-shadow: 0 0 3px 0 #4d4d4d;
-  }
-  .ace-idle-fingers .ace_marker-layer .ace_active-line {
-    background: #000000;
-    opacity: 0.4;
-  }
-  .ace-idle-fingers .ace_constant {
-    color: #72cdf4;
-  }
-  .ace-idle-fingers .ace_boolean {
-    color: #ff6532;
-  }
-  .ace-idle-fingers .ace_string {
-    color: #29be9d;
-  }
-  .ace-idle-fingers .ace_collab.ace_user1 {
-    color: #4d4d4d;
-  }
-}
diff --git a/assets/less/couchdb.less b/assets/less/couchdb.less
deleted file mode 100644
index 3a423c4..0000000
--- a/assets/less/couchdb.less
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Licensed 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.
-
-@import "bootstrap/bootstrap.less";
-
-//
-// Variables
-// --------------------------------------------------
-
-
-// Global values
-// --------------------------------------------------
-
-// Links
-@linkColor:             #CA2530;
-@linkColorHover:        darken(@linkColor, 15%);
-
-// Grays
-@black:                 #0C0C0C;
-@grayDark:              #5A5A5A;
-@grayDarker:            darken(@grayDark, 10%);
-@gray:                  #F80507;
-@grayLight:             #E27B81;
-@grayLighter:           #B95D40;
-@white:                 #FDFBFB;
-
-// Accent colors
-// -------------------------
-@blue:                  #049cdb;
-@blueDark:              #0064cd;
-@green:                 #46a546;
-@red:                   #9d261d;
-@yellow:                #ffc40d;
-@orange:                #f89406;
-@pink:                  #c3325f;
-@purple:                #7a43b6;
-
-
-// Scaffolding
-// -------------------------
-@bodyBackground:        @white;
-@textColor:             @grayDark;
-
-// Typography
-// -------------------------
-@sansFontFamily:        "Helvetica Neue", Helvetica, Arial, sans-serif;
-@serifFontFamily:       Georgia, "Times New Roman", Times, serif;
-@monoFontFamily:        Monaco, Menlo, Consolas, "Courier New", monospace;
-
-@baseFontSize:          14px;
-@baseFontFamily:        @sansFontFamily;
-@baseLineHeight:        20px;
-@altFontFamily:         @serifFontFamily;
-
-@headingsFontFamily:    inherit; // empty to use BS default, @baseFontFamily
-@headingsFontWeight:    bold;    // instead of browser default, bold
-@headingsColor:         inherit; // empty to use BS default, @textColor
diff --git a/assets/less/fauxton.less b/assets/less/fauxton.less
deleted file mode 100644
index 856d4ca..0000000
--- a/assets/less/fauxton.less
+++ /dev/null
@@ -1,677 +0,0 @@
-//  Licensed 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.
-
-@import "variables.less";
-@import "bootstrap/bootstrap.less";
-@import "bootstrap/mixins.less";
-@import "../../node_modules/react-select/less/default.less";
-@import "../../node_modules/rc-slider/assets/index.css";
-
-#grid {
-  .core  {
-    .span(@gridColumns) {
-      width: (@gridColumnWidth * @gridColumns) + (@gridGutterWidth * (@gridColumns - 1));
-    }
-  }
-};
-
-
-@import "layouts.less";
-@import "prettyprint.less";
-@import "icons.less";
-@import "code-editors.less";
-@import "templates.less";
-@import "formstyles.less";
-@import "pagination.less";
-@import "trays.less";
-@import "mixins.less";
-@import "animations.less";
-@import "react-animations.less";
-@import "notification-center.less";
-
-/**
- * HTML-wide overrides
- **/
-
-*, *:before, *:after {
-  .box-sizing(border-box);
-}
-
-html {
-  height: 100%;
-}
-
-body {
-  font-size: 16px;
-  line-height:1.3;
-  padding-bottom: 0px;
-  color: #333;
-  height: 100%;
-  background-color: @sidebarBG;
-}
-
-h2,h3,h4 {font-weight: 600;}
-
-// remove blue borders from clicked elements
-button:focus, a:focus {
-  outline: 0;
-}
-
-.table input[type="checkbox"] {
-  margin: 0 0 0 8px;
-}
-
-a,
-a:visited,
-a:active {
-  color: @linkColor;
-  text-decoration: none;
-}
-
-a:hover {
-  color: @linkColorHover;
-  text-decoration: none;
-}
-
-/* bootstrap overrides */
-.page-header {
-  border-bottom: 1px solid #E3E3E3;
-  margin-bottom: 10px;
-  h3 {
-    text-transform: capitalize;
-    margin-bottom: 0;
-  }
-}
-
-.nav-tabs > li {
-  margin-right: 2px;
-  > a {
-    cursor: pointer;
-    color: #333;
-    border-color: #eeeeee #eeeeee #dddddd;
-    text-decoration: none;
-    background-color: #eeeeee;
-    border-radius: 0;
-    border-left: none;
-    border-right: none;
-    &:hover,
-    &:focus {
-      background-color: @linkColor;
-      border-top: 1px solid @linkColor;
-      color: white;
-    }
-  }
-}
-
-.well {
-  select {
-    margin: 0;
-  }
-  .controls-group {
-    &:first-child,
-    &:last-child {
-      margin-top: 24px;
-    }
-    margin-bottom: 8px;
-  }
-  .controls-row {
-    margin-bottom: 8px;
-  }
-  .row-fluid {
-    margin: 0;
-  }
-  .row-fluid .row-fluid:last-child .well-item {
-    border: none;
-  }
-  .well-item {
-    color: #666;
-    font-size: 12px;
-    border-bottom: 1px solid #e5e5e5;
-    padding: 8px 4px;
-    strong {
-      font-size: 16px;
-    }
-  }
-}
-
-.modal {
-  transform: translateX(-50%);
-  margin-left: inherit;
-}
-
-.modal-dialog {
-  display: flex;
-  flex-direction: row;
-}
-
-.modal-content {
-  flex: 1;
-  width: 560px;
-}
-
-/*TABLE STYLES*/
-table.table {
-  table-layout: fixed;
-}
-table tr td{
-  word-wrap: break-word;
-  &.select {
-    width: 20px;
-  }
-}
-thead {
-  border-bottom: 2px solid #333;
-}
-tbody {
-  padding-top: 10px;
-}
-.table-condensed td {
-  padding: 18px 5px;
-}
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
-  background-color: #F7F7F7;
-}
-
-/**
- * Fauxton-specific Bootstrap additions
- **/
-table.databases {
-  clear: both;
-}
-.nav-tabs > li > a .fonticon:before {
-  margin-right: 6px;
-  font-size: 16px;
-}
-
-.notification-icon {
-  padding-right: 8px;
-}
-
-#dashboard-upper-content{
-  .tab-content {
-    padding-top: 70px;
-  }
-
-  .well{
-    padding: 20px;
-    .border-radius(0);
-    .box-shadow(none);
-  }
-}
-
-#dashboard-content .scrollable {
-  height: auto;
-  overflow-y: auto;
-  overflow-x: hidden;
-  width: 100%;
-  position: absolute;
-  padding: 0;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-
-/*ONE PANEL TEMPLATE ONLY STYLES  AKA _all_dbs */
-
-.result-tools{
-  border-bottom: 1px solid #999999;
-  padding: 10px 0;
-  float: left;
-  width: 100%;
-  margin-bottom: 10px;
-}
-
-#db-views-tabs-nav {
-  position: fixed;
-  z-index: 1;
-  margin-top: 19px;
-  margin-bottom: 0;
-  /*background-color: #f4f4f4;*/
-  padding: 0 20px;
-}
-
-.db-views-smaller {
-  max-width: 500px;
-}
-
-/** table row selector thing **/
-.select{
-  > a{
-    display: block;
-    padding: 5px 15px 5px 5px;
-    border: 1px solid #989898;
-    position: relative;
-    background-color: #FFFFFF;
-    color: #666666;
-    &:after {
-      content: '';
-      width: 0;
-      height: 0;
-      border-left: 7px solid transparent;
-      border-right: 7px solid transparent;
-      border-top: 7px solid #989898;
-      position: absolute;
-      right: 9px;
-      top: 12px;
-    }
-    &:before{
-      content: '';
-      border-left:  1px solid #989898;
-      height: 30px;
-      position: absolute;
-      right: 30px;
-      top: 0;
-    }
-  }
-}
-
-/*documents and databases */
-
-.view.show{
-  color: @fontGrey;
-}
-
-
-// legacy - remove when soft migration to header toggles is complete
-// missing: add_config_option
-.header-icon {
-  font-size: 20px;
-  &:before {
-    float: left;
-    margin: 10px 6px 0px 0px;
-  }
-}
-
-
-.js-filter-form {
-  .help-block {
-    padding: 5px 0 5px 0;
-  }
-  .icon {
-    font-size: 16px;
-  }
-}
-
-
-//---header--//
-#dashboard > header {
-  background-color: @breadcrumbBG;
-  height: 64px;
-
-  /* the position absolute is necessary to allow the 6px box shadow overlap the panels below. The parent <header>
-   ensures the flexbox height is respected */
-  &>div {
-    height: 65px;
-    .bottom-border();
-    position: absolute;
-    width: 100%;
-    z-index: 2; /* needed because ace's selected row has a z-index of 1 & can't be overridden */
-  }
-}
-
-.header-right {
-  .well {
-    padding: 0;
-    margin: 0;
-  }
-}
-
-
-.faux-header__searchboxwrapper {
-  overflow: visible;
-  height: 64px;
-  width: 235px;
-}
-
-.faux-header__searchboxcontainer {
-  height: @collapsedNavWidth;
-  overflow: visible;
-  position: absolute;
-  padding: 12px;
-}
-
-.faux-header__searchboxcontainer {
-  .Select-control, .Select-menu-outer {
-    width: 210px;
-  }
-}
-
-// this allows the results expand as much as need be when the component is used in the header
-.Select-menu-outer {
-  &>div>div {
-    padding-right: 25px; // prevents overlapping of auto-generated scrollbar
-  }
-  min-width: 210px;
-  max-width: 450px;
-  width: auto;
-}
-
-// react-select color design
-.Select div.Select-control {
-  border-radius: initial;
-  border: none;
-}
-
-.Select .Select-menu-outer {
-  border-radius: inherit;
-  border: none;
-}
-
-.Select-option {
-  color: #fff;
-  background-color: #333333;
-}
-
-.Select .is-focused {
-  background-color: @hoverHighlight;
-}
-
-.Select-option:hover {
-  background-color: @hoverHighlight;
-}
-
-.Select-option:last-child {
-  border-radius: initial;
-}
-
-.Select .is-focused:not(.is-open) > .Select-control {
-  box-shadow: transparent;
-}
-
-.Select-option.is-selected {
-  color: #fff;
-}
-
-.Select .Select-menu {
-  max-height: 291px;
-  background-color: #333333;
-}
-.Select-arrow-zone > .Select-arrow {
-  border-top-color: #333;
-
-}
-
-.Select-arrow-zone:hover > .Select-arrow {
-  border-top-color: @hoverHighlight;
-}
-
-
-//----footer--///
-
-footer.pagination-footer {
-  background-color: #fff;
-  border-top: 1px solid #ccc;
-  height: 50px;
-  overflow: hidden;
-
-  font-size: 14px;
-
-  .pagination {
-    .box-shadow(none);
-    margin: 0;
-    height: 50px;
-    border-left: 1px solid #ccc;
-    li {
-      display: inline-block;
-      a {
-        padding: 15px 10px 15px 15px;
-        border: none;
-      }
-    }
-  }
-
-  .page-controls {
-    float: left;
-
-  }
-
-  .current-databases,
-  .current-docs {
-    float: right;
-    margin: 17px 20px 17px 20px;
-  }
-
-  .documents-pagination {
-    float: right;
-  }
-  #per-page {
-    float: right;
-    top: 2px;
-    #select-per-page {
-      margin-top: 10px;
-    }
-  }
-}
-
-#right-content {
-  footer.pagination-footer {
-    bottom: @collapsedNavWidth;
-  }
-}
-
-#primary-nav-right-shadow {
-  position: absolute;
-  top: 0px;
-  right: 0px;
-  bottom: 0px;
-  background-color: rgba(0, 0, 0, 0.1);
-  width: 6px;
-  z-index: 6;
-}
-
-.modal-title {
-  font-size: 22px;
-  margin: 0;
-  line-height: 30px;
-}
-
-.modal-footer {
-  background-color: transparent;
-  border-top: none;
-  color: #666;
-}
-
-.modal-footer a {
-  color: #666;
-}
-
-.modal-header {
-  border-bottom: 1px solid #666;
-}
-
-.simple-header {
-  font-weight: 400;
-  font-size: 15pt;
-  border-bottom: 1px solid #cccccc;
-  margin-bottom: 30px;
-  margin-top: 0;
-}
-
-// left navigationbar is opened
-@media (max-width: 730px) {
-  .closeMenu {
-    .one-pane {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-@media (max-width: 860px) {
-  .closeMenu {
-    .with-sidebar {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-// left navigationbar is closed
-@media (max-width: 875px) {
-  #main:not(.closeMenu) {
-    .one-pane {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-@media (max-width: 1015px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .faux-header__searchboxwrapper {
-        display: none;
-      }
-    }
-  }
-}
-
-body .control-toggle-include-docs span {
-  margin-left: 0;
-  &::before {
-    content: "Include Docs";
-  }
-}
-
-@media (max-width: 1177px) {
-  #main.closeMenu {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: " Docs";
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-
-@media (max-width: 1120px) {
-  #main.closeMenu {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        button:not(.control-toggle-include-docs) span {
-          display: none;
-        }
-        button i:before {
-          float: none;
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-        #query-options-tray:before {
-          right: 180px;
-        }
-        .api-bar-tray:before {
-          right: 68px;
-        }
-      }
-    }
-  }
-}
-
-@media (max-width: 1339px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-@media (max-width: 1090px) {
-  #main:not(.closeMenu) {
-    .with-sidebar {
-      .two-panel-header {
-        .control-toggle-include-docs span::before {
-          content: "Docs";
-        }
-        button:not(.control-toggle-include-docs) span {
-          display: none;
-        }
-        button i:before {
-          float: none;
-        }
-        #query-options-tray:before {
-          right: 180px;
-        }
-        .right-header button i:before {
-          margin: 2px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-.capitalize {
-  text-transform: capitalize;
-}
-
-.fauxton-table-list {
-  a.db-actions,
-  a.db-actions:visited {
-    color: @linkColor;
-    border: 1px solid #e3e3e3;
-    padding: 5px 7px;
-    .border-radius(6px);
-    text-decoration: none;
-    font-size: 19px;
-    &:hover {
-      background-color: @hoverHighlight;
-      color: white;
-    }
-  }
-  td {
-    vertical-align: middle;
-  }
-}
-
-.btn-space {
-  margin-right: 5px;
-}
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0,0,0,0);
-  border: 0;
-}
-
-.btn-group.toggle-btns{
-  input[type=radio] {
-    display: none;
-  }
-  label.btn {
-    margin-right: 0;
-  }
-}
diff --git a/assets/less/formstyles.less b/assets/less/formstyles.less
deleted file mode 100644
index 0d70aed..0000000
--- a/assets/less/formstyles.less
+++ /dev/null
@@ -1,372 +0,0 @@
-//  Licensed 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.
-
-@import "variables.less";
-@import "icons.less";
-
-input[type="text"],
-input[type="password"] {
-  .border-radius(0);
-  padding: 12px;
-  border: 1px solid #ccc;
-  height: auto;
-  font-size: 16px;
-  margin-top: 0;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-
-input[type="file"],
-input[type="checkbox"],
-input[type="radio"],
-select {
-  margin: 0 0 1em 0;
-}
-
-/*form elements and buttons*/
-.btn-group {
-  > .btn + .dropdown-toggle,
-  > .btn:first-child,
-  > .btn:last-child,
-  > .dropdown-toggle {
-    .border-radius(0);
-    background-image: none;
-    text-shadow: none;
-  }
-}
-
-button:focus {
-  outline: 0 !important;
-}
-
-.btn {
-  .box-shadow(none);
-  .border-radius(@baseBorderRadius);
-  background-image: none;
-  text-shadow: none;
-  background-repeat: no-repeat;
-  padding: 10px;
-  margin-top: 0;
-  .icon {
-    margin-right: 0.2em;
-  }
-  &.btn-small {
-    padding: 5px 10px;
-    .icon {
-      margin-right: 0;
-      font-size: inherit;
-    }
-  }
-  &.btn-mini {
-    padding: 3px 8px;
-    .icon {
-      margin-right: 0;
-      font-size: inherit;
-    }
-  }
-}
-.btn-primary,
-.btn-success {
-  color: @buttonText;
-  background-color: @primaryGreen;
-  border-color: @primaryGreen;
-  &:disabled {
-    background-color: @primaryGreenDisabled;
-    border-color: @primaryGreenDisabled;
-    color: @buttonTextDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-secondary {
-  color: @buttonText;
-  background-color: @secondaryBlue;
-  border-color: @secondaryBlue;
-  &:disabled {
-    color: @buttonTextDisabled;
-    background-color: @secondaryBlueDisabled;
-    border-color: @secondaryBlueDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-tertiary {
-  color: @secondaryBlue;
-  background-color: @buttonText;
-  border: 2px solid @secondaryBlue;
-  &:disabled {
-    color: @secondaryBlueDisabled;
-    background-color: @primaryGreenDisabled;
-    border-color: @buttonTextDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-warning,
-.btn-danger {
-  color: @buttonText;
-  background-color: @dangerRed;
-  border-color: @dangerRed;
-  &:disabled {
-    color: @buttonTextDisabled;
-    background-color: @dangerDisabled;
-    border-color: @dangerDisabled;
-    pointer-events: none;
-  }
-}
-
-.btn-success:hover,
-.btn-primary:hover,
-.btn-secondary:hover,
-.btn-tertiary:hover,
-.btn-warning:hover,
-.btn-danger:hover {
-  background-color: @hoverHighlight;
-  border-color: @hoverHighlight;
-}
-
-.form-actions {
-  background: none;
-  border: none;
-}
-
-.input-append,
-.input-prepend {
-  .add-on {
-    font-size: 18px;
-    padding: 14px 5px 30px;
-  }
-  .btn .icon {
-    font-size: 16px;
-    margin-right: 0;
-  }
-}
-
-.row-fluid .input-append [class*="span"],
-.input-prepend input[class*="span"] {
-  width: auto;
-}
-
-.form-inline {
-  input[type="password"],
-  input[type="text"] {
-    width: auto;
-  }
-}
-.checkbox {
-  label {
-    display: inline-block;
-    padding-left: 30px;
-  }
-}
-
-label {
-  margin-right: 15px;
-  padding-left: 0;
-  display: block;
-  cursor: pointer;
-  position: relative;
-  font-size: 14px;
-  &.inline {
-    display: inline-block;
-  }
-}
-.help-block {
-  font-size: 12px;
-}
-
-a.help-link {
-  color: @secondaryBlue;
-  text-decoration: none;
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-input[type="text"].error {
-  border: red 1px solid;
-}
-
-form.view-query-update,
-form.view-query-save {
-  max-width: 100%;
-}
-
-.custom-inputs {
-  input[type="radio"],
-  input[type="checkbox"] {
-    display: none;
-  }
-
-  .checkbox label:before {
-    border-radius: 12px;
-    background-color: rgba(255, 255, 255, 0.1);
-    border: 2px solid rgba(255, 255, 255, 0.1);
-    transition: linear 0.2s, box-shadow linear 0.2s;
-    -moz-transition: linear 0.2s, box-shadow linear 0.2s;
-    -webkit-transition: linear 0.2s, box-shadow linear 0.2s;
-  }
-
-  .controls > .radio:first-child,
-  .controls > .checkbox:first-child {
-    padding-top: 15px;
-  }
-
-  .radio.inline,
-  .checkbox.inline {
-    display: inline-block;
-    padding-top: 15px;
-    margin-bottom: 12px;
-    vertical-align: middle;
-  }
-
-  input[type="checkbox"] + label:hover:before {
-    border: 2px solid @white;
-    transition: linear 0.2s, box-shadow linear 0.2s;
-    -moz-transition: linear 0.2s, box-shadow linear 0.2s;
-    -webkit-transition: linear 0.2s, box-shadow linear 0.2s;
-  }
-
-  /* if the checkbox is disabled, we don't want the red border on hover */
-  input[type="checkbox"]:disabled + label:hover:before {
-    border: none;
-  }
-
-  /* if the checkbox is disabled, we don't want the white border on hover */
-  input[type="checkbox"]:disabled + label:hover:before {
-    border: none;
-  }
-
-  input[type="checkbox"]:checked + label {
-    .fonticon-ok;
-  }
-  input[type="checkbox"]:checked + label:before {
-    font-family: @fauxtonFont;
-    font-size: 12px;
-    background-color: inherit;
-    border: 2px solid #7c8085;
-    color: @linkColor;
-    text-align: center;
-    line-height: 19px;
-    box-shadow: none;
-    display: inline-block;
-  }
-
-  label:before {
-    content: "";
-    display: inline-block;
-    width: 22px;
-    height: 22px;
-    margin-right: 10px;
-    position: absolute;
-    left: 0;
-    bottom: 0;
-    background-color: #7c8085;
-  }
-
-  .radio label:before {
-    border-radius: 8px;
-  }
-
-  input[type="radio"]:checked + label:before {
-    content: "\2022";
-    color: #f3f3f3;
-    font-size: 30px;
-    text-align: center;
-    line-height: 18px;
-  }
-
-  label.drop-down {
-    &:before {
-      display: none;
-    }
-  }
-}
-
-div.add-dropdown {
-  position: absolute;
-  top: 2px;
-  right: 0;
-  .dropdown-menu {
-    left: -110px;
-    padding-bottom: 0;
-    width: 148px;
-    min-width: 0;
-    top: 38px;
-    .box-shadow(@boxShadow);
-    &.arrow:before {
-      right: 4px;
-    }
-    a {
-      background-color: @brandDark1;
-      color: @navIconColor;
-      &:hover {
-        background-color: @hoverHighlight;
-        color: white;
-      }
-    }
-    li a {
-      padding: 10px 15px 10px 12px;
-    }
-  }
-  .dropdown-toggle {
-    border-top: none !important;
-    text-decoration: none;
-  }
-  > a {
-    border-bottom: none;
-    text-decoration: none;
-    font-size: 16px;
-  }
-}
-
-input.errorHighlight {
-  -webkit-animation: errorBlinkBG 1s;
-  animation: errorBlinkBG 1s;
-}
-
-.two-sides-toggle-button {
-  font-size: 15px;
-  padding: 0 11px;
-
-  button.btn {
-    padding: 10px 15px;
-    background-color: #fff;
-    color: #888;
-    &.active:first-child {
-      border-right-radius: 10px;
-    }
-    &:hover {
-      background-color: @hoverHighlight;
-      color: #fff;
-      .box-shadow(none);
-    }
-    &.active {
-      /**
-       * The Reselect Components dropdown will go under the btn group on active 
-       * since its relatively positioned before this component which is also relatively 
-       * positioned. Based on the stacking context, no amount of z-index applied
-       * to the dropdown will overcome the activated btns z-index set in Bootstrap.
-       * The fix is to apply a z-index of !important here to override boostraps styling
-       * so the dropdown can go over the activated button. 
-       */
-      z-index: 1 !important;
-      background-color: @brandHighlight;
-      color: #ffffff;
-      .box-shadow(none);
-    }
-  }
-}
diff --git a/assets/less/icons.less b/assets/less/icons.less
deleted file mode 100644
index 1dcdc10..0000000
--- a/assets/less/icons.less
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
-*	Icon Font: fauxtonicon5
-*/
-
-/*  Licensed 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.
- */
-
-/* had to add a custom template to the generator to get this to compile to append the proper path and specify  "url" instead of "font-url":
-https://github.com/seanbarclay/fontcustom/blob/1c3ad3d2633d3a8add39e8827115394e9ec02d88/lib/fontcustom/generator/template.rb
-*/
-@fauxtonFont: "fauxtonicon5";
-@icon-activetasks: "\f100";
-@icon-arrow-box-down: "\f101";
-@icon-arrow-box-up: "\f102";
-@icon-arrow_left: "\f103";
-@icon-arrow_right: "\f104";
-@icon-arrows-cw: "\f105";
-@icon-article: "\f106";
-@icon-attention-alt: "\f107";
-@icon-attention-circled: "\f108";
-@icon-bell: "\f109";
-@icon-block: "\f10a";
-@icon-bookmark: "\f10b";
-@icon-bookmark-ribbon-wplus: "\f10c";
-@icon-burger: "\f10d";
-@icon-cancel: "\f10e";
-@icon-cancel-circled: "\f10f";
-@icon-cancel-circled2: "\f110";
-@icon-circle-empty: "\f111";
-@icon-clipboard: "\f112";
-@icon-clock: "\f113";
-@icon-cog: "\f114";
-@icon-collapse: "\f115";
-@icon-cw: "\f116";
-@icon-dashboard: "\f117";
-@icon-database: "\f118";
-@icon-deselect-all: "\f119";
-@icon-document: "\f11a";
-@icon-documents: "\f11b";
-@icon-dot-circled: "\f11c";
-@icon-down: "\f11d";
-@icon-down-1: "\f11e";
-@icon-down-circled: "\f11f";
-@icon-down-dir: "\f120";
-@icon-down-open: "\f121";
-@icon-drop-down-dots: "\f122";
-@icon-exchange: "\f123";
-@icon-expand: "\f124";
-@icon-eye: "\f125";
-@icon-file-code-o: "\f126";
-@icon-files-o: "\f127";
-@icon-filter: "\f128";
-@icon-gears: "\f129";
-@icon-help: "\f12a";
-@icon-help-circled: "\f12b";
-@icon-info-circled: "\f12c";
-@icon-json: "\f12d";
-@icon-key: "\f12e";
-@icon-left: "\f12f";
-@icon-left-1: "\f130";
-@icon-left-circled: "\f131";
-@icon-left-dir: "\f132";
-@icon-left-open: "\f133";
-@icon-link: "\f134";
-@icon-list-alt: "\f135";
-@icon-lock: "\f136";
-@icon-mail: "\f137";
-@icon-mail-alt: "\f138";
-@icon-map: "\f139";
-@icon-map2: "\f13a";
-@icon-megaphone: "\f13b";
-@icon-minus: "\f13c";
-@icon-minus-circled: "\f13d";
-@icon-minus-circled2: "\f13e";
-@icon-minus-squared: "\f13f";
-@icon-minus-squared-alt: "\f140";
-@icon-mixer: "\f141";
-@icon-new-database: "\f142";
-@icon-ok: "\f143";
-@icon-ok-circled: "\f144";
-@icon-ok-circled-2: "\f145";
-@icon-paperclip: "\f146";
-@icon-pencil: "\f147";
-@icon-picture: "\f148";
-@icon-play: "\f149";
-@icon-plus: "\f14a";
-@icon-plus-circled: "\f14b";
-@icon-plus-circled2: "\f14c";
-@icon-plus-squared: "\f14d";
-@icon-plus-squared-alt: "\f14e";
-@icon-popin: "\f14f";
-@icon-popout: "\f150";
-@icon-profile: "\f151";
-@icon-replicate: "\f152";
-@icon-reply: "\f153";
-@icon-reply-all: "\f154";
-@icon-resize-full: "\f155";
-@icon-resize-full-reverse: "\f156";
-@icon-resize-small: "\f157";
-@icon-resize-small-reverse: "\f158";
-@icon-right: "\f159";
-@icon-right-1: "\f15a";
-@icon-right-circled: "\f15b";
-@icon-right-dir: "\f15c";
-@icon-right-open: "\f15d";
-@icon-save: "\f15e";
-@icon-search: "\f15f";
-@icon-select-all: "\f160";
-@icon-sidenav-filter-function: "\f161";
-@icon-sidenav-info: "\f162";
-@icon-sidenav-list-function: "\f163";
-@icon-sidenav-map-reduce: "\f164";
-@icon-sidenav-search: "\f165";
-@icon-sidenav-show-function: "\f166";
-@icon-sidenav-update-function: "\f167";
-@icon-sitemap: "\f168";
-@icon-stats: "\f169";
-@icon-support: "\f16a";
-@icon-swap-arrows: "\f16b";
-@icon-table: "\f16c";
-@icon-trash: "\f16d";
-@icon-up: "\f16e";
-@icon-up-1: "\f16f";
-@icon-up-circled: "\f170";
-@icon-up-dir: "\f171";
-@icon-up-open: "\f172";
-@icon-user: "\f173";
-@icon-users: "\f174";
-@icon-vertical-ellipsis: "\f175";
-@icon-wrench: "\f176";
-@icon-wrench2: "\f177";
-
-@font-face {
-  font-family: "fauxtonicon5";
-  src: url("../fonts/fauxtonicon5.eot");
-  src: url("../fonts/fauxtonicon5.eot?#iefix") format("embedded-opentype"),
-       url("../fonts/fauxtonicon5.woff") format("woff"),
-       url("../fonts/fauxtonicon5.ttf") format("truetype"),
-       url("../fonts/fauxtonicon5.svg#fauxtonicon5") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "fauxtonicon5";
-    src: url("../fonts/fauxtonicon5.svg#fauxtonicon5") format("svg");
-  }
-}
-
-[data-icon]:before { content: attr(data-icon); }
-
-[data-icon]:before,
-.fonticon-activetasks:before,
-.fonticon-arrow-box-down:before,
-.fonticon-arrow-box-up:before,
-.fonticon-arrow_left:before,
-.fonticon-arrow_right:before,
-.fonticon-arrows-cw:before,
-.fonticon-article:before,
-.fonticon-attention-alt:before,
-.fonticon-attention-circled:before,
-.fonticon-bell:before,
-.fonticon-block:before,
-.fonticon-bookmark:before,
-.fonticon-bookmark-ribbon-wplus:before,
-.fonticon-burger:before,
-.fonticon-cancel:before,
-.fonticon-cancel-circled:before,
-.fonticon-cancel-circled2:before,
-.fonticon-circle-empty:before,
-.fonticon-clipboard:before,
-.fonticon-clock:before,
-.fonticon-cog:before,
-.fonticon-collapse:before,
-.fonticon-cw:before,
-.fonticon-dashboard:before,
-.fonticon-database:before,
-.fonticon-deselect-all:before,
-.fonticon-document:before,
-.fonticon-documents:before,
-.fonticon-dot-circled:before,
-.fonticon-down:before,
-.fonticon-down-1:before,
-.fonticon-down-circled:before,
-.fonticon-down-dir:before,
-.fonticon-down-open:before,
-.fonticon-drop-down-dots:before,
-.fonticon-exchange:before,
-.fonticon-expand:before,
-.fonticon-eye:before,
-.fonticon-file-code-o:before,
-.fonticon-files-o:before,
-.fonticon-filter:before,
-.fonticon-gears:before,
-.fonticon-help:before,
-.fonticon-help-circled:before,
-.fonticon-info-circled:before,
-.fonticon-json:before,
-.fonticon-key:before,
-.fonticon-left:before,
-.fonticon-left-1:before,
-.fonticon-left-circled:before,
-.fonticon-left-dir:before,
-.fonticon-left-open:before,
-.fonticon-link:before,
-.fonticon-list-alt:before,
-.fonticon-lock:before,
-.fonticon-mail:before,
-.fonticon-mail-alt:before,
-.fonticon-map:before,
-.fonticon-map2:before,
-.fonticon-megaphone:before,
-.fonticon-minus:before,
-.fonticon-minus-circled:before,
-.fonticon-minus-circled2:before,
-.fonticon-minus-squared:before,
-.fonticon-minus-squared-alt:before,
-.fonticon-mixer:before,
-.fonticon-new-database:before,
-.fonticon-ok:before,
-.fonticon-ok-circled:before,
-.fonticon-ok-circled-2:before,
-.fonticon-paperclip:before,
-.fonticon-pencil:before,
-.fonticon-picture:before,
-.fonticon-play:before,
-.fonticon-plus:before,
-.fonticon-plus-circled:before,
-.fonticon-plus-circled2:before,
-.fonticon-plus-squared:before,
-.fonticon-plus-squared-alt:before,
-.fonticon-popin:before,
-.fonticon-popout:before,
-.fonticon-profile:before,
-.fonticon-replicate:before,
-.fonticon-reply:before,
-.fonticon-reply-all:before,
-.fonticon-resize-full:before,
-.fonticon-resize-full-reverse:before,
-.fonticon-resize-small:before,
-.fonticon-resize-small-reverse:before,
-.fonticon-right:before,
-.fonticon-right-1:before,
-.fonticon-right-circled:before,
-.fonticon-right-dir:before,
-.fonticon-right-open:before,
-.fonticon-save:before,
-.fonticon-search:before,
-.fonticon-select-all:before,
-.fonticon-sidenav-filter-function:before,
-.fonticon-sidenav-info:before,
-.fonticon-sidenav-list-function:before,
-.fonticon-sidenav-map-reduce:before,
-.fonticon-sidenav-search:before,
-.fonticon-sidenav-show-function:before,
-.fonticon-sidenav-update-function:before,
-.fonticon-sitemap:before,
-.fonticon-stats:before,
-.fonticon-support:before,
-.fonticon-swap-arrows:before,
-.fonticon-table:before,
-.fonticon-trash:before,
-.fonticon-up:before,
-.fonticon-up-1:before,
-.fonticon-up-circled:before,
-.fonticon-up-dir:before,
-.fonticon-up-open:before,
-.fonticon-user:before,
-.fonticon-users:before,
-.fonticon-vertical-ellipsis:before,
-.fonticon-wrench:before,
-.fonticon-wrench2:before {
-  display: inline-block;
-  font-family: "fauxtonicon5";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-}
-
-.fonticon-activetasks { &:before { content: "\f100"; }}
-.fonticon-arrow-box-down { &:before { content: "\f101"; }}
-.fonticon-arrow-box-up { &:before { content: "\f102"; }}
-.fonticon-arrow_left { &:before { content: "\f103"; }}
-.fonticon-arrow_right { &:before { content: "\f104"; }}
-.fonticon-arrows-cw { &:before { content: "\f105"; }}
-.fonticon-article { &:before { content: "\f106"; }}
-.fonticon-attention-alt { &:before { content: "\f107"; }}
-.fonticon-attention-circled { &:before { content: "\f108"; }}
-.fonticon-bell { &:before { content: "\f109"; }}
-.fonticon-block { &:before { content: "\f10a"; }}
-.fonticon-bookmark { &:before { content: "\f10b"; }}
-.fonticon-bookmark-ribbon-wplus { &:before { content: "\f10c"; }}
-.fonticon-burger { &:before { content: "\f10d"; }}
-.fonticon-cancel { &:before { content: "\f10e"; }}
-.fonticon-cancel-circled { &:before { content: "\f10f"; }}
-.fonticon-cancel-circled2 { &:before { content: "\f110"; }}
-.fonticon-circle-empty { &:before { content: "\f111"; }}
-.fonticon-clipboard { &:before { content: "\f112"; }}
-.fonticon-clock { &:before { content: "\f113"; }}
-.fonticon-cog { &:before { content: "\f114"; }}
-.fonticon-collapse { &:before { content: "\f115"; }}
-.fonticon-cw { &:before { content: "\f116"; }}
-.fonticon-dashboard { &:before { content: "\f117"; }}
-.fonticon-database { &:before { content: "\f118"; }}
-.fonticon-deselect-all { &:before { content: "\f119"; }}
-.fonticon-document { &:before { content: "\f11a"; }}
-.fonticon-documents { &:before { content: "\f11b"; }}
-.fonticon-dot-circled { &:before { content: "\f11c"; }}
-.fonticon-down { &:before { content: "\f11d"; }}
-.fonticon-down-1 { &:before { content: "\f11e"; }}
-.fonticon-down-circled { &:before { content: "\f11f"; }}
-.fonticon-down-dir { &:before { content: "\f120"; }}
-.fonticon-down-open { &:before { content: "\f121"; }}
-.fonticon-drop-down-dots { &:before { content: "\f122"; }}
-.fonticon-exchange { &:before { content: "\f123"; }}
-.fonticon-expand { &:before { content: "\f124"; }}
-.fonticon-eye { &:before { content: "\f125"; }}
-.fonticon-file-code-o { &:before { content: "\f126"; }}
-.fonticon-files-o { &:before { content: "\f127"; }}
-.fonticon-filter { &:before { content: "\f128"; }}
-.fonticon-gears { &:before { content: "\f129"; }}
-.fonticon-help { &:before { content: "\f12a"; }}
-.fonticon-help-circled { &:before { content: "\f12b"; }}
-.fonticon-info-circled { &:before { content: "\f12c"; }}
-.fonticon-json { &:before { content: "\f12d"; }}
-.fonticon-key { &:before { content: "\f12e"; }}
-.fonticon-left { &:before { content: "\f12f"; }}
-.fonticon-left-1 { &:before { content: "\f130"; }}
-.fonticon-left-circled { &:before { content: "\f131"; }}
-.fonticon-left-dir { &:before { content: "\f132"; }}
-.fonticon-left-open { &:before { content: "\f133"; }}
-.fonticon-link { &:before { content: "\f134"; }}
-.fonticon-list-alt { &:before { content: "\f135"; }}
-.fonticon-lock { &:before { content: "\f136"; }}
-.fonticon-mail { &:before { content: "\f137"; }}
-.fonticon-mail-alt { &:before { content: "\f138"; }}
-.fonticon-map { &:before { content: "\f139"; }}
-.fonticon-map2 { &:before { content: "\f13a"; }}
-.fonticon-megaphone { &:before { content: "\f13b"; }}
-.fonticon-minus { &:before { content: "\f13c"; }}
-.fonticon-minus-circled { &:before { content: "\f13d"; }}
-.fonticon-minus-circled2 { &:before { content: "\f13e"; }}
-.fonticon-minus-squared { &:before { content: "\f13f"; }}
-.fonticon-minus-squared-alt { &:before { content: "\f140"; }}
-.fonticon-mixer { &:before { content: "\f141"; }}
-.fonticon-new-database { &:before { content: "\f142"; }}
-.fonticon-ok { &:before { content: "\f143"; }}
-.fonticon-ok-circled { &:before { content: "\f144"; }}
-.fonticon-ok-circled-2 { &:before { content: "\f145"; }}
-.fonticon-paperclip { &:before { content: "\f146"; }}
-.fonticon-pencil { &:before { content: "\f147"; }}
-.fonticon-picture { &:before { content: "\f148"; }}
-.fonticon-play { &:before { content: "\f149"; }}
-.fonticon-plus { &:before { content: "\f14a"; }}
-.fonticon-plus-circled { &:before { content: "\f14b"; }}
-.fonticon-plus-circled2 { &:before { content: "\f14c"; }}
-.fonticon-plus-squared { &:before { content: "\f14d"; }}
-.fonticon-plus-squared-alt { &:before { content: "\f14e"; }}
-.fonticon-popin { &:before { content: "\f14f"; }}
-.fonticon-popout { &:before { content: "\f150"; }}
-.fonticon-profile { &:before { content: "\f151"; }}
-.fonticon-replicate { &:before { content: "\f152"; }}
-.fonticon-reply { &:before { content: "\f153"; }}
-.fonticon-reply-all { &:before { content: "\f154"; }}
-.fonticon-resize-full { &:before { content: "\f155"; }}
-.fonticon-resize-full-reverse { &:before { content: "\f156"; }}
-.fonticon-resize-small { &:before { content: "\f157"; }}
-.fonticon-resize-small-reverse { &:before { content: "\f158"; }}
-.fonticon-right { &:before { content: "\f159"; }}
-.fonticon-right-1 { &:before { content: "\f15a"; }}
-.fonticon-right-circled { &:before { content: "\f15b"; }}
-.fonticon-right-dir { &:before { content: "\f15c"; }}
-.fonticon-right-open { &:before { content: "\f15d"; }}
-.fonticon-save { &:before { content: "\f15e"; }}
-.fonticon-search { &:before { content: "\f15f"; }}
-.fonticon-select-all { &:before { content: "\f160"; }}
-.fonticon-sidenav-filter-function { &:before { content: "\f161"; }}
-.fonticon-sidenav-info { &:before { content: "\f162"; }}
-.fonticon-sidenav-list-function { &:before { content: "\f163"; }}
-.fonticon-sidenav-map-reduce { &:before { content: "\f164"; }}
-.fonticon-sidenav-search { &:before { content: "\f165"; }}
-.fonticon-sidenav-show-function { &:before { content: "\f166"; }}
-.fonticon-sidenav-update-function { &:before { content: "\f167"; }}
-.fonticon-sitemap { &:before { content: "\f168"; }}
-.fonticon-stats { &:before { content: "\f169"; }}
-.fonticon-support { &:before { content: "\f16a"; }}
-.fonticon-swap-arrows { &:before { content: "\f16b"; }}
-.fonticon-table { &:before { content: "\f16c"; }}
-.fonticon-trash { &:before { content: "\f16d"; }}
-.fonticon-up { &:before { content: "\f16e"; }}
-.fonticon-up-1 { &:before { content: "\f16f"; }}
-.fonticon-up-circled { &:before { content: "\f170"; }}
-.fonticon-up-dir { &:before { content: "\f171"; }}
-.fonticon-up-open { &:before { content: "\f172"; }}
-.fonticon-user { &:before { content: "\f173"; }}
-.fonticon-users { &:before { content: "\f174"; }}
-.fonticon-vertical-ellipsis { &:before { content: "\f175"; }}
-.fonticon-wrench { &:before { content: "\f176"; }}
-.fonticon-wrench2 { &:before { content: "\f177"; }}
diff --git a/assets/less/layouts.less b/assets/less/layouts.less
deleted file mode 100644
index ea871cb..0000000
--- a/assets/less/layouts.less
+++ /dev/null
@@ -1,166 +0,0 @@
-@import "variables.less";
-@import "mixins.less";
-
-
-/* new flex layout for templates. Specificity needed for now. Will remove at end */
-body #dashboard .flex-layout,
-body #dashboard.flex-layout,
-body #notification-center .flex-layout {
-  .display-flex();
-
-  &.flex-col {
-    .flex-direction(column);
-  }
-  &.flex-row {
-    .flex-direction(row);
-  }
-
-  /* FLEXBOX REFACTOR: temporary overrides */
-  padding: 0;
-  &>div {
-    padding: 0;
-  }
-  /* end overrides */
-
-  /*
-  always default all child elements as flex items that neither shrink nor expand. Assumes all flex-layout containers
-  contain at least one .flex-body to indicate that's the one that expands
-  */
-  &>* {
-    .flex(0,1,auto);
-  }
-
-  /* notice we don't set heights. Flex will expand to fill the content but no more */
-  #dashboard-upper-content {
-    .flex(0 0 auto);
-  }
-  #dashboard-lower-content {
-    padding: @panelPadding;
-  }
-
-  #footer {
-    .flex(0 0 auto);
-  }
-}
-
-/* can be added to any element in a display:flex element that you want to act as the main body. It expands to the
-   available space and shows a scrollbar */
-body #dashboard .flex-body, body #notification-center .flex-body {
-  .flex(1);
-  overflow: auto;
-}
-
-/* tells an element to be as large as the content. This will replace the hardcoded ones */
-body #dashboard .flex-fill {
-  .flex(0 0 auto);
-}
-
-/* used on the databases page. To be removed once moved to flexbox */
-.faux__onepane-footer {
-  position: absolute;
-  bottom: 0;
-  width: 100%;
-  margin: 0;
-}
-
-/* this drops .fixed-header, which was a position:absolute'd element, and switches it and all children to use flexbox. */
-.one-pane > header {
-  width: 100%;
-
-  #right-header {
-    -ms-flex-preferred-size: auto;
-    -webkit-flex: 0 0 auto;
-    flex-grow: 0;
-    flex-shrink: 0;
-    flex-basis: inherit;
-  }
-  #api-navbar {
-    .flex(0 0 auto);
-  }
-}
-
-body #dashboard .flex-body#right-header {
-  .flex(0 1 auto);
-  overflow: hidden;
-}
-
-body #dashboard .flex-layout #api-navbar {
-  .flex(0 0 auto);
-}
-
-/* temporary wedge. Can be replaced at end */
-.with-sidebar {
-
-  #api-navbar {
-    float: right;
-  }
-  /* end tmp wedge */
-}
-
-body #dashboard .header-right-panel {
-  overflow: hidden;
-}
-
-.right-header-wrapper {
-  #api-navbar {
-    float: right;
-  }
-}
-
-body #dashboard .right-db-header {
-  &>div {
-    .flex(1 0 auto);
-    /*overflow: hidden; */
-  }
-}
-
-/** FLEXBOX REFACTOR: "body #dashboard" can be removed at end. Specificity needed right now */
-body #dashboard.two-pane {
-  height: 100%;
-
-  /* this will be renamed & reused once all templates use flexbox */
-  #two-pane-content {
-    .display-flex();
-    .flex-direction(row);
-  }
-  #left-content {
-    .flex(0 0 440px);
-  }
-  #footer {
-    .flex(0 0 50px)
-  }
-
-  /* overrides a weird default */
-  .editor-wrapper form {
-    padding-bottom: 0;
-  }
-
-  /* temporary. header-wrapper will be converted to flexbox everywhere */
-  .header-wrapper {
-    .flex(0 0 65px);
-    position: inherit;
-  }
-}
-
-body #dashboard.template-with-sidebar {
-  header {
-    .flex(0 0 65px);
-  }
-  #sidebar-content {
-    .flex(0 0 330px);
-    overflow: auto;
-    overflow-x: hidden;
-  }
-  .template-content {
-    overflow: hidden;
-  }
-  #dashboard-content {
-    border-left: 1px solid @grayLight;
-    .left-border();
-  }
-}
-
-/* tmp. Will be removed at end of flexbox refactor */
-aside#sidebar-content {
-  top: 64px;
-}
diff --git a/assets/less/mixins.less b/assets/less/mixins.less
deleted file mode 100644
index f8e5068..0000000
--- a/assets/less/mixins.less
+++ /dev/null
@@ -1,66 +0,0 @@
-.translate-origin(@x, @y) {
-  -webkit-transform-origin: @x @y;
-     -moz-transform-origin: @x @y;
-      -ms-transform-origin: @x @y;
-       -o-transform-origin: @x @y;
-          transform-origin: @x @y;
-}
-
-.customTransition(@prop, @delay, @a, @b, @c, @d){
--webkit-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-   -moz-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-    -ms-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-     -o-transition: @prop, @delay cubic-bezier(@a, @b, @c, @d);
-        transition: @prop, @delay cubic-bezier(@a, @b, @c, @d); /* custom */
-
--webkit-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-   -moz-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-    -ms-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-     -o-transition-timing-function: cubic-bezier(@a, @b, @c, @d);
-        transition-timing-function: cubic-bezier(@a, @b, @c, @d); /* custom */
-}
-
-.transition(...) {
-  -webkit-transition: @arguments;
-  -moz-transition: @arguments;
-  -ms-transition: @arguments;
-  -o-transition: @arguments;
-  transition: @arguments;
-}
-
-.bottom-border(@height: 6px) {
-  border-bottom: 1px solid #999;
-}
-
-.left-border() {
-  border-left: 1px solid #999;
-}
-
-.noselect() {
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -khtml-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-
-.display-flex() {
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-}
-
-/* rather than run through all permutations of the shorthand options for flex, this just pulls all arguments */
-.flex(...) {
-  -webkit-flex: @arguments;
-  -ms-flex: @arguments;
-  flex: @arguments;
-}
-
-/* @dir: column or row */
-.flex-direction(@dir) {
-  -webkit-flex-direction: @dir;
-  -ms-flex-direction: @dir;
-  flex-direction: @dir;
-}
diff --git a/assets/less/notification-center.less b/assets/less/notification-center.less
deleted file mode 100644
index e5b6f02..0000000
--- a/assets/less/notification-center.less
+++ /dev/null
@@ -1,229 +0,0 @@
-//  Licensed 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.
-
-@import "variables.less";
-@import "mixins.less";
-
-body #dashboard #notification-center-btn {
-  border: 0;
-  background-color: @background;
-  border-left: 1px solid #cccccc;
-  font-size: 24px;
-  color: #666;
-  padding: 0;
-  cursor: pointer;
-  .flex(0 0 auto);
-
-  &>div {
-    padding: 17px 16px 16px;
-  }
-  &:hover {
-    color: @hoverHighlight;
-  }
-}
-
-#notification-center {
-  .notification-center-panel {
-    z-index: 112;
-    position: fixed;
-    box-shadow: 0 6px 5px 4px rgba(0, 0, 0, 0.1);
-    top: 0;
-    right: 0;
-    width: 300px;
-    height: 100%;
-    background-color: #333333;
-    color: #dddddd;
-
-    header {
-      .flex(0 0 auto);
-      padding: 16px;
-
-      h1 {
-        font-size: 16px;
-        line-height: 20px;
-        margin: 0;
-        color: white;
-        font-weight: normal;
-      }
-      .fonticon-bell {
-        .flex(0 0 30px);
-      }
-      button {
-        .flex(0 0 46px);
-        background-color: transparent;
-        border: 0;
-        margin: -18px -16px -14px; /* enlarges the hit area */
-        font-size: 21px;
-        color: #dddddd;
-        &:hover {
-          color: @hoverHighlight;
-        }
-      }
-    }
-
-    .notification-filter {
-      .flex(0 0 29px);
-
-      list-style: none;
-      margin: 0;
-      font-size: 13px;
-
-      li {
-        text-align: center;
-        margin-right: 1px;
-        background-color: #444444;
-        padding: 4px 0 3px;
-        cursor: pointer;
-
-        &.selected {
-          background-color: #555555;
-        }
-        &:hover {
-          background-color: @hoverHighlight;
-          .fonticon {
-            color: white;
-          }
-        }
-      }
-      .fonticon {
-        font-size: 16px;
-      }
-      .fonticon-ok-circled {
-        font-size: 14px;
-      }
-    }
-
-    .notification-list {
-      margin: 15px 0 0;
-      list-style-type: none;
-
-      li {
-        margin: 0 16px;
-        line-height: 16px;
-        font-size: 12px;
-        overflow: hidden;
-        border-bottom: 1px solid #222222;
-
-        &.no-notifications {
-          color: #999999;
-          margin-top: 25px;
-          border-bottom: 0;
-        }
-        &>div {
-          padding: 10px 0 15px;
-        }
-        span {
-          .flex(0 0 30px);
-        }
-        button {
-          .flex(0 0 22px);
-          color: #dddddd;
-          background: transparent;
-          border: 0;
-          height: 20px;
-          margin-top: -4px;
-          margin-left: 6px;
-          font-size: 100%;
-          &:hover {
-            color: @hoverHighlight;
-          }
-        }
-        p {
-          margin-bottom: 0;
-          overflow-wrap: break-word;
-        }
-        div.flex-body {
-          overflow: hidden;
-        }
-      }
-      .fonticon {
-        font-size: 15px;
-      }
-      .fonticon-ok-circled {
-        font-size: 13px;
-      }
-      a {
-        color: white;
-        text-decoration: underline;
-      }
-      .notification-actions {
-        font-size: 11px;
-        margin-top: 2px;
-        span.divider {
-          color: #444444;
-          padding: 0 5px;
-        }
-      }
-      .time-elapsed {
-        color: #565656;
-      }
-      .copy {
-        color: @blue;
-        text-decoration: none;
-      }
-    }
-
-    footer {
-      border-top: 1px solid #555555;
-      .flex(0 0 auto);
-      text-align: center;
-      padding: 4px;
-    }
-  }
-
-  .fonticon-ok-circled {
-    color: @successAlertBackground;
-  }
-  .fonticon-attention-circled {
-    color: @globalErrorAlertBackground;
-  }
-  .fonticon-info-circled {
-    color: @infoAlertBackground;
-  }
-
-  .notification-page-mask {
-    z-index: -1;
-    position: fixed;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    opacity: 0;
-
-    &.visible {
-      z-index: 110;
-      opacity: 0.3;
-      background-color: #000000;
-    }
-  }
-}
-
-//Leaving this in for now as I'm not sure where it is used
-// @-webkit-keyframes in {
-//   0% { max-height: 0; }
-//   100% { max-height: 1000px; }
-// }
-//
-// @-webkit-keyframes out {
-//   0% { max-height: 1000px; }
-//   100% { max-height:0; }
-// }
-//
-// @keyframes in {
-//   0% { max-height: 0; }
-//   100% { max-height: 1000px; }
-// }
-//
-// @keyframes out {
-//   0% { max-height: 1000px; }
-//   100% { max-height:0; }
-// }
diff --git a/assets/less/pagination.less b/assets/less/pagination.less
deleted file mode 100644
index 9a93356..0000000
--- a/assets/less/pagination.less
+++ /dev/null
@@ -1,141 +0,0 @@
-//  Licensed 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.
-
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-
-// Space out pagination from surrounding content
-.pagination {
-  margin: @baseLineHeight 0;
-}
-
-ul.pagination {
-  // Allow for text-based alignment
-  display: inline-block;
-  .ie7-inline-block();
-  // Reset default styles
-  margin-left: 0;
-  margin-bottom: 0;
-  // Visuals
-  .border-radius(@baseBorderRadius);
-  .box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-ul.pagination > li {
-  display: inline; // Remove list-style and block-level defaults
-}
-ul.pagination > li > a,
-ul.pagination > li > span {
-  float: left; // Collapse white-space
-  padding: 4px 12px;
-  line-height: @baseLineHeight;
-  text-decoration: none;
-  background-color: @paginationBackground;
-  border: 1px solid @paginationBorder;
-  border-left-width: 0;
-}
-ul.pagination > li > a:hover,
-ul.pagination > li > a:focus,
-ul.pagination > .active > a,
-ul.pagination > .active > span {
-  background-color: @paginationActiveBackground;
-}
-ul.pagination > li > a:hover {
-  cursor: pointer;
-}
-
-ul.pagination > .active > a,
-ul.pagination > .active > a:hover,
-ul.pagination > .active > span {
-  color: @grayLight;
-  cursor: default;
-}
-ul.pagination > .disabled > span,
-ul.pagination > .disabled > a,
-ul.pagination > .disabled > a:hover,
-ul.pagination > .disabled > a:focus {
-  color: @grayLight;
-  background-color: transparent;
-  cursor: default;
-}
-ul.pagination > li:first-child > a,
-ul.pagination > li:first-child > span {
-  border-left-width: 1px;
-  .border-left-radius(@baseBorderRadius);
-}
-ul.pagination > li:last-child > a,
-ul.pagination > li:last-child > span {
-  .border-right-radius(@baseBorderRadius);
-}
-
-
-// Alignment
-// --------------------------------------------------
-
-.pagination-centered {
-  text-align: center;
-}
-.pagination-right {
-  text-align: right;
-}
-
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-large {
-  > li > a,
-  > li > span {
-    padding: @paddingLarge;
-    font-size: @fontSizeLarge;
-  }
-  > li:first-child > a,
-  > li:first-child > span {
-    .border-left-radius(@borderRadiusLarge);
-  }
-  > li:last-child > a,
-  > li:last-child > span {
-    .border-right-radius(@borderRadiusLarge);
-  }
-}
-
-// Small and mini
-.pagination-mini,
-.pagination-small {
-  > li:first-child > a,
-  > li:first-child > span {
-    .border-left-radius(@borderRadiusSmall);
-  }
-  > li:last-child > a,
-  > li:last-child > span {
-    .border-right-radius(@borderRadiusSmall);
-  }
-}
-
-// Small
-.pagination-small {
-  > li > a,
-  > li > span {
-    padding: @paddingSmall;
-    font-size: @fontSizeSmall;
-  }
-}
-// Mini
-.pagination-mini {
-  > li > a,
-  > li > span {
-    padding: @paddingMini;
-    font-size: @fontSizeMini;
-  }
-}
-
diff --git a/assets/less/prettyprint.less b/assets/less/prettyprint.less
deleted file mode 100644
index edb5ce5..0000000
--- a/assets/less/prettyprint.less
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Licensed 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.
-
-pre.prettyprint {
-  background: @defaultText;
-  border: none;
-  line-height: 1.4;
-  margin: 0;
-  padding: 16px;
-}
-.prettyprint {
-  .pln, .pun, .typ {
-    color: #B3B4B4;
-  }
-  .kwd {
-    color: #dddddd;
-  }
-  .str, .lit {
-    color: #fff;
-  }
-  .com {
-    color: #666;
-  }
-}
diff --git a/assets/less/react-animations.less b/assets/less/react-animations.less
deleted file mode 100644
index 06ea928..0000000
--- a/assets/less/react-animations.less
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Licensed 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.
-
-.fade-enter {
-  opacity: 0;
-  transition: opacity .25s;
-
-  &.fade-enter-active {
-    opacity: 1;
-  }
-}
-
-.fade-leave {
-  opacity: 1;
-  transition: opacity .25s;
-
-  &.fade-leave-active {
-    opacity: 0;
-  }
-}
-
-.slow-fade-enter {
-  opacity: 0;
-  transition: opacity .75s;
-
-  &.slow-fade-enter-active {
-    opacity: 1;
-  }
-}
-
-.slow-fade-leave {
-  opacity: 1;
-  transition: opacity .75s;
-
-  &.slow-fade-leave-active {
-    opacity: 0;
-  }
-}
diff --git a/assets/less/templates.less b/assets/less/templates.less
deleted file mode 100644
index b5bc864..0000000
--- a/assets/less/templates.less
+++ /dev/null
@@ -1,319 +0,0 @@
-//  Licensed 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.
-
- @import "variables.less";
-
-/* ajax loader */
-.loader {
-  background: url('../img/loader.gif') center center no-repeat;
-  min-height:  100px;
-}
-
-#main {
-  position: relative;
-  overflow: hidden;
-  height: 100%;
-}
-
-#app-container {
-  height: 100vh;
-  position: relative;
-  overflow: hidden;
-}
-
-@media screen and (max-height: 600px) {
-  #primary-navbar {
-    overflow-y: auto;
-  }
-}
-
-@media screen and ( min-height: 600px ){
-  #primary-navbar {
-    overflow-y: hidden;
-  }
-}
-
-.bottom-border {
-  border-bottom: 1px solid #999;
-}
-
-.bottom-left-border {
-  border-bottom: 1px solid #999;
-  border-left: 1px solid #999;
-}
-
-
-#dashboard {
-  position: relative;
-  left: @navWidth;
-  padding-left: 0;
-  background-color: @sidebarBG;
-  height: 100%;
-  width: 100%;
-  .closeMenu & {
-    left: @collapsedNavWidth;
-  }
-}
-
-.wrapper {
-  position: relative;
-  overflow: hidden;
-  height: 100%;
-}
-
-.one-pane {
-  #dashboard-content {
-    top: @collapsedNavWidth;
-    .view {
-      padding-bottom: 30px;
-    }
-  }
-}
-
-.two-pane {
-  .inner {
-    padding-bottom: @collapsedNavWidth;
-  }
-}
-
-#sidebar-content {
-  width: @sidebarWidth;
-  background-color: @secondarySidebar;
-  > div.inner {
-    display: block;
-  }
-  .nav-list:last-child {
-    margin-bottom: 30px;
-  }
-}
-
-.scrollable {
-  height: auto;
-  overflow-y: auto;
-  overflow-x: hidden;
-  width: 100%;
-  position: absolute;
-  padding: 0;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-
-.pusher {
-  overflow: hidden;
-  position: relative;
-  height: 100%;
-  left: 0;
-  padding-right: @navWidth;
-  .closeMenu & {
-    padding-right: @collapsedNavWidth;
-  }
-}
-
-.right-header-wrapper {
-  overflow-x: hidden;
-  height: @collapsedNavWidth;
-}
-
-.header-wrapper {
-  .bottom-border();
-  .box-shadow(0 1px 0 0 rgba(0, 0, 0, 0.1));
-  position: absolute;
-  left: 0;
-  right: 0;
-  /*z-index: 50; */
-}
-
-#app-container > div {
-  position: relative;
-  height: 100%;
-}
-
-/* SIDEBAR TEMPLATE STYLES */
-.topmenu-defaults {
-  height: 70px;
-  padding: 12px 10px 0;
-  .box-sizing(border-box);
-}
-
-/* used in addons/changes */
-.dashboard-upper-menu {
-  border-left: 1px solid #999;
-  right: 0;
-  left: @sidebarWidth+@navWidth;
-  position: fixed;
-  display: block;
-
-  .topmenu-defaults;
-  background-color: #CBCBCB;
-  .closeMenu & {
-    left: @sidebarWidth+@collapsedNavWidth;
-  }
-}
-
-#dashboard-lower-content {
-  padding: 20px;
-  background-color: #F1F1F1;
-  position: relative;
-}
-
-#dashboard-content {
-
-  & > div {
-    padding: @panelPadding;
-  }
-
-  &.row-fluid {
-    /*remove gutter without rewriting variable*/
-    margin-left: 0px;
-  }
-
-  .with-sidebar & {
-    border-left: 1px solid @grayLight;
-    .left-border();
-    width: auto;
-    padding: 15px;
-    bottom: 0px;
-    top: @collapsedNavWidth;
-    position: absolute;
-    left: @sidebarWidth;
-    right: 0;
-    .box-sizing(border-box);
-  }
-  .with-tabs-sidebar & {
-    overflow: hidden;
-  }
-
-  > div.inner {
-    display: block;
-  }
-}
-
-/*
-  Sidenav:
-  USED IN DOCUMENT ADDON & EXTERNAL ADDONS
-*/
-.sidenav {
-  padding: 0;
-  header {
-    width: @sidebarWidth;
-    border-bottom: 1px solid #d3d7db;
-  }
-  .nav-list {
-    .divider {
-      border: none;
-    }
-    > li > a:hover {
-      background-color: @hoverHighlight;
-      color: #fff;
-    }
-    li.active > a {
-      color: @brandHighlight;
-    }
-    > li > a {
-      color: #333333;
-      padding: 10px 13px 10px 24px;
-      border-bottom: 1px solid #d3d7db;
-      span {
-        margin-right: 8px;
-        width: 14px;
-        display: inline-block;
-        text-align: center;
-      }
-    }
-    a {
-      display: block;
-      padding: 10px 5px 5px 15px;
-      color: @subListGray;
-      .divider {
-        background: none;
-        color: #ccc;
-        padding: 0 2px;
-      }
-    }
-    .nav-header {
-      padding: 0px;
-      text-shadow: none;
-      color: #333333;
-      & > span:hover {
-        color: @linkColor;
-      }
-    }
-  }
-}
-
-.row-fluid.content-area {
-  background-color: @background;
-}
-
-.two-pane {
-  .content-area {
-    height: 100%;
-    top: @collapsedNavWidth;
-    position: relative;
-  }
-
-  #right-content {
-    .view {
-      padding: 0 0 40px;
-    }
-    border-left: 1px solid #999;
-  }
-  .right-header-wrapper {
-    border-left: 1px solid #999;
-    .faux-header__searchboxwrapper {
-      display: none;
-    }
-  }
-}
-
-.notification-wrapper {
-  opacity: 0;
-  height: 0;
-}
-
-.toast-container {
-  margin-top: @breadcrumbHeight;
-  padding:0;
-  right: 0;
-}
-
-.Toastify__toast {
-  border: 1px solid #999;
-  background-color: #fff;
-  border-right: 0;
-  color: black;
-}
-
-.Toastify__toast--info {
-  &, .Toastify__close-button--info {
-    border-left: 6px solid @infoAlertBackground;
-    }
-}
-
-.Toastify__toast--success {
-  &, .Toastify__close-button--success {
-    border-left: 6px solid @successAlertBackground;
-  }
-}
-.Toastify__toast--warning {
-  &, .Toastify__close-button--warning {
-    border-left: 6px solid @warningBackground;
-  }
-}
-.Toastify__toast--error {
-  &, .Toastify__close-button--error {
-    border-left: 6px solid @errorAlertColor;
-  }
-}
-
diff --git a/assets/less/trays.less b/assets/less/trays.less
deleted file mode 100644
index 5b99034..0000000
--- a/assets/less/trays.less
+++ /dev/null
@@ -1,96 +0,0 @@
-//  Licensed 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.
-
-@import "bootstrap/mixins.less";
-@import "icons.less";
-
-// @deprated - old trays
-.hide-tray {
-  display: none;
-}
-
-.show-tray {
-  display: block !important; //nasty hack until we convert all trays to React
-}
-
-.tray {
-  display: none;
-  position: absolute;
-  right: 0px;
-  top: 55px;
-  z-index: 11;
-  background-color: #333;
-  color: #fff;
-  margin: 0;
-
-  .add-on {
-    font-size: 16px;
-    background: none;
-    padding: 0px;
-    margin: 10px 0;
-    border: none;
-    display: block;
-    text-align: left;
-    color: #fff;
-    text-shadow: none;
-    height: auto;
-    line-height: 1em;
-  }
-
-  input[type="text"],
-  textarea {
-    .border-radius(5px);
-    background-color: #666;
-    padding: 8px;
-    border: none;
-    color: #eee;
-    font-size: 13px;
-  }
-
-  input[type="text"]:focus,
-  textarea:focus,
-  input[type="text"]:hover,
-  textarea:hover {
-    border: 2px solid @white;
-  }
-  input[type="text"], textarea {
-    box-shadow: none;
-    -webkit-border-radius: 5px;
-    -moz-border-radius: 5px;
-    border-radius: 5px;
-    background-color: rgba(255,255,255,0.1);
-    padding: 8px;
-    border: 2px solid rgba(255,255,255,0.1);
-    color: rgba(255,255,255,0.8);
-    font-size: 13px;
-  }
-  input:-webkit-input-placeholder,
-  form input:-moz-placeholder,
-  input:-ms-input-placeholder {
-    color: rgba(255,255,255,0.4);
-  }
-}
-
-.tray:before {
-  content: '';
-  position: absolute;
-  top: -25px;
-  border-color: transparent transparent #333 transparent;
-  border-style: solid;
-  border-width: 15px;
-  width: 0;
-  height: 0;
-}
-
-#header-lookahead .dropdown-menu li.active {
-  width: 100%;
-}
diff --git a/assets/less/variables.less b/assets/less/variables.less
deleted file mode 100644
index eb9e489..0000000
--- a/assets/less/variables.less
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Licensed 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.
-
-@import "bootstrap/variables.less";
-
-/*Dashboard-Specific Colors*/
-@dangerRed: #F00;
-@hoverHighlight: #e73d34;
-@brandHighlight: #AF2D24;
-@brandDark1: #564E4C;
-@brandDark2: #3A2C2B;
-@navIconColor: #B3B4B4;
-@navIconActive: #ffffff;
-@trayBackground1: #3A2C2B;
-@trayBackground2: #3A2C2B;
-
-/*buttons */
-@primaryGreen: #2bb673;
-@secondaryBlue: #0082BF;
-@primaryGreenDisabled: #8EC9AD;
-@secondaryBlueDisabled: #86BAD2;
-@dangerDisabled: #FF9797;
-@buttonText: #FFF;
-@buttonTextDisabled: #F1F1F1;
-
-/* colors */
-@orange: #F3622D;
-@blue: #049cdb;
-@green: #7FA30C;
-
-
-/* base */
-@background: #F2F2F2;
-@leftPanel: @background;
-@rightPanel: #CBCBCB;
-
-/* font */
-@fontGrey: #808080;
-@defaultText: #4D4D4D;
-@defaultHTag: #333333;
-
-/* sublist */
-@subListGray: #767F89;
-
-/*nav*/
-@navWidth: 220px;
-
-
-/*top header*/
-@breadcrumbBG: #F1F1F1;
-@breadcrumbText: @brandHighlight;
-@breadcrumbArrow: #999999;
-@breadcrumbBorder: @brandHighlight;
-@breadcrumbHeight: 64px;
-
-/* document-header in doclist */
-@docHeaderBG: #3a3a3a;
-@docHeaderBorderBottom: #2a2a2a;
-@docHeaderOtherBorders: #000;
-@docHeaderLabels: #909090;
-@docHeaderDocId: @brandHighlight;
-
-/* checkboxes in doc-list */
-@docCheckBoxUncheckedBG: #EFEFEF;
-@docCheckBoxUncheckedBorder: 2px solid #999;
-@docCheckBoxHoverBorder: 2px solid #ccc;
-@docCheckBoxCheckedBorder: 2px solid #000;
-@docCheckBoxCheckedBG: #3a3a3a;
-
-/* sidebar */
-@sidebarBG: #F2F2F2;
-@sidebarWidth: 330px;
-
-/* secondary sidebar */
-@secondarySidebar: white;
-
-/* links */
-@linkColor: @brandHighlight;
-@linkColorHover: @brandHighlight;
-
-/* slider */
-@sliderBorderColor: #999999;
-@sliderBackground: @background;
-@sliderBackgroundHighlight: @brandHighlight; 
-
-/* borders */
-@radius: 4px;
-@baseBorderRadius: 0;
-
-@darkBorder: #aaa;
-
-/* shadows */
-@boxShadow: 2px 2px rgba(0,0,0,0.2);
-@boxShadowOff: 2px 2px rgba(0,0,0,0);
-@boxShadowLeft: -4px 4px rgba(0,0,0,0.2);
-@boxShadowLeftOff: -4px 4px rgba(0,0,0,0);
-@textShadow: 1px 2px rgba(0,0,0,0.2);
-@textShadowOff: 1px 2px rgba(0,0,0,0);
-
-/* animation */
-@transitionSpeed: .25s;
-@transitionEaseType: linear;
-@highlightEffectColor: #bbbbbb;
-
-/* breakpoints */
-@collapsedNavWidth: 64px;
-
-/* padding and margins */
-@panelPadding: 15px;
-
-/* Alerts */
-@globalErrorAlertBackground: #c45b55;
-
-@infoAlertBackground: #329898;
-@infoAlertColor: #fff;
-@successAlertBackground: #448c11;
-@successAlertColor: #CBDFBD;
-@errorAlertBackground: #222;
-@errorAlertColor: #ff0c35;
-
-/* query history */
-@queryHistoryBGColor: white;
-@queryHistoryColor: @defaultText;
-
-/*
-  -- logo image paths --
-  These are set during webpack bundle through your settings.json file.
-*/
-@largeLogoPath: "";
-@smallLogoPath: "";
diff --git a/bin/build-couchdb-dev.sh b/bin/build-couchdb-dev.sh
deleted file mode 100755
index 546805c..0000000
--- a/bin/build-couchdb-dev.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-# Licensed 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.
-set -xe
-
-if [[ $COUCHDB_IMAGE == "couchdb:dev" ]]; then
-    git clone https://github.com/apache/couchdb-docker.git
-    cd couchdb-docker
-    docker build dev --build-arg configure_options='--disable-fauxton --disable-docs --spidermonkey-version 60' -t couchdb:dev
-    cd ..
-    rm -rf couchdb-docker
-fi
diff --git a/bin/create-animal-db b/bin/create-animal-db
deleted file mode 100755
index 56d75c2..0000000
--- a/bin/create-animal-db
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env node
-
-// Licensed 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.
-
-// deletes the old animaldb, creates a new, fresh one,
-// with conflicts for the zebra doc
-
-
-const url = 'http://tester:testerpass@localhost:5984/';
-
-createAnimalDb = require('../test/create-animal-db.js');
-
-createAnimalDb(url, () => {
-  console.log('created :)');
-});
diff --git a/bin/create-n-dbs b/bin/create-n-dbs
deleted file mode 100755
index 2874e9e..0000000
--- a/bin/create-n-dbs
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env node
-
-// Licensed 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.
-
-const optimist = require('optimist');
-const nano = require('nano');
-
-const {parallelLimit} = require('async');
-
-
-const NAMESPACE = 'test-db-';
-const PARALLEL_LIMIT = 50;
-const URL = 'http://localhost:5984';
-
-optimist
-  .usage('Create a certain amount of dbs \nUsage: $0')
-
-  .options('help', {
-    alias: 'h',
-    describe: 'Show this message'
-  })
-  .options('number', {
-    alias: 'n',
-    describe: 'The amount of databases to create'
-  })
-  .options('delete', {
-    alias: 'd',
-    default: false,
-    describe: 'Delete databases'
-  });
-
-const argv = optimist.argv;
-
-if (argv.help || argv.h) {
-  return optimist.showHelp(console.log);
-}
-
-const isDelete = (argv.d || argv.delete);
-const isCreate = (argv.n || argv.number);
-
-if (!isDelete && !isCreate) {
-  console.error('[ERROR] Please provide -d or -n to delete or create test-databases \n');
-  optimist.showHelp(console.log);
-  process.exit(1);
-}
-
-const nClient = nano(URL)
-
-if (isCreate) {
-  return createNdbs(argv.n || argv.number);
-}
-
-if (isDelete) {
-  return deleteDbs();
-}
-
-function getExistingDbs (cb) {
-  nClient.db.list((err, body) => {
-    if (err) {
-      throw err;
-    }
-
-    const list = body.filter(db => {
-      return new RegExp(NAMESPACE).test(db);
-    });
-
-    cb(null, list);
-  });
-}
-
-function createNdbs (number) {
-  getExistingDbs((err, dbs) => {
-    const offset = dbs.length;
-
-    const newDbs = [];
-    for (let i = offset; i < offset + number; i++) {
-      newDbs.push(NAMESPACE + i);
-    }
-
-    const tasks = newDbs.map((db) => {
-      return function task (cb) {
-        nClient.db.create(db, (err, body) => {
-          if (err) {
-            console.error(err);
-          }
-
-          cb(null);
-        });
-      }
-    });
-
-    parallelLimit(tasks, PARALLEL_LIMIT, (err) => {
-      if (err) {
-        console.error(err);
-      }
-    });
-  });
-}
-
-function deleteDbs () {
-  getExistingDbs((err, dbs) => {
-    const list = dbs.map(db => {
-      return (cb) => {
-        nClient.db.destroy(db, (err, resp) => {
-          if (err) {
-            cb(err);
-            return;
-          }
-
-          cb(null);
-        });
-      };
-    });
-
-    parallelLimit(list, PARALLEL_LIMIT, (err) => {
-      if (err) {
-        console.error(err);
-      }
-    });
-  });
-}
diff --git a/bin/docker-up-and-check.sh b/bin/docker-up-and-check.sh
deleted file mode 100755
index 27f99c7..0000000
--- a/bin/docker-up-and-check.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash
-
-# Licensed 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.
-
-
-## Sometimes the couchdb docker container won't start correctly, which causes
-## the Travis build to fail and forces users to resubmit their PRs.
-## This script tries to minimize the issue by retrying to start the containers
-## in case of failure.
-
-
-start_containters_and_check() {
-  npm run docker:up
-  if [[ $? != 0 ]]; then exit $?; fi
-
-  # Uses docker logs to check if couchdb server has started
-  NUM_CHECKS=10
-  for ((check=1; check<=$NUM_CHECKS; check++));
-  do
-    echo "Checking if couchdb container has started ($check of $NUM_CHECKS)"
-    logs=$(docker logs couchdb)
-    if [[ $logs == *"Errno socket error"* ]]; then
-      echo "Failed to start couchdb container"
-      echo "=============================="
-      docker logs couchdb
-      echo "=============================="
-      return 1
-    fi
-    if [[ $logs == *"Apache CouchDB has started on"* ]]; then
-      echo "Docker containers are up"
-      echo "========================"
-      docker logs couchdb
-      echo "========================"
-      return 0
-    fi
-    sleep 6
-  done
-}
-
-stop_containters() {
-  npm run docker:down
-  sleep 2
-}
-
-
-if start_containters_and_check 
-then
-  exit 0
-fi
-
-stop_containters
-exit 2
diff --git a/bin/fauxton b/bin/fauxton
deleted file mode 100755
index e9630fc..0000000
--- a/bin/fauxton
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env node
-
-// Licensed 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.
-
-var optimist = require('optimist')
-  .usage('Fauxton server \nUsage: $0')
-  .options('couchdb', {
-    alias : 'c',
-    default : 'http://localhost:5984',
-    describe: 'Url to your CouchDB instance'
-  })
-  .options('port', {
-    alias : 'p',
-    default : 8000,
-    describe: 'Local port that Fauxton will run on'
-  })
-  .options('help', {
-    alias : 'h',
-    describe: 'Show this message'
-  })
-  .options('contentSecurityPolicy', {
-    alias : 'csp',
-    default : true,
-    describe: 'Configure the content security policy'
-  });
-
-var argv = optimist.argv;
-
-if (argv.help || argv.h) {
-  return optimist.showHelp(console.log);
-}
-
-var server = require('..')(argv);
diff --git a/bin/install-docker-travis.sh b/bin/install-docker-travis.sh
deleted file mode 100755
index 99a8286..0000000
--- a/bin/install-docker-travis.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# Licensed 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.
-
-sudo sh -c 'echo "deb https://apt.dockerproject.org/repo ubuntu-precise main" > /etc/apt/sources.list.d/docker.list'
-sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-sudo apt-get update
-sudo apt-key update
-sudo apt-get -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install docker-engine=1.11.1-0~precise
-sudo rm /usr/local/bin/docker-compose
-curl -L https://github.com/docker/compose/releases/download/1.8.0-rc1/docker-compose-`uname -s`-`uname -m` > docker-compose
-chmod +x docker-compose
-sudo mv docker-compose /usr/local/bin
diff --git a/bin/remove-test-dbs.js b/bin/remove-test-dbs.js
deleted file mode 100755
index 3ae0ac8..0000000
--- a/bin/remove-test-dbs.js
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env node
-
-// Licensed 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.
-
-const fs = require('fs');
-const async = require('async');
-
-const settingsFilePath = './settings.json';
-const settingsFile = fs.existsSync(settingsFilePath) ? settingsFilePath : './settings.json.default.json';
-const settings = JSON.parse(fs.readFileSync(settingsFile)).nightwatch;
-const dbUrl = `${settings.db_protocol}://${settings.fauxton_username}:${settings.password}@${settings.db_host}:${settings.db_port}`;
-const nano = require('nano')(dbUrl);
-
-nano.db.list((err, body) => {
-  if (err) {
-    console.error('ERR', err);
-    return;
-  }
-  const list = body.filter(db => {
-    return /fauxton-selenium-tests/.test(db);
-  }).map(db => {
-    return (cb) => {
-      console.info('Removing db', db);
-      nano.db.destroy(db, (err) => {
-        if (err) {
-          cb(err);
-          return;
-        }
-
-        cb();
-      });
-    };
-  });
-
-  async.parallel(list, (err) => {
-    if (err) {
-      console.error(err);
-    }
-  });
-
-});
diff --git a/code-layout.md b/code-layout.md
deleted file mode 100644
index 3b974ea..0000000
--- a/code-layout.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Fauxton Code Overview
-
-This page documents a little practical information about the Fauxton codebase to help you get up to speed. 
-
-
-## Backbone and React 
-
-Fauxton was originally written in [Backbone](http://backbonejs.org), but in 2015 we're in the process of upgrading 
-the codebase to build it around [React](https://facebook.github.io/react/). We're replacing all Backbone Views with 
-(unit-tested!) React components. Backbone models and collections are still being used for server-side data retrieval 
-and storage as is URL routing, but the plan is to phase out all Backbone over time. 
-
-### React and the Flux pattern
-
-You can read more about [React](https://facebook.github.io/react/) and [Flux](https://facebook.github.io/flux/docs/overview.html) 
-on their sites, but a few quick words about both. 
-
-React is a relatively new framework created by Facebook, built on the idea of automatic DOM re-renders. Contrary to other
-frameworks, React decides when and where to redraw your UI based on changes to the underlying data set - and uses 
-a *virtual DOM* to handle the re-rendering. The key decisions to moving to React were simplicity, performance and 
-ease of testing. Check out [this page](https://facebook.github.io/react/docs/why-react.html) for a few more remarks.
-
-Flux is primarily a *pattern* for keeping your code organized over time. One of its key ideas is to have *one-way 
-communication* as shown in the [diagram here](https://github.com/facebook/flux). 
-
-Note that Fauxton has no dependency with the Flux code as it implements its own dispatcher and reduce stores. The information flows like this:
-
-1. User clicks on something in a React component, 
-2. the component fires an action (in an `actions.js` file),
-3. the action dispatches an event (for us, that's the `FauxtonAPI.dispatch()` call), 
-4. stores listen to these events (in their `dispatch()` methods), change the content of the store, then notify 
-anyone that's interested that the store has changed,
-5. finally, it comes full circle. React components listen for changes in the store by listening to their `change` 
-events. That's the purpose of the `storeName.on('change', this.onChange)` lines you'll see in the code.
-
-So why do all this. The benefit is that it standardizes how data moves around the application, and keeps things 
-simple - regardless of how much bigger the application gets. This is pretty cool.
-
-Here's a simple example: imagine if a user shrunk/expanded the main sidebar, and multiple components in the page 
-needed to know about it to make use of the new space. Maybe one was a graph and needed to redraw for the extra space, 
-and maybe another component could switch from "basic" to "advanced" view or something.
-
-With this pattern, you can just publish the single event, then each store could listen for it, change whatever data was needed 
-internally, then notify any components that was listening: and they would then have the choice to rerender or not, 
-based on what changed. This is basic "pub/sub": allowing you to keep code loosely coupled, but still communicate.
-
-### Moving to Redux
-
-There are a few drawbacks in the implementation above though. For instance the reduce stores rely on Backbone. 
-
-For this reason and others, it's encouraged that new components use Redux (https://github.com/reactjs/redux), which follows the same principles as Flux. Additionally, use React Redux (https://github.com/reactjs/react-redux) to easily connect a Redux store to your React components.
-
-## Addons
-
-Each bit of functionality is its own separate module or addon. Addons are located in their own `app/addons/myaddon-name` 
-folder. As noted above, new code is being written in React so please favour React components over backbone views.
-
-A good place to get started is to read through a couple of the existing addons. A good starting point is 
-[app/addons/verifyinstall](app/addons/verifyinstall). This is relatively self-contained and maps to a specific page in 
-the Fauxton interface so you can see exactly where it appears and what it does.
-
-Each module must have a `base.js` file, this is read and compiled when Fauxton is deployed. A `resources.js` file
-is usually used for your Backbone.Models and Backbone.Collections, `components.js` for your React components.
-The `routes.js` is used to register one or more URL paths for your addon along with what layout, data, breadcrumbs and API
-point is required for the view.
-
-Check out [writing_addons.md](writing_addons.md) for more information on writing your own addons.
-
-
-## CSS / Less
-
-We use Less for generating our CSS. The bulk of the shared CSS used throughout the application is found in 
-[assets/less/](assets/less), but any addon may contain its own `assets/less` subfolder containing whatever unique
-styles are needed.
-
-
-## app/addons/components / app/addons/fauxton
-  
-These two contain React components and functionality intended for sharing throughout the app. You'll find many 
-common elements in there, like trays, buttons, loading lines, clipboard functionality and more.
-
-
diff --git a/codemods/amd-to-es6-import.md b/codemods/amd-to-es6-import.md
deleted file mode 100644
index 5cb447e..0000000
--- a/codemods/amd-to-es6-import.md
+++ /dev/null
@@ -1,9 +0,0 @@
-#From `define` to `import`
-
-To run the ast to change a file from using amd to es6 import follow these steps:
-
-* npm i -g jscodeshift
-* npm install 5to6-codemod
-* Replace `./node_modules/5to6-codemod/transforms/amd.js` with https://gist.github.com/robertkowalski/9167d45c0af6b9abdd4b51a09ef4e039
-* run `jscodeshift --extensions=js,jsx -t node_modules/5to6-codemod/transforms/amd.js app/file/name`
-* run git diff to check
diff --git a/codemods/space-in-parens.sh b/codemods/space-in-parens.sh
deleted file mode 100755
index 3c99287..0000000
--- a/codemods/space-in-parens.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-./node_modules/.bin/eslint --ext=.jsx,.js --fix . space-in-parens: ["error", "never"]
diff --git a/couchapp.js b/couchapp.js
deleted file mode 100644
index 7aad7e1..0000000
--- a/couchapp.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed 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.
-
-var couchapp = require('couchapp'),
-    path = require('path'),
-    ddoc;
-
-ddoc = {
-  _id: '_design/fauxton',
-  rewrites: [
-    { "from": "_db",     "to"  : "../.." },
-    { "from": "_db/*",   "to"  : "../../*" },
-    { "from": "_ddoc",   "to"  : "" },
-    { "from": "_ddoc/*", "to"  : "*"},
-    {from: '/', to: 'index.html'},
-    {from: '/*', to: '*'}
-  ],
-  views: {},
-  shows: {},
-  lists: {},
-  validate_doc_update: function () {
-    /*if (newDoc._deleted === true && userCtx.roles.indexOf('_admin') === -1) {
-      throw "Only admin can delete documents on this database.";
-    }*/
-  }
-};
-
-
-couchapp.loadAttachments(ddoc, path.join(__dirname, 'dist', 'release'));
-module.exports = ddoc;
diff --git a/devserver.js b/devserver.js
deleted file mode 100644
index 3d858c0..0000000
--- a/devserver.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const spawn = require('child_process').spawn;
-const fs = require("fs");
-const webpack = require('webpack');
-const WebpackDev = require('webpack-dev-server');
-const config = require('./webpack.config.dev.js');
-const httpProxy = require('http-proxy');
-const path = require('path');
-
-
-const loadSettings = function () {
-  let fileName = './settings.json.default.json';
-  if (fs.existsSync('./settings.json')) {
-    fileName = './settings.json';
-  }
-
-  return require(fileName).couchserver || {
-    port: process.env.FAUXTON_PORT || 8000,
-    contentSecurityPolicy: true,
-    proxy: {
-      target: process.env.COUCH_HOST || 'http://127.0.0.1:5984',
-      changeOrigin: false
-    }
-  };
-};
-
-const settings = loadSettings();
-
-const devSetup = function (cb) {
-  console.info('setup dev environment');
-  let cmd = 'devSetupWithClean';
-  if (settings.noClean) {
-    cmd = 'devSetup';
-  }
-  const isOnWindows = process.platform === 'win32';
-  const gruntCmd = isOnWindows ? 'grunt.cmd' : 'grunt';
-  const grunt = spawn(gruntCmd, [cmd]);
-
-  grunt.stdout.on('data', (data) => {
-    console.info(data.toString());
-  });
-
-  grunt.stderr.on('error', (data) => {
-    console.info('Setup error:', data.toString());
-  });
-
-  grunt.on('close', (code) => {
-    console.info('dev setup finished with code', code);
-    if (code === 0) {
-      cb();
-    }
-  });
-};
-
-const defaultHeaderValue = "default-src 'self'; child-src 'self' blob: https://blog.couchdb.org; img-src 'self' data:; font-src 'self'; " +
-                  "script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";
-function getCspHeaders () {
-  if (!settings.contentSecurityPolicy) {
-    return;
-  }
-
-  const cspHeader = settings.contentSecurityPolicyHeader || defaultHeaderValue;
-
-  return {
-    'Content-Security-Policy': cspHeader
-  };
-}
-
-const runWebpackServer = function () {
-  const proxy = httpProxy.createServer({
-    secure: false,
-    changeOrigin: true,
-    target: settings.proxy.target
-  });
-
-  proxy.on('proxyRes', function (proxyRes) {
-    if (proxyRes.headers['set-cookie']) {
-      proxyRes.headers['set-cookie'][0] = proxyRes.headers["set-cookie"][0].replace('Secure', '');
-    }
-  });
-
-  proxy.on('error', function () {
-    // don't explode on cancelled requests
-  });
-
-  const options = {
-    contentBase: path.join(__dirname, '/dist/debug/'),
-    host: 'localhost',
-    port: process.env.FAUXTON_PORT || 8000,
-    overlay: true,
-    hot: false,
-    historyApiFallback: false,
-    disableHostCheck: true,
-    stats: {
-      colors: true,
-    },
-    headers: getCspHeaders(),
-    before: (app) => {
-      app.all('*', (req, res, next) => {
-        const accept = req.headers.accept ? req.headers.accept.split(',') : '';
-
-        if (/application\/json/.test(accept[0]) || /multipart\/form-data/.test(accept[0])) {
-          proxy.web(req, res);
-          return;
-        }
-
-        next();
-      });
-    }
-  };
-
-  const compiler = webpack(config);
-  const server = new WebpackDev(compiler, options);
-
-  server.listen(options.port, '0.0.0.0', function (err) {
-    if (err) {
-      console.error(err);
-      return;
-    }
-    console.info('listening on', options.host, options.port);
-    console.info('Starting first compile. This will take about 10 seconds...');
-  });
-};
-
-
-devSetup(runWebpackServer);
diff --git a/docker/dc.selenium-debug.yml b/docker/dc.selenium-debug.yml
deleted file mode 100644
index cba3c54..0000000
--- a/docker/dc.selenium-debug.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: '2'
-services:
-  selenium:
-    extends:
-      file: './dc.selenium.yml'
-      service: selenium
-    container_name: selenium
-    image: selenium/standalone-chrome-debug:3.141.59
-    ports:
-      - "4444:4444"
-      - "5900:5900"
-  couchdb:
-    extends:
-      file: './dc.selenium.yml'
-      service: couchdb
diff --git a/docker/dc.selenium.yml b/docker/dc.selenium.yml
deleted file mode 100644
index 0061bed..0000000
--- a/docker/dc.selenium.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: '2'
-services:
-  selenium:
-    container_name: selenium
-    image: selenium/standalone-chrome:3.141.59
-    ports:
-      - "4444:4444"
-  couchdb:
-    container_name: couchdb
-    image: ${COUCHDB_IMAGE}
-    environment:
-      COUCHDB_USER: tester
-      COUCHDB_PASSWORD: testerpass
-    ports:
-      - "5984:5984"
diff --git a/extensions.md b/extensions.md
deleted file mode 100644
index d2e34f8..0000000
--- a/extensions.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Extensions
-
-Extensions allow Fauxton views to be have extra functionality.
-
-A module registers an extension by
-
-    FauxtonAPI.registerExtension('extensionName', myObjectToRegister);
-
-Any other module wanting to use that extension can then get 
-all objects registered for an extension by:
-
-    var extensions = FauxtonAPI.getExtensions('extensionName');
-    // extensions will always be an array
-
-The module can then use those extensions to extend its functionality.
diff --git a/i18n.json.default.json b/i18n.json.default.json
deleted file mode 100644
index 2c548b5..0000000
--- a/i18n.json.default.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "en_US": {
-    "mango-descripton": "Mango is an easy way to find documents on predefined indexes.",
-    "new-mango-index": "Mango Indexes",
-    "mango-help-title": "Mango",
-    "run-query-with-mango": "Run A Query with Mango",
-    "mango-title-editor": "Mango Query",
-    "mango-descripton-index-editor": "Mango is an easy way to find documents on predefined indexes. <br/><br/>Create an Index to query it afterwards. The example in the editor shows how to create an index for the field '_id'. <br/><br/>The Indexes that you already created are listed on the right.",
-    "mango-additional-indexes-heading": "Your additional Indexes:",
-    "mango-indexeditor-title": "Mango",
-    "couchdb-productname": "Apache CouchDB",
-    "cors-disable-cors-prompt": "Are you sure? Disabling CORS will overwrite your specific origin domains.",
-    "cors-notice": "Cross-Origin Resource Sharing (CORS) lets you connect to remote servers directly from the browser, so you can host browser-based apps on static pages and talk directly with CouchDB to load your data.",
-    "replication-password-modal-header": "Enter Account Password.",
-    "replication-password-modal-text": "Replication requires authentication on your credentials.",
-    "replication-user-password-auth-label": "Username and password",
-    "replication-username-input-placeholder": "Username",
-    "replication-password-input-placeholder": "Password",
-    "auth-missing-credentials": "Username or password cannot be blank.",
-    "auth-logged-in": "You have been logged in.",
-    "auth-admin-created": "CouchDB admin created",
-    "auth-change-password": "Your password has been updated.",
-    "auth-admin-creation-failed-prefix": "Could not create admin.",
-    "auth-passwords-not-matching": "Passwords do not match.",
-    "create-db-partitioned-help": "A partitioned database requires a partition key for every document, where the document _id format is '&lt;partition_key&gt;:&lt;doc_key&gt;'. A partition is a logical grouping of documents. Partition queries are often faster than global ones."
-  }
-}
diff --git a/index.js b/index.js
deleted file mode 100644
index ae40b4f..0000000
--- a/index.js
+++ /dev/null
@@ -1,108 +0,0 @@
-var path = require("path");
-var http = require("http");
-var httpProxy = require('http-proxy');
-var send = require('send');
-var urlLib = require('url');
-var _ = require('lodash');
-var dist_dir = process.env.DIST || __dirname + '/dist/release/';
-
-module.exports = function (options) {
-  // Options
-  var setContentSecurityPolicy = options.contentSecurityPolicy;
-  var port = options.port;
-  var proxyUrl = options.couchdb;
-
-  function sendFile (req, res, filePath) {
-    return send(req, filePath)
-      .on('error', function (err) {
-        if (err.status === 404) {
-          console.error('Could not locate', filePath);
-        } else {
-          console.error('ERROR', filePath, err);
-        }
-
-        res.setHeader("Content-Type", "text/javascript");
-        res.statusCode = 404;
-        res.end(JSON.stringify({error: err.message}));
-      })
-      .pipe(res);
-  }
-
-  var fileTypes = ['.js', '.css', '.png', '.swf', '.eot', '.woff', '.svg', '.ttf', '.swf'];
-
-  function isFile (url) {
-    return _.includes(fileTypes, path.extname(url));
-  }
-
-  // create proxy to couch for all couch requests
-  this.proxy = httpProxy.createServer({
-    secure: false,
-    changeOrigin: true,
-    target: proxyUrl
-  });
-
-  this.server = http.createServer((req, res) => {
-    var isDocLink = /_utils\/docs/.test(req.url);
-    var url = req.url.split(/\?v=|\?noCache/)[0].replace('_utils', '');
-    var accept = [];
-    if (req.headers.accept) {
-      accept = req.headers.accept.split(',');
-    }
-    if (setContentSecurityPolicy) {
-      var headerValue = "default-src 'self'; child-src 'self' data: blob:; img-src 'self' data:; font-src 'self'; " +
-                        "script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";
-      res.setHeader('Content-Security-Policy', headerValue);
-    }
-
-    if (url === '/' && accept[0] !== 'application/json') {
-      // serve main index file from here
-      return sendFile(req, res, path.join(dist_dir, 'index.html'));
-    } else if (isFile(url) && !isDocLink) {
-      return sendFile(req, res, path.join(dist_dir, url));
-    }
-
-    // This sets the Host header in the proxy so that one can use external
-    // CouchDB instances and not have the Host set to 'localhost'
-    var urlObj = urlLib.parse(req.url);
-    req.headers.host = urlObj.host;
-
-    this.proxy.web(req, res);
-  }).listen(port, '0.0.0.0');
-
-  this.proxy.on('error', () => {
-    // don't explode on cancelled requests
-  });
-
-  //Remove Secure on the cookie if the proxy is communicating to a CouchDB instance
-  // via https.
-  this.proxy.on('proxyRes', (proxyRes) => {
-    if (proxyRes.headers['set-cookie']) {
-      proxyRes.headers['set-cookie'][0] = proxyRes.headers["set-cookie"][0].replace('Secure', '');
-    }
-  });
-
-  var logo = [
-    [""],
-    [" ______                        _                   "],
-    ["|  ____|                      | |                  "],
-    ["| |__    __ _   _   _  __  __ | |_    ___    _ __  "],
-    ["|  __|  / _` | | | | | \\ \\/ / | __|  / _ \\  | '_ \\ "],
-    ["| |    | (_| | | |_| |  >  <  | |_  | (_) | | | | |"],
-    ["|_|     \\__,_|  \\__,_| /_/\\_\\  \\__|  \\___/  |_| |_|"],
-    [""]
-  ];
-
-  _.each(logo, function (line) {
-    // eslint-disable-next-line no-console
-    console.log(line.toString());
-  });
-  // eslint-disable-next-line no-console
-  console.log('Listening on ' + port);
-
-  this.close = () => {
-    this.server.close();
-    this.proxy.close();
-  };
-
-  return this;
-};
diff --git a/jest-config.json b/jest-config.json
deleted file mode 100644
index b133b1e..0000000
--- a/jest-config.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "roots": ["app"],
-  "testPathIgnorePatterns": ["/node_modules/", "stub", "fakeActiveTaskResponse", "fixtures"],
-
-  "setupFiles": ["./jest-shim.js"],
-  "setupFilesAfterEnv": ["./jest-setup.js"],
-
-  "moduleNameMapper": {
-    "underscore": "lodash",
-
-    "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|swf|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
-    "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
-  },
-
-  "testURL": "http://localhost:8000"
-}
diff --git a/jest-setup.js b/jest-setup.js
deleted file mode 100644
index c7f01b0..0000000
--- a/jest-setup.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Licensed 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.
-
-require('jest');
-require('whatwg-fetch');
-require('mock-local-storage');
-
-Object.defineProperty(window, 'localStorage', {
-  value: global.localStorage,
-  configurable:true,
-  enumerable:true,
-  writable:true
-});
-
-window.$ = window.jQuery = require('jquery');
-window._ = require('lodash');
-window.Backbone = require('backbone');
-
-// URL.createObjectURL() and Worker are referenced by brace so we add mock objects to prevent
-// long warning messages from being printed while running the tests.
-if (!window.URL) {
-  window.URL = {};
-}
-if (!window.URL.createObjectURL) {
-  window.URL.createObjectURL = function() {
-    return 'http://localhost';
-  };
-}
-window.Worker = function FakeWorker() {
-  this.postMessage = function () { };
-  this.onmessage = undefined;
-};
-
-window.alert = () => {};
-
-// Setup enzyme's react adapter
-const Enzyme = require('enzyme');
-const EnzymeAdapter = require('enzyme-adapter-react-16');
-Enzyme.configure({ adapter: new EnzymeAdapter() });
diff --git a/jest-shim.js b/jest-shim.js
deleted file mode 100644
index cb42fc6..0000000
--- a/jest-shim.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// This file is imported by Jest to avoid a React Warning:
-//     Warning: React depends on requestAnimationFrame. Make sure that you load a
-//     polyfill in older browsers. http://fb.me/react-polyfills
-// See https://github.com/facebook/jest/issues/4545#issuecomment-332762365 for details
-
-global.requestAnimationFrame = (callback) => {
-  setTimeout(callback, 0);
-};
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 70a1c1a..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,19859 +0,0 @@
-{
-  "name": "fauxton",
-  "version": "1.2.6",
-  "lockfileVersion": 1,
-  "requires": true,
-  "dependencies": {
-    "@ant-design/css-animation": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/@ant-design/css-animation/-/css-animation-1.7.2.tgz",
-      "integrity": "sha512-bvVOe7A+r7lws58B7r+fgnQDK90cV45AXuvGx6i5CCSX1W/M3AJnHsNggDANBxEtWdNdFWcDd5LorB+RdSIlBw=="
-    },
-    "@babel/cli": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.4.tgz",
-      "integrity": "sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA==",
-      "requires": {
-        "chokidar": "^2.1.8",
-        "commander": "^4.0.1",
-        "convert-source-map": "^1.1.0",
-        "fs-readdir-recursive": "^1.1.0",
-        "glob": "^7.0.0",
-        "lodash": "^4.17.13",
-        "make-dir": "^2.1.0",
-        "slash": "^2.0.0",
-        "source-map": "^0.5.0"
-      }
-    },
-    "@babel/code-frame": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
-      "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
-      "requires": {
-        "@babel/highlight": "^7.0.0"
-      }
-    },
-    "@babel/compat-data": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz",
-      "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==",
-      "requires": {
-        "browserslist": "^4.12.0",
-        "invariant": "^2.2.4",
-        "semver": "^5.5.0"
-      }
-    },
-    "@babel/core": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz",
-      "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==",
-      "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.10.4",
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helpers": "^7.10.4",
-        "@babel/parser": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.1",
-        "json5": "^2.1.2",
-        "lodash": "^4.17.13",
-        "resolve": "^1.3.2",
-        "semver": "^5.4.1",
-        "source-map": "^0.5.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "json5": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
-          "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/generator": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz",
-      "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==",
-      "requires": {
-        "@babel/types": "^7.5.0",
-        "jsesc": "^2.5.1",
-        "lodash": "^4.17.11",
-        "source-map": "^0.5.0",
-        "trim-right": "^1.0.1"
-      }
-    },
-    "@babel/helper-annotate-as-pure": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
-      "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
-      "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
-      "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-react-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz",
-      "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-builder-react-jsx-experimental": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.4.tgz",
-      "integrity": "sha512-LyacH/kgQPgLAuaWrvvq1+E7f5bLyT8jXCh7nM67sRsy2cpIGfgWJ+FCnAKQXfY+F0tXUaN6FqLkp4JiCzdK8Q==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-compilation-targets": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz",
-      "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==",
-      "requires": {
-        "@babel/compat-data": "^7.10.4",
-        "browserslist": "^4.12.0",
-        "invariant": "^2.2.4",
-        "levenary": "^1.1.1",
-        "semver": "^5.5.0"
-      }
-    },
-    "@babel/helper-create-class-features-plugin": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz",
-      "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-member-expression-to-functions": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz",
-      "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-regex": "^7.10.4",
-        "regexpu-core": "^4.7.0"
-      }
-    },
-    "@babel/helper-define-map": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz",
-      "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-explode-assignable-expression": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz",
-      "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==",
-      "requires": {
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-function-name": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
-      "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
-      "requires": {
-        "@babel/helper-get-function-arity": "^7.0.0",
-        "@babel/template": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@babel/helper-get-function-arity": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
-      "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@babel/helper-hoist-variables": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
-      "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-member-expression-to-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz",
-      "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-module-imports": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
-      "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-module-transforms": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz",
-      "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==",
-      "requires": {
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-simple-access": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/types": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-optimise-call-expression": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
-      "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
-      "requires": {
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/helper-plugin-utils": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
-      "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
-    },
-    "@babel/helper-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz",
-      "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==",
-      "requires": {
-        "lodash": "^4.17.13"
-      }
-    },
-    "@babel/helper-remap-async-to-generator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz",
-      "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-wrap-function": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-replace-supers": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
-      "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
-      "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helper-simple-access": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
-      "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
-      "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
-      "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
-      "requires": {
-        "@babel/types": "^7.4.4"
-      }
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
-      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
-    },
-    "@babel/helper-wrap-function": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz",
-      "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/helpers": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
-      "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
-      "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/generator": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
-          "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
-          "requires": {
-            "@babel/types": "^7.10.4",
-            "jsesc": "^2.5.1",
-            "lodash": "^4.17.13",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/traverse": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
-          "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/generator": "^7.10.4",
-            "@babel/helper-function-name": "^7.10.4",
-            "@babel/helper-split-export-declaration": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4",
-            "debug": "^4.1.0",
-            "globals": "^11.1.0",
-            "lodash": "^4.17.13"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/highlight": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
-      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
-      "requires": {
-        "chalk": "^2.0.0",
-        "esutils": "^2.0.2",
-        "js-tokens": "^4.0.0"
-      },
-      "dependencies": {
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/parser": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz",
-      "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA=="
-    },
-    "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz",
-      "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.10.4",
-        "@babel/plugin-syntax-async-generators": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-class-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz",
-      "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==",
-      "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz",
-      "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-json-strings": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz",
-      "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz",
-      "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz",
-      "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-transform-parameters": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz",
-      "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz",
-      "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-private-methods": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz",
-      "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==",
-      "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
-      "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-class-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
-      "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz",
-      "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-top-level-await": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
-      "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-arrow-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
-      "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-async-to-generator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
-      "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
-      "requires": {
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
-      "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-block-scoping": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz",
-      "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-classes": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
-      "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-define-map": "^7.10.4",
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.10.4",
-        "globals": "^11.1.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/helper-split-export-declaration": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
-          "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/plugin-transform-computed-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz",
-      "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-destructuring": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz",
-      "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-dotall-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz",
-      "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz",
-      "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz",
-      "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==",
-      "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-for-of": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz",
-      "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-function-name": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz",
-      "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/helper-function-name": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-          "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
-          "requires": {
-            "@babel/helper-get-function-arity": "^7.10.4",
-            "@babel/template": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/parser": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
-          "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
-        },
-        "@babel/template": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
-          "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
-          "requires": {
-            "@babel/code-frame": "^7.10.4",
-            "@babel/parser": "^7.10.4",
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-          "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-        }
-      }
-    },
-    "@babel/plugin-transform-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
-      "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
-      "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-amd": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz",
-      "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
-      "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-simple-access": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz",
-      "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==",
-      "requires": {
-        "@babel/helper-hoist-variables": "^7.10.4",
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-modules-umd": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
-      "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
-      "requires": {
-        "@babel/helper-module-transforms": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
-      "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4"
-      }
-    },
-    "@babel/plugin-transform-new-target": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz",
-      "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-object-assign": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz",
-      "integrity": "sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-object-super": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz",
-      "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-parameters": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz",
-      "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==",
-      "requires": {
-        "@babel/helper-get-function-arity": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-get-function-arity": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-          "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
-          "requires": {
-            "@babel/types": "^7.10.4"
-          }
-        },
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/plugin-transform-property-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz",
-      "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-display-name": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz",
-      "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz",
-      "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==",
-      "requires": {
-        "@babel/helper-builder-react-jsx": "^7.10.4",
-        "@babel/helper-builder-react-jsx-experimental": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-development": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz",
-      "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==",
-      "requires": {
-        "@babel/helper-builder-react-jsx-experimental": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-self": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz",
-      "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-jsx-source": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.4.tgz",
-      "integrity": "sha512-FTK3eQFrPv2aveerUSazFmGygqIdTtvskG50SnGnbEUnRPcGx2ylBhdFIzoVS1ty44hEgcPoCAyw5r3VDEq+Ug==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz",
-      "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-regenerator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz",
-      "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==",
-      "requires": {
-        "regenerator-transform": "^0.14.2"
-      }
-    },
-    "@babel/plugin-transform-reserved-words": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz",
-      "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz",
-      "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-spread": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz",
-      "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-sticky-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz",
-      "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-regex": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-template-literals": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz",
-      "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz",
-      "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz",
-      "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/plugin-transform-unicode-regex": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz",
-      "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==",
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/preset-env": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz",
-      "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==",
-      "requires": {
-        "@babel/compat-data": "^7.10.4",
-        "@babel/helper-compilation-targets": "^7.10.4",
-        "@babel/helper-module-imports": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-proposal-async-generator-functions": "^7.10.4",
-        "@babel/plugin-proposal-class-properties": "^7.10.4",
-        "@babel/plugin-proposal-dynamic-import": "^7.10.4",
-        "@babel/plugin-proposal-json-strings": "^7.10.4",
-        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4",
-        "@babel/plugin-proposal-numeric-separator": "^7.10.4",
-        "@babel/plugin-proposal-object-rest-spread": "^7.10.4",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.10.4",
-        "@babel/plugin-proposal-optional-chaining": "^7.10.4",
-        "@babel/plugin-proposal-private-methods": "^7.10.4",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.10.4",
-        "@babel/plugin-syntax-async-generators": "^7.8.0",
-        "@babel/plugin-syntax-class-properties": "^7.10.4",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0",
-        "@babel/plugin-syntax-json-strings": "^7.8.0",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0",
-        "@babel/plugin-syntax-top-level-await": "^7.10.4",
-        "@babel/plugin-transform-arrow-functions": "^7.10.4",
-        "@babel/plugin-transform-async-to-generator": "^7.10.4",
-        "@babel/plugin-transform-block-scoped-functions": "^7.10.4",
-        "@babel/plugin-transform-block-scoping": "^7.10.4",
-        "@babel/plugin-transform-classes": "^7.10.4",
-        "@babel/plugin-transform-computed-properties": "^7.10.4",
-        "@babel/plugin-transform-destructuring": "^7.10.4",
-        "@babel/plugin-transform-dotall-regex": "^7.10.4",
-        "@babel/plugin-transform-duplicate-keys": "^7.10.4",
-        "@babel/plugin-transform-exponentiation-operator": "^7.10.4",
-        "@babel/plugin-transform-for-of": "^7.10.4",
-        "@babel/plugin-transform-function-name": "^7.10.4",
-        "@babel/plugin-transform-literals": "^7.10.4",
-        "@babel/plugin-transform-member-expression-literals": "^7.10.4",
-        "@babel/plugin-transform-modules-amd": "^7.10.4",
-        "@babel/plugin-transform-modules-commonjs": "^7.10.4",
-        "@babel/plugin-transform-modules-systemjs": "^7.10.4",
-        "@babel/plugin-transform-modules-umd": "^7.10.4",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4",
-        "@babel/plugin-transform-new-target": "^7.10.4",
-        "@babel/plugin-transform-object-super": "^7.10.4",
-        "@babel/plugin-transform-parameters": "^7.10.4",
-        "@babel/plugin-transform-property-literals": "^7.10.4",
-        "@babel/plugin-transform-regenerator": "^7.10.4",
-        "@babel/plugin-transform-reserved-words": "^7.10.4",
-        "@babel/plugin-transform-shorthand-properties": "^7.10.4",
-        "@babel/plugin-transform-spread": "^7.10.4",
-        "@babel/plugin-transform-sticky-regex": "^7.10.4",
-        "@babel/plugin-transform-template-literals": "^7.10.4",
-        "@babel/plugin-transform-typeof-symbol": "^7.10.4",
-        "@babel/plugin-transform-unicode-escapes": "^7.10.4",
-        "@babel/plugin-transform-unicode-regex": "^7.10.4",
-        "@babel/preset-modules": "^0.1.3",
-        "@babel/types": "^7.10.4",
-        "browserslist": "^4.12.0",
-        "core-js-compat": "^3.6.2",
-        "invariant": "^2.2.2",
-        "levenary": "^1.1.1",
-        "semver": "^5.5.0"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        },
-        "@babel/types": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
-          "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "lodash": "^4.17.13",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
-    },
-    "@babel/preset-modules": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz",
-      "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
-        "@babel/plugin-transform-dotall-regex": "^7.4.4",
-        "@babel/types": "^7.4.4",
-        "esutils": "^2.0.2"
-      }
-    },
-    "@babel/preset-react": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz",
-      "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-transform-react-display-name": "^7.10.4",
-        "@babel/plugin-transform-react-jsx": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-development": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-self": "^7.10.4",
-        "@babel/plugin-transform-react-jsx-source": "^7.10.4",
-        "@babel/plugin-transform-react-pure-annotations": "^7.10.4"
-      },
-      "dependencies": {
-        "@babel/helper-plugin-utils": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-          "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
-        }
-      }
-    },
-    "@babel/register": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.4.tgz",
-      "integrity": "sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g==",
-      "requires": {
-        "find-cache-dir": "^2.0.0",
-        "lodash": "^4.17.13",
-        "make-dir": "^2.1.0",
-        "pirates": "^4.0.0",
-        "source-map-support": "^0.5.16"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "source-map-support": {
-          "version": "0.5.19",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-          "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-          "requires": {
-            "buffer-from": "^1.0.0",
-            "source-map": "^0.6.0"
-          }
-        }
-      }
-    },
-    "@babel/runtime": {
-      "version": "7.9.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
-      "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
-      "requires": {
-        "regenerator-runtime": "^0.13.4"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "@babel/template": {
-      "version": "7.4.4",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
-      "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.4.4",
-        "@babel/types": "^7.4.4"
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz",
-      "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.5.0",
-        "@babel/helper-function-name": "^7.1.0",
-        "@babel/helper-split-export-declaration": "^7.4.4",
-        "@babel/parser": "^7.5.0",
-        "@babel/types": "^7.5.0",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0",
-        "lodash": "^4.17.11"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "@babel/types": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz",
-      "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==",
-      "requires": {
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.11",
-        "to-fast-properties": "^2.0.0"
-      }
-    },
-    "@cnakazawa/watch": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
-      "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
-      "dev": true,
-      "requires": {
-        "exec-sh": "^0.3.2",
-        "minimist": "^1.2.0"
-      }
-    },
-    "@jest/console": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
-      "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
-      "dev": true,
-      "requires": {
-        "@jest/source-map": "^24.9.0",
-        "chalk": "^2.0.1",
-        "slash": "^2.0.0"
-      }
-    },
-    "@jest/core": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
-      "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/reporters": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.1.15",
-        "jest-changed-files": "^24.9.0",
-        "jest-config": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-resolve-dependencies": "^24.9.0",
-        "jest-runner": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "jest-watcher": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "p-each-series": "^1.0.0",
-        "realpath-native": "^1.1.0",
-        "rimraf": "^2.5.4",
-        "slash": "^2.0.0",
-        "strip-ansi": "^5.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "@jest/environment": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
-      "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
-      "dev": true,
-      "requires": {
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      }
-    },
-    "@jest/fake-timers": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
-      "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-mock": "^24.9.0"
-      }
-    },
-    "@jest/reporters": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
-      "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "glob": "^7.1.2",
-        "istanbul-lib-coverage": "^2.0.2",
-        "istanbul-lib-instrument": "^3.0.1",
-        "istanbul-lib-report": "^2.0.4",
-        "istanbul-lib-source-maps": "^3.0.1",
-        "istanbul-reports": "^2.2.6",
-        "jest-haste-map": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.6.0",
-        "node-notifier": "^5.4.2",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.0",
-        "string-length": "^2.0.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/source-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
-      "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
-      "dev": true,
-      "requires": {
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.1.15",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "@jest/test-result": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
-      "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/istanbul-lib-coverage": "^2.0.0"
-      }
-    },
-    "@jest/test-sequencer": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
-      "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-runner": "^24.9.0",
-        "jest-runtime": "^24.9.0"
-      }
-    },
-    "@jest/transform": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
-      "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/types": "^24.9.0",
-        "babel-plugin-istanbul": "^5.1.0",
-        "chalk": "^2.0.1",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.1.15",
-        "jest-haste-map": "^24.9.0",
-        "jest-regex-util": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "pirates": "^4.0.1",
-        "realpath-native": "^1.1.0",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.1",
-        "write-file-atomic": "2.4.1"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "write-file-atomic": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
-          "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "imurmurhash": "^0.1.4",
-            "signal-exit": "^3.0.2"
-          }
-        }
-      }
-    },
-    "@jest/types": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
-      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^1.1.1",
-        "@types/yargs": "^13.0.0"
-      }
-    },
-    "@sinonjs/commons": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz",
-      "integrity": "sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==",
-      "dev": true,
-      "requires": {
-        "type-detect": "4.0.8"
-      },
-      "dependencies": {
-        "type-detect": {
-          "version": "4.0.8",
-          "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-          "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-          "dev": true
-        }
-      }
-    },
-    "@sinonjs/formatio": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
-      "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1",
-        "@sinonjs/samsam": "^3.1.0"
-      }
-    },
-    "@sinonjs/samsam": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
-      "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.3.0",
-        "array-from": "^2.1.1",
-        "lodash": "^4.17.15"
-      }
-    },
-    "@sinonjs/text-encoding": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
-      "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
-      "dev": true
-    },
-    "@types/babel__core": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
-      "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
-      }
-    },
-    "@types/babel__generator": {
-      "version": "7.6.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz",
-      "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__template": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
-      "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "@types/babel__traverse": {
-      "version": "7.0.10",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.10.tgz",
-      "integrity": "sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.3.0"
-      }
-    },
-    "@types/caseless": {
-      "version": "0.12.1",
-      "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz",
-      "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A=="
-    },
-    "@types/color-name": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
-      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
-    },
-    "@types/form-data": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz",
-      "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==",
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "@types/glob": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
-      "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
-      "requires": {
-        "@types/minimatch": "*",
-        "@types/node": "*"
-      }
-    },
-    "@types/istanbul-lib-coverage": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
-      "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
-      "dev": true
-    },
-    "@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*"
-      }
-    },
-    "@types/istanbul-reports": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
-      "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*",
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "@types/json-schema": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
-      "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ=="
-    },
-    "@types/minimatch": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
-      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
-    },
-    "@types/node": {
-      "version": "8.5.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz",
-      "integrity": "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ=="
-    },
-    "@types/request": {
-      "version": "2.47.1",
-      "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz",
-      "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==",
-      "requires": {
-        "@types/caseless": "*",
-        "@types/form-data": "*",
-        "@types/node": "*",
-        "@types/tough-cookie": "*"
-      }
-    },
-    "@types/stack-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
-      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
-      "dev": true
-    },
-    "@types/tough-cookie": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz",
-      "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ=="
-    },
-    "@types/yargs": {
-      "version": "13.0.8",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz",
-      "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==",
-      "dev": true,
-      "requires": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "@types/yargs-parser": {
-      "version": "15.0.0",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
-      "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
-      "dev": true
-    },
-    "@webassemblyjs/ast": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
-      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
-      "requires": {
-        "@webassemblyjs/helper-module-context": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/wast-parser": "1.9.0"
-      }
-    },
-    "@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
-      "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
-    },
-    "@webassemblyjs/helper-api-error": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
-      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
-    },
-    "@webassemblyjs/helper-buffer": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
-      "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
-    },
-    "@webassemblyjs/helper-code-frame": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
-      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
-      "requires": {
-        "@webassemblyjs/wast-printer": "1.9.0"
-      }
-    },
-    "@webassemblyjs/helper-fsm": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
-      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
-    },
-    "@webassemblyjs/helper-module-context": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
-      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0"
-      }
-    },
-    "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
-      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
-    },
-    "@webassemblyjs/helper-wasm-section": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
-      "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0"
-      }
-    },
-    "@webassemblyjs/ieee754": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
-      "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
-      "requires": {
-        "@xtuc/ieee754": "^1.2.0"
-      }
-    },
-    "@webassemblyjs/leb128": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
-      "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
-      "requires": {
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webassemblyjs/utf8": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
-      "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
-    },
-    "@webassemblyjs/wasm-edit": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
-      "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/helper-wasm-section": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0",
-        "@webassemblyjs/wasm-opt": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0",
-        "@webassemblyjs/wast-printer": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-gen": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
-      "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/ieee754": "1.9.0",
-        "@webassemblyjs/leb128": "1.9.0",
-        "@webassemblyjs/utf8": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-opt": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
-      "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-buffer": "1.9.0",
-        "@webassemblyjs/wasm-gen": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wasm-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
-      "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-api-error": "1.9.0",
-        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
-        "@webassemblyjs/ieee754": "1.9.0",
-        "@webassemblyjs/leb128": "1.9.0",
-        "@webassemblyjs/utf8": "1.9.0"
-      }
-    },
-    "@webassemblyjs/wast-parser": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
-      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
-        "@webassemblyjs/helper-api-error": "1.9.0",
-        "@webassemblyjs/helper-code-frame": "1.9.0",
-        "@webassemblyjs/helper-fsm": "1.9.0",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webassemblyjs/wast-printer": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
-      "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/wast-parser": "1.9.0",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "@webcomponents/url": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/@webcomponents/url/-/url-0.7.5.tgz",
-      "integrity": "sha512-nDXRch3jsyaHCDWx3Gzl9w4aH7uqSkrOJZYnO7xWVsa8L38O/536t42gGDSEKSCGytYJHO/g22CDFCD2kM0w+Q=="
-    },
-    "@xtuc/ieee754": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
-    },
-    "@xtuc/long": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
-    },
-    "abab": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
-      "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
-      "dev": true
-    },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-    },
-    "abort-controller": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
-      "requires": {
-        "event-target-shim": "^5.0.0"
-      }
-    },
-    "accepts": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-      "requires": {
-        "mime-types": "~2.1.24",
-        "negotiator": "0.6.2"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "requires": {
-            "mime-db": "1.44.0"
-          }
-        }
-      }
-    },
-    "acorn": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
-      "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
-    },
-    "acorn-globals": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
-      "dev": true,
-      "requires": {
-        "acorn": "^6.0.1",
-        "acorn-walk": "^6.0.1"
-      }
-    },
-    "acorn-jsx": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
-      "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ=="
-    },
-    "acorn-walk": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-      "dev": true
-    },
-    "agent-base": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
-      "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
-      "dev": true,
-      "requires": {
-        "es6-promisify": "^5.0.0"
-      }
-    },
-    "airbnb-prop-types": {
-      "version": "2.16.0",
-      "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz",
-      "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==",
-      "dev": true,
-      "requires": {
-        "array.prototype.find": "^2.1.1",
-        "function.prototype.name": "^1.1.2",
-        "is-regex": "^1.1.0",
-        "object-is": "^1.1.2",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.2",
-        "prop-types": "^15.7.2",
-        "prop-types-exact": "^1.2.0",
-        "react-is": "^16.13.1"
-      },
-      "dependencies": {
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        }
-      }
-    },
-    "ajv": {
-      "version": "6.12.3",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
-      "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
-      "requires": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      }
-    },
-    "ajv-errors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
-      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
-    },
-    "ajv-keywords": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
-      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
-    },
-    "ansi-colors": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
-      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
-    },
-    "ansi-escapes": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
-      "dev": true
-    },
-    "ansi-html": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
-      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
-    },
-    "ansi-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-    },
-    "ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "requires": {
-        "color-convert": "^1.9.0"
-      }
-    },
-    "anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
-      "requires": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      }
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
-    },
-    "argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-      "requires": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "argsarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
-      "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs="
-    },
-    "arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
-    },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
-    },
-    "arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
-    },
-    "array-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
-      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
-    },
-    "array-equal": {
-      "version": "1.0.0",
-      "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-      "dev": true
-    },
-    "array-filter": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
-      "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
-      "dev": true
-    },
-    "array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
-    },
-    "array-from": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
-      "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
-      "dev": true
-    },
-    "array-includes": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
-      "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "is-string": "^1.0.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "array-slice": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
-      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
-    },
-    "array-union": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-      "requires": {
-        "array-uniq": "^1.0.1"
-      }
-    },
-    "array-uniq": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
-    },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
-    },
-    "array.prototype.find": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz",
-      "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.4"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "array.prototype.flat": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
-      "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "array.prototype.flatmap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz",
-      "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "asap": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
-      "optional": true
-    },
-    "asn1": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
-    },
-    "asn1.js": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
-      "requires": {
-        "bn.js": "^4.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
-      "requires": {
-        "object-assign": "^4.1.1",
-        "util": "0.10.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
-        },
-        "util": {
-          "version": "0.10.3",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-          "requires": {
-            "inherits": "2.0.1"
-          }
-        }
-      }
-    },
-    "assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-    },
-    "assertion-error": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
-      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
-      "dev": true
-    },
-    "assign-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
-    },
-    "ast-types": {
-      "version": "0.13.3",
-      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz",
-      "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==",
-      "dev": true
-    },
-    "astral-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
-    },
-    "async": {
-      "version": "0.2.10",
-      "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
-      "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
-    },
-    "async-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
-      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
-    },
-    "async-limiter": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
-      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
-    },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-    },
-    "atob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
-      "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio="
-    },
-    "aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
-    },
-    "aws4": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
-      "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
-    },
-    "babel-eslint": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz",
-      "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      }
-    },
-    "babel-jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
-      "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
-      "dev": true,
-      "requires": {
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/babel__core": "^7.1.0",
-        "babel-plugin-istanbul": "^5.1.0",
-        "babel-preset-jest": "^24.9.0",
-        "chalk": "^2.4.2",
-        "slash": "^2.0.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        }
-      }
-    },
-    "babel-loader": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
-      "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
-      "requires": {
-        "find-cache-dir": "^2.1.0",
-        "loader-utils": "^1.4.0",
-        "mkdirp": "^0.5.3",
-        "pify": "^4.0.1",
-        "schema-utils": "^2.6.5"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-          "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "fast-deep-equal": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
-          "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        },
-        "schema-utils": {
-          "version": "2.6.6",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-          "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
-          "requires": {
-            "ajv": "^6.12.0",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
-      }
-    },
-    "babel-plugin-array-includes": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-array-includes/-/babel-plugin-array-includes-2.0.3.tgz",
-      "integrity": "sha1-z1RS6Bx7gD+3lZ8QRayI4uwo/3Y="
-    },
-    "babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "requires": {
-        "object.assign": "^4.1.0"
-      }
-    },
-    "babel-plugin-istanbul": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
-      "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "find-up": "^3.0.0",
-        "istanbul-lib-instrument": "^3.3.0",
-        "test-exclude": "^5.2.3"
-      }
-    },
-    "babel-plugin-jest-hoist": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
-      "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
-      "dev": true,
-      "requires": {
-        "@types/babel__traverse": "^7.0.6"
-      }
-    },
-    "babel-preset-jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
-      "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
-      "dev": true,
-      "requires": {
-        "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
-        "babel-plugin-jest-hoist": "^24.9.0"
-      }
-    },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dev": true,
-      "requires": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      }
-    },
-    "backbone": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz",
-      "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==",
-      "requires": {
-        "underscore": ">=1.8.3"
-      },
-      "dependencies": {
-        "underscore": {
-          "version": "1.10.2",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
-          "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
-        }
-      }
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
-      "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "base-64": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
-      "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
-    },
-    "base64-js": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
-    },
-    "batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
-    },
-    "bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-      "optional": true,
-      "requires": {
-        "tweetnacl": "^0.14.3"
-      }
-    },
-    "big.js": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-      "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
-    },
-    "binary-extensions": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
-      "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
-    },
-    "bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
-    },
-    "bn.js": {
-      "version": "4.11.8",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
-    },
-    "body-parser": {
-      "version": "1.19.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-      "requires": {
-        "bytes": "3.1.0",
-        "content-type": "~1.0.4",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "on-finished": "~2.3.0",
-        "qs": "6.7.0",
-        "raw-body": "2.4.0",
-        "type-is": "~1.6.17"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.2",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-          "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "qs": {
-          "version": "6.7.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "bonjour": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
-      "requires": {
-        "array-flatten": "^2.1.0",
-        "deep-equal": "^1.0.1",
-        "dns-equal": "^1.0.0",
-        "dns-txt": "^2.0.2",
-        "multicast-dns": "^6.0.1",
-        "multicast-dns-service-types": "^1.1.0"
-      },
-      "dependencies": {
-        "array-flatten": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
-        }
-      }
-    },
-    "boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
-    },
-    "bootstrap": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
-      "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==",
-      "dev": true
-    },
-    "brace": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz",
-      "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg="
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-      "requires": {
-        "arr-flatten": "^1.1.0",
-        "array-unique": "^0.3.2",
-        "extend-shallow": "^2.0.1",
-        "fill-range": "^4.0.0",
-        "isobject": "^3.0.1",
-        "repeat-element": "^1.1.2",
-        "snapdragon": "^0.8.1",
-        "snapdragon-node": "^2.0.1",
-        "split-string": "^3.0.2",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "brorand": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
-    },
-    "browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true
-    },
-    "browser-request": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz",
-      "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc="
-    },
-    "browser-resolve": {
-      "version": "1.11.3",
-      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
-      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
-      "dev": true,
-      "requires": {
-        "resolve": "1.1.7"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "1.1.7",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
-          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
-          "dev": true
-        }
-      }
-    },
-    "browser-stdout": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
-      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
-      "dev": true,
-      "optional": true
-    },
-    "browserify-aes": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
-      "requires": {
-        "buffer-xor": "^1.0.3",
-        "cipher-base": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.3",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "browserify-cipher": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
-      "requires": {
-        "browserify-aes": "^1.0.4",
-        "browserify-des": "^1.0.0",
-        "evp_bytestokey": "^1.0.0"
-      }
-    },
-    "browserify-des": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "des.js": "^1.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "randombytes": "^2.0.1"
-      }
-    },
-    "browserify-sign": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
-      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
-      "requires": {
-        "bn.js": "^4.1.1",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.2",
-        "elliptic": "^6.0.0",
-        "inherits": "^2.0.1",
-        "parse-asn1": "^5.0.0"
-      }
-    },
-    "browserify-zlib": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
-      "requires": {
-        "pako": "~1.0.5"
-      }
-    },
-    "browserslist": {
-      "version": "4.13.0",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz",
-      "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==",
-      "requires": {
-        "caniuse-lite": "^1.0.30001093",
-        "electron-to-chromium": "^1.3.488",
-        "escalade": "^3.0.1",
-        "node-releases": "^1.1.58"
-      }
-    },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
-      "dev": true,
-      "requires": {
-        "node-int64": "^0.4.0"
-      }
-    },
-    "buffer": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
-      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
-      "requires": {
-        "base64-js": "^1.0.2",
-        "ieee754": "^1.1.4",
-        "isarray": "^1.0.0"
-      }
-    },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
-    },
-    "buffer-indexof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
-      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
-    },
-    "buffer-xor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
-    },
-    "builtin-modules": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
-      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
-      "dev": true
-    },
-    "builtin-status-codes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
-    },
-    "bytes": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-      "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
-    },
-    "cacache": {
-      "version": "12.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
-      "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
-      "requires": {
-        "bluebird": "^3.5.5",
-        "chownr": "^1.1.1",
-        "figgy-pudding": "^3.5.1",
-        "glob": "^7.1.4",
-        "graceful-fs": "^4.1.15",
-        "infer-owner": "^1.0.3",
-        "lru-cache": "^5.1.1",
-        "mississippi": "^3.0.0",
-        "mkdirp": "^0.5.1",
-        "move-concurrently": "^1.0.1",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.3",
-        "ssri": "^6.0.1",
-        "unique-filename": "^1.1.1",
-        "y18n": "^4.0.0"
-      },
-      "dependencies": {
-        "bluebird": {
-          "version": "3.7.2",
-          "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-          "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
-      "requires": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      }
-    },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
-    },
-    "camel-case": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
-      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.1.1"
-      }
-    },
-    "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001096",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz",
-      "integrity": "sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w=="
-    },
-    "capture-exit": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
-      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
-      "dev": true,
-      "requires": {
-        "rsvp": "^4.8.4"
-      }
-    },
-    "caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
-    },
-    "chai-nightwatch": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz",
-      "integrity": "sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw==",
-      "dev": true,
-      "requires": {
-        "assertion-error": "1.0.0",
-        "deep-eql": "0.1.3"
-      },
-      "dependencies": {
-        "assertion-error": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz",
-          "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=",
-          "dev": true
-        }
-      }
-    },
-    "chalk": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
-      "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      }
-    },
-    "chardet": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
-    },
-    "cheerio": {
-      "version": "1.0.0-rc.3",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
-      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
-      "dev": true,
-      "requires": {
-        "css-select": "~1.2.0",
-        "dom-serializer": "~0.1.1",
-        "entities": "~1.1.1",
-        "htmlparser2": "^3.9.1",
-        "lodash": "^4.15.0",
-        "parse5": "^3.0.1"
-      },
-      "dependencies": {
-        "dom-serializer": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
-          "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^1.3.0",
-            "entities": "^1.1.1"
-          }
-        },
-        "domelementtype": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-          "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-          "dev": true
-        }
-      }
-    },
-    "chokidar": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
-      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
-      "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
-      },
-      "dependencies": {
-        "normalize-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-        }
-      }
-    },
-    "chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
-    },
-    "chrome-trace-event": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
-      "requires": {
-        "tslib": "^1.9.0"
-      }
-    },
-    "ci-info": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-      "dev": true
-    },
-    "cipher-base": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
-      "requires": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "classnames": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-    },
-    "clean-css": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
-      "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
-      "requires": {
-        "source-map": "~0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "requires": {
-        "restore-cursor": "^3.1.0"
-      }
-    },
-    "cli-spinners": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz",
-      "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==",
-      "dev": true
-    },
-    "cli-width": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
-      "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
-    },
-    "clipboard": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
-      "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
-      "requires": {
-        "good-listener": "^1.2.2",
-        "select": "^1.1.2",
-        "tiny-emitter": "^2.0.0"
-      },
-      "dependencies": {
-        "delegate": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
-          "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
-        },
-        "good-listener": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
-          "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-          "requires": {
-            "delegate": "^3.1.2"
-          }
-        },
-        "select": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
-          "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
-        },
-        "tiny-emitter": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
-          "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
-        }
-      }
-    },
-    "cliui": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-      "requires": {
-        "string-width": "^3.1.0",
-        "strip-ansi": "^5.2.0",
-        "wrap-ansi": "^5.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-          "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
-          "requires": {
-            "ansi-styles": "^3.2.0",
-            "string-width": "^3.0.0",
-            "strip-ansi": "^5.0.0"
-          }
-        }
-      }
-    },
-    "clone": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
-      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
-    },
-    "clone-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
-      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
-    },
-    "cloudant-follow": {
-      "version": "0.17.0",
-      "resolved": "https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.17.0.tgz",
-      "integrity": "sha512-JQ1xvKAHh8rsnSVBjATLCjz/vQw1sWBGadxr2H69yFMwD7hShUGDwwEefdypaxroUJ/w6t1cSwilp/hRUxEW8w==",
-      "requires": {
-        "browser-request": "~0.3.0",
-        "debug": "^3.0.0",
-        "request": "^2.83.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
-    "coffee-script": {
-      "version": "1.12.7",
-      "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
-      "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw=="
-    },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
-      "requires": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
-      }
-    },
-    "color-convert": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
-      "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
-      "requires": {
-        "color-name": "^1.1.1"
-      }
-    },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
-    },
-    "colors": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
-      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
-    },
-    "combined-stream": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
-      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
-      "requires": {
-        "delayed-stream": "~1.0.0"
-      }
-    },
-    "commander": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
-    },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
-    },
-    "component-emitter": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
-    },
-    "compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
-      "requires": {
-        "mime-db": ">= 1.43.0 < 2"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        }
-      }
-    },
-    "compression": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
-      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
-      "requires": {
-        "accepts": "~1.3.5",
-        "bytes": "3.0.0",
-        "compressible": "~2.0.16",
-        "debug": "2.6.9",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.1.2",
-        "vary": "~1.1.2"
-      },
-      "dependencies": {
-        "bytes": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-    },
-    "concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "connect": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
-      "integrity": "sha512-B+WTJ0bDgjQugnbNF7fWGvwEgTj9Isdk3Y7yTZlgCuVe+hpl/do8frEMeimx7sRMPW3oZA+EsC9uDZL8MaaAwQ==",
-      "requires": {
-        "debug": "2.6.9",
-        "finalhandler": "1.0.6",
-        "parseurl": "~1.3.2",
-        "utils-merge": "1.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="
-    },
-    "console-browserify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
-      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
-    },
-    "constants-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
-    },
-    "content-disposition": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
-      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
-      "requires": {
-        "safe-buffer": "5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
-    "content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
-    },
-    "convert-source-map": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      }
-    },
-    "cookie": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
-      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
-    },
-    "cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
-    },
-    "copy-concurrently": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
-      "requires": {
-        "aproba": "^1.1.1",
-        "fs-write-stream-atomic": "^1.0.8",
-        "iferr": "^0.1.5",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.0"
-      }
-    },
-    "copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
-    },
-    "core-js": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
-      "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
-    },
-    "core-js-compat": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
-      "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
-      "requires": {
-        "browserslist": "^4.8.5",
-        "semver": "7.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
-        }
-      }
-    },
-    "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-    },
-    "couchapp": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/couchapp/-/couchapp-0.11.0.tgz",
-      "integrity": "sha1-8J3DFdYQ9vbnn9DK9eXWJLDMeD4=",
-      "requires": {
-        "coffee-script": "*",
-        "connect": "*",
-        "http-proxy": "0.8.7",
-        "nano": "*",
-        "request": "*",
-        "url": "*",
-        "watch": "~0.8.0"
-      },
-      "dependencies": {
-        "colors": {
-          "version": "0.6.2",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
-          "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
-        },
-        "http-proxy": {
-          "version": "0.8.7",
-          "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-0.8.7.tgz",
-          "integrity": "sha1-p7xThhgJLNJu0ZHkYlkzuu9t6A4=",
-          "requires": {
-            "colors": "0.x.x",
-            "optimist": "0.3.x",
-            "pkginfo": "0.2.x"
-          }
-        },
-        "nano": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/nano/-/nano-7.0.0.tgz",
-          "integrity": "sha512-zR1jRRfpG/lcFjYnGGxabABLFRtFX1E7YqWIJzvC0dLRJ9NTxodJC4MzVifhriMT9yhulsOf8k2UNOX8fMULAg==",
-          "requires": {
-            "@types/request": "^2.47.1",
-            "cloudant-follow": "~0.17.0",
-            "debug": "^2.2.0",
-            "errs": "^0.3.2",
-            "lodash.isempty": "^4.4.0",
-            "request": "^2.85.0"
-          }
-        },
-        "optimist": {
-          "version": "0.3.7",
-          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
-          "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
-          "requires": {
-            "wordwrap": "~0.0.2"
-          }
-        },
-        "pkginfo": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz",
-          "integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg="
-        },
-        "watch": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/watch/-/watch-0.8.0.tgz",
-          "integrity": "sha1-G7DupT3v5uYh6cjGPANYAH7L28w="
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-        }
-      }
-    },
-    "create-ecdh": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "elliptic": "^6.0.0"
-      }
-    },
-    "create-hash": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "inherits": "^2.0.1",
-        "md5.js": "^1.3.4",
-        "ripemd160": "^2.0.1",
-        "sha.js": "^2.4.0"
-      }
-    },
-    "create-hmac": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-      "requires": {
-        "cipher-base": "^1.0.3",
-        "create-hash": "^1.1.0",
-        "inherits": "^2.0.1",
-        "ripemd160": "^2.0.0",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-      "requires": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
-          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
-        }
-      }
-    },
-    "crypto-browserify": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
-      "requires": {
-        "browserify-cipher": "^1.0.0",
-        "browserify-sign": "^4.0.0",
-        "create-ecdh": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.0",
-        "diffie-hellman": "^5.0.0",
-        "inherits": "^2.0.1",
-        "pbkdf2": "^3.0.3",
-        "public-encrypt": "^4.0.0",
-        "randombytes": "^2.0.0",
-        "randomfill": "^1.0.3"
-      }
-    },
-    "css-loader": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
-      "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
-      "requires": {
-        "camelcase": "^5.3.1",
-        "cssesc": "^3.0.0",
-        "icss-utils": "^4.1.1",
-        "loader-utils": "^1.2.3",
-        "normalize-path": "^3.0.0",
-        "postcss": "^7.0.32",
-        "postcss-modules-extract-imports": "^2.0.0",
-        "postcss-modules-local-by-default": "^3.0.2",
-        "postcss-modules-scope": "^2.2.0",
-        "postcss-modules-values": "^3.0.0",
-        "postcss-value-parser": "^4.1.0",
-        "schema-utils": "^2.7.0",
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "normalize-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        }
-      }
-    },
-    "css-select": {
-      "version": "1.2.0",
-      "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
-      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
-      "requires": {
-        "boolbase": "~1.0.0",
-        "css-what": "2.1",
-        "domutils": "1.5.1",
-        "nth-check": "~1.0.1"
-      }
-    },
-    "css-what": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
-      "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
-    },
-    "cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
-    },
-    "cssom": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-      "dev": true
-    },
-    "cssstyle": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
-      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
-      "dev": true,
-      "requires": {
-        "cssom": "0.3.x"
-      }
-    },
-    "csstype": {
-      "version": "2.6.10",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
-      "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
-    },
-    "cyclist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
-      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
-    },
-    "d3": {
-      "version": "3.5.17",
-      "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
-      "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
-    },
-    "dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "data-uri-to-buffer": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz",
-      "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==",
-      "dev": true
-    },
-    "data-urls": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "whatwg-mimetype": "^2.2.0",
-        "whatwg-url": "^7.0.0"
-      },
-      "dependencies": {
-        "whatwg-url": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-          "dev": true,
-          "requires": {
-            "lodash.sortby": "^4.7.0",
-            "tr46": "^1.0.1",
-            "webidl-conversions": "^4.0.2"
-          }
-        }
-      }
-    },
-    "dateformat": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-      "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="
-    },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
-    },
-    "decode-uri-component": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
-    },
-    "deep-eql": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
-      "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
-      "dev": true,
-      "requires": {
-        "type-detect": "0.1.1"
-      }
-    },
-    "deep-equal": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
-      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
-      "requires": {
-        "is-arguments": "^1.0.4",
-        "is-date-object": "^1.0.1",
-        "is-regex": "^1.0.4",
-        "object-is": "^1.0.1",
-        "object-keys": "^1.1.1",
-        "regexp.prototype.flags": "^1.2.0"
-      },
-      "dependencies": {
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
-    },
-    "default-gateway": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
-      "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
-      "requires": {
-        "execa": "^1.0.0",
-        "ip-regex": "^2.1.0"
-      }
-    },
-    "defaults": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
-      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
-      "dev": true,
-      "requires": {
-        "clone": "^1.0.2"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
-          "dev": true
-        }
-      }
-    },
-    "define-properties": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
-      "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
-      "requires": {
-        "foreach": "^2.0.5",
-        "object-keys": "^1.0.8"
-      }
-    },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
-      "requires": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "degenerator": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz",
-      "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=",
-      "dev": true,
-      "requires": {
-        "ast-types": "0.x.x",
-        "escodegen": "1.x.x",
-        "esprima": "3.x.x"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        }
-      }
-    },
-    "del": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
-      "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
-      "requires": {
-        "@types/glob": "^7.1.1",
-        "globby": "^6.1.0",
-        "is-path-cwd": "^2.0.0",
-        "is-path-in-cwd": "^2.0.0",
-        "p-map": "^2.0.0",
-        "pify": "^4.0.1",
-        "rimraf": "^2.6.3"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-    },
-    "depd": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
-      "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
-    },
-    "des.js": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
-      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
-    },
-    "detect-file": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
-    },
-    "detect-newline": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
-      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
-      "dev": true
-    },
-    "detect-node": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
-      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
-    },
-    "diff": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
-      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
-      "dev": true
-    },
-    "diff-match-patch": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.1.tgz",
-      "integrity": "sha512-A0QEhr4PxGUMEtKxd6X+JLnOTFd3BfIPSDpsc4dMvj+CbSaErDwTpoTo/nFJDMSrjxLW4BiNq+FbNisAAHhWeQ=="
-    },
-    "diff-sequences": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
-      "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==",
-      "dev": true
-    },
-    "diffie-hellman": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "miller-rabin": "^4.0.0",
-        "randombytes": "^2.0.0"
-      }
-    },
-    "discontinuous-range": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
-      "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
-      "dev": true
-    },
-    "dns-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
-    },
-    "dns-packet": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
-      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
-      "requires": {
-        "ip": "^1.1.0",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "dns-txt": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
-      "requires": {
-        "buffer-indexof": "^1.0.0"
-      }
-    },
-    "doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "requires": {
-        "esutils": "^2.0.2"
-      }
-    },
-    "dom-align": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
-      "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
-    },
-    "dom-converter": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
-      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
-      "requires": {
-        "utila": "~0.4"
-      }
-    },
-    "dom-helpers": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
-      "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
-      "requires": {
-        "@babel/runtime": "^7.8.7",
-        "csstype": "^2.6.7"
-      }
-    },
-    "dom-serializer": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
-      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
-      "requires": {
-        "domelementtype": "~1.1.1",
-        "entities": "~1.1.1"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
-          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
-        }
-      }
-    },
-    "dom-walk": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
-      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
-      "dev": true
-    },
-    "domain-browser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
-    },
-    "domelementtype": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
-      "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
-    },
-    "domexception": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
-      "dev": true,
-      "requires": {
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "domhandler": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-      "requires": {
-        "domelementtype": "1"
-      }
-    },
-    "domutils": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
-      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
-      "requires": {
-        "dom-serializer": "0",
-        "domelementtype": "1"
-      }
-    },
-    "dotenv": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
-      "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==",
-      "dev": true
-    },
-    "duplexify": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
-      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
-      "requires": {
-        "end-of-stream": "^1.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "ecc-jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-      "optional": true,
-      "requires": {
-        "jsbn": "~0.1.0"
-      }
-    },
-    "ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
-    },
-    "ejs": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
-      "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
-      "dev": true
-    },
-    "electron-to-chromium": {
-      "version": "1.3.492",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.492.tgz",
-      "integrity": "sha512-AD6v9Y2wN0HuoRH4LwCmlSHjkKq51D1U52bTuvM5uPzisbHVm3Hms15c42TBFLewxnSqxAynK/tbeaUi4Rnjqw=="
-    },
-    "elliptic": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
-      "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
-      "requires": {
-        "bn.js": "^4.4.0",
-        "brorand": "^1.0.1",
-        "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.0"
-      }
-    },
-    "emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
-    },
-    "emojis-list": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
-    },
-    "encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
-    },
-    "end-of-stream": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
-      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
-      "requires": {
-        "once": "^1.4.0"
-      }
-    },
-    "enhanced-resolve": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
-      "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "memory-fs": "^0.5.0",
-        "tapable": "^1.0.0"
-      },
-      "dependencies": {
-        "memory-fs": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
-          "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
-          "requires": {
-            "errno": "^0.1.3",
-            "readable-stream": "^2.0.1"
-          }
-        }
-      }
-    },
-    "entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
-    },
-    "envinfo": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.1.tgz",
-      "integrity": "sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==",
-      "dev": true
-    },
-    "enzyme": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
-      "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
-      "dev": true,
-      "requires": {
-        "array.prototype.flat": "^1.2.3",
-        "cheerio": "^1.0.0-rc.3",
-        "enzyme-shallow-equal": "^1.0.1",
-        "function.prototype.name": "^1.1.2",
-        "has": "^1.0.3",
-        "html-element-map": "^1.2.0",
-        "is-boolean-object": "^1.0.1",
-        "is-callable": "^1.1.5",
-        "is-number-object": "^1.0.4",
-        "is-regex": "^1.0.5",
-        "is-string": "^1.0.5",
-        "is-subset": "^0.1.1",
-        "lodash.escape": "^4.0.1",
-        "lodash.isequal": "^4.5.0",
-        "object-inspect": "^1.7.0",
-        "object-is": "^1.0.2",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.1",
-        "object.values": "^1.1.1",
-        "raf": "^3.4.1",
-        "rst-selector-parser": "^2.2.3",
-        "string.prototype.trim": "^1.2.1"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        }
-      }
-    },
-    "enzyme-adapter-react-16": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz",
-      "integrity": "sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==",
-      "dev": true,
-      "requires": {
-        "enzyme-adapter-utils": "^1.13.0",
-        "enzyme-shallow-equal": "^1.0.1",
-        "has": "^1.0.3",
-        "object.assign": "^4.1.0",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.12.0",
-        "react-test-renderer": "^16.0.0-0",
-        "semver": "^5.7.0"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "enzyme-adapter-utils": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz",
-      "integrity": "sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==",
-      "dev": true,
-      "requires": {
-        "airbnb-prop-types": "^2.15.0",
-        "function.prototype.name": "^1.1.2",
-        "object.assign": "^4.1.0",
-        "object.fromentries": "^2.0.2",
-        "prop-types": "^15.7.2",
-        "semver": "^5.7.1"
-      }
-    },
-    "enzyme-shallow-equal": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz",
-      "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3",
-        "object-is": "^1.0.2"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "errno": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
-      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
-      "requires": {
-        "prr": "~1.0.1"
-      }
-    },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "errs": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/errs/-/errs-0.3.2.tgz",
-      "integrity": "sha1-eYCZstvTfKK8dJ5TinwTB9C1BJk="
-    },
-    "es-abstract": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
-      "integrity": "sha1-Hss2wZeEKgDY7kwt/YZGu5fWCGQ=",
-      "requires": {
-        "es-to-primitive": "^1.1.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.1",
-        "is-callable": "^1.1.3",
-        "is-regex": "^1.0.4"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
-      "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
-      "requires": {
-        "is-callable": "^1.1.1",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.1"
-      }
-    },
-    "es5-shim": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.4.tgz",
-      "integrity": "sha1-BUbRsX66KoUjWWuDPWxVP02QQeA=",
-      "dev": true
-    },
-    "es6-denodeify": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz",
-      "integrity": "sha1-MdTV/pxVA+ElRgQ5MQ4WoqPznB8="
-    },
-    "es6-promise": {
-      "version": "4.2.8",
-      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
-      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
-      "dev": true
-    },
-    "es6-promisify": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
-      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
-      "dev": true,
-      "requires": {
-        "es6-promise": "^4.0.3"
-      }
-    },
-    "escalade": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz",
-      "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA=="
-    },
-    "escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
-    },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
-    "escodegen": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
-      "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
-      "dev": true,
-      "requires": {
-        "esprima": "^3.1.3",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "eslint": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "ajv": "^6.10.0",
-        "chalk": "^2.1.0",
-        "cross-spawn": "^6.0.5",
-        "debug": "^4.0.1",
-        "doctrine": "^3.0.0",
-        "eslint-scope": "^5.0.0",
-        "eslint-utils": "^1.4.3",
-        "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.2",
-        "esquery": "^1.0.1",
-        "esutils": "^2.0.2",
-        "file-entry-cache": "^5.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.0.0",
-        "globals": "^12.1.0",
-        "ignore": "^4.0.6",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "inquirer": "^7.0.0",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.3.0",
-        "lodash": "^4.17.14",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.1",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.8.3",
-        "progress": "^2.0.0",
-        "regexpp": "^2.0.1",
-        "semver": "^6.1.2",
-        "strip-ansi": "^5.2.0",
-        "strip-json-comments": "^3.0.1",
-        "table": "^5.2.3",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "eslint-scope": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
-          "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        },
-        "glob-parent": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-          "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
-          "requires": {
-            "is-glob": "^4.0.1"
-          },
-          "dependencies": {
-            "is-glob": {
-              "version": "4.0.1",
-              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-              "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-              "requires": {
-                "is-extglob": "^2.1.1"
-              }
-            }
-          }
-        },
-        "globals": {
-          "version": "12.4.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-          "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
-          "requires": {
-            "type-fest": "^0.8.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "optionator": {
-          "version": "0.8.3",
-          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
-          "requires": {
-            "deep-is": "~0.1.3",
-            "fast-levenshtein": "~2.0.6",
-            "levn": "~0.3.0",
-            "prelude-ls": "~1.1.2",
-            "type-check": "~0.3.2",
-            "word-wrap": "~1.2.3"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "eslint-loader": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
-      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
-      "requires": {
-        "loader-fs-cache": "^1.0.0",
-        "loader-utils": "^1.0.2",
-        "object-assign": "^4.0.1",
-        "object-hash": "^1.1.4",
-        "rimraf": "^2.6.1"
-      }
-    },
-    "eslint-plugin-react": {
-      "version": "7.20.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz",
-      "integrity": "sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg==",
-      "requires": {
-        "array-includes": "^3.1.1",
-        "array.prototype.flatmap": "^1.2.3",
-        "doctrine": "^2.1.0",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^2.4.1",
-        "object.entries": "^1.1.2",
-        "object.fromentries": "^2.0.2",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "resolve": "^1.17.0",
-        "string.prototype.matchall": "^4.0.2"
-      },
-      "dependencies": {
-        "doctrine": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-          "requires": {
-            "esutils": "^2.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "eslint-scope": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
-      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-      "requires": {
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      }
-    },
-    "eslint-utils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
-      "requires": {
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        }
-      }
-    },
-    "eslint-visitor-keys": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
-      "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0="
-    },
-    "espree": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-      "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
-      "requires": {
-        "acorn": "^7.1.1",
-        "acorn-jsx": "^5.2.0",
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "7.1.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
-          "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
-        },
-        "eslint-visitor-keys": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-          "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
-        }
-      }
-    },
-    "esprima": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
-      "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ="
-    },
-    "esquery": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
-      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
-      "requires": {
-        "estraverse": "^5.1.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
-          "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw=="
-        }
-      }
-    },
-    "esrecurse": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
-      "requires": {
-        "estraverse": "^4.1.0"
-      }
-    },
-    "estraverse": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
-    },
-    "etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
-    },
-    "event-target-shim": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
-    },
-    "eventemitter2": {
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
-      "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas="
-    },
-    "eventemitter3": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
-      "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ=="
-    },
-    "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-      "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
-    },
-    "eventsource": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
-      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
-      "requires": {
-        "original": "^1.0.0"
-      }
-    },
-    "evp_bytestokey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
-      "requires": {
-        "md5.js": "^1.3.4",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "exec-sh": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
-      "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
-      "dev": true
-    },
-    "execa": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-      "requires": {
-        "cross-spawn": "^6.0.0",
-        "get-stream": "^4.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      }
-    },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
-    },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
-      "requires": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "expand-tilde": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
-    },
-    "expect": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
-      "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "ansi-styles": "^3.2.0",
-        "jest-get-type": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-regex-util": "^24.9.0"
-      }
-    },
-    "exports-loader": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz",
-      "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "source-map": "0.5.x"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
-          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
-        },
-        "json5": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
-        },
-        "loader-utils": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        }
-      }
-    },
-    "expose-loader": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz",
-      "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw=="
-    },
-    "express": {
-      "version": "4.17.1",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
-      "requires": {
-        "accepts": "~1.3.7",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.19.0",
-        "content-disposition": "0.5.3",
-        "content-type": "~1.0.4",
-        "cookie": "0.4.0",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "~1.1.2",
-        "fresh": "0.5.2",
-        "merge-descriptors": "1.0.1",
-        "methods": "~1.1.2",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
-        "proxy-addr": "~2.0.5",
-        "qs": "6.7.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.1.2",
-        "send": "0.17.1",
-        "serve-static": "1.14.1",
-        "setprototypeof": "1.1.1",
-        "statuses": "~1.5.0",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      },
-      "dependencies": {
-        "cookie": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-          "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
-        },
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "finalhandler": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-          "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.3",
-            "statuses": "~1.5.0",
-            "unpipe": "~1.0.0"
-          }
-        },
-        "http-errors": {
-          "version": "1.7.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
-          "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.4",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-        },
-        "parseurl": {
-          "version": "1.3.3",
-          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-          "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
-        },
-        "qs": {
-          "version": "6.7.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        },
-        "send": {
-          "version": "0.17.1",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-          "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "destroy": "~1.0.4",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "~1.7.2",
-            "mime": "1.6.0",
-            "ms": "2.1.1",
-            "on-finished": "~2.3.0",
-            "range-parser": "~1.2.1",
-            "statuses": "~1.5.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
-    },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
-      "requires": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "external-editor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
-      "requires": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.4.24",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        }
-      }
-    },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-      "requires": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
-    },
-    "fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-    },
-    "fast-json-stable-stringify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
-    },
-    "faye-websocket": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
-      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
-      "requires": {
-        "websocket-driver": ">=0.5.1"
-      }
-    },
-    "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
-      "dev": true,
-      "requires": {
-        "bser": "2.1.1"
-      }
-    },
-    "fetch-cookie": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.7.3.tgz",
-      "integrity": "sha512-rZPkLnI8x5V+zYAiz8QonAHsTb4BY+iFowFBI1RFn0zrO343AVp9X7/yUj/9wL6Ef/8fLls8b/vGtzUvmyAUGA==",
-      "requires": {
-        "es6-denodeify": "^0.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "fetch-mock": {
-      "version": "9.10.3",
-      "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-9.10.3.tgz",
-      "integrity": "sha512-vvTW3vu+6sgDuOpInd8VtaaYlt56Un/zrEvBmT8JppDXj2ZY3PQgIAoxqdSAFR5o/10jJ1yFBhXLQ/Dce/p+jg==",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "core-js": "^3.0.0",
-        "debug": "^4.1.1",
-        "glob-to-regexp": "^0.4.0",
-        "is-subset": "^0.1.1",
-        "lodash.isequal": "^4.5.0",
-        "path-to-regexp": "^2.2.1",
-        "querystring": "^0.2.0",
-        "whatwg-url": "^6.5.0"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "3.6.5",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
-          "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
-          "dev": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "path-to-regexp": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz",
-          "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==",
-          "dev": true
-        }
-      }
-    },
-    "figgy-pudding": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
-      "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
-    },
-    "figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-      "requires": {
-        "escape-string-regexp": "^1.0.5"
-      }
-    },
-    "file-entry-cache": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
-      "requires": {
-        "flat-cache": "^2.0.1"
-      }
-    },
-    "file-loader": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
-      "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^0.4.5"
-      }
-    },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1",
-        "to-regex-range": "^2.1.0"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "finalhandler": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
-      "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
-      "requires": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.1",
-        "escape-html": "~1.0.3",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.2",
-        "statuses": "~1.3.1",
-        "unpipe": "~1.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "find-cache-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
-      "requires": {
-        "commondir": "^1.0.1",
-        "make-dir": "^2.0.0",
-        "pkg-dir": "^3.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
-          "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-          "requires": {
-            "p-limit": "^2.0.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-        },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        }
-      }
-    },
-    "find-up": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-      "requires": {
-        "locate-path": "^3.0.0"
-      }
-    },
-    "findup-sync": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-      "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
-      "requires": {
-        "glob": "~5.0.0"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "5.0.15",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
-          "requires": {
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "2 || 3",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        }
-      }
-    },
-    "fined": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
-      "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "is-plain-object": "^2.0.3",
-        "object.defaults": "^1.1.0",
-        "object.pick": "^1.2.0",
-        "parse-filepath": "^1.0.1"
-      }
-    },
-    "flagged-respawn": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
-      "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
-    },
-    "flat": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
-      "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-buffer": "~2.0.3"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
-          "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "flat-cache": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
-      "requires": {
-        "flatted": "^2.0.0",
-        "rimraf": "2.6.3",
-        "write": "1.0.3"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "flatted": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
-    },
-    "flush-write-stream": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
-      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
-      "requires": {
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.3.6"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "follow-redirects": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz",
-      "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg=="
-    },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
-    },
-    "for-own": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-      "requires": {
-        "for-in": "^1.0.1"
-      }
-    },
-    "foreach": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
-      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
-    },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
-    },
-    "form-data": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
-      "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
-      "requires": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "1.0.6",
-        "mime-types": "^2.1.12"
-      }
-    },
-    "forwarded": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
-      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
-    },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
-      "requires": {
-        "map-cache": "^0.2.2"
-      }
-    },
-    "fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
-    },
-    "from2": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.0"
-      }
-    },
-    "fs-extra": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
-      "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "jsonfile": "^2.1.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
-        },
-        "jsonfile": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-          "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-          "requires": {
-            "graceful-fs": "^4.1.6"
-          }
-        }
-      }
-    },
-    "fs-readdir-recursive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
-      "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
-    },
-    "fs-write-stream-atomic": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
-      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "iferr": "^0.1.5",
-        "imurmurhash": "^0.1.4",
-        "readable-stream": "1 || 2"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-    },
-    "fsevents": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
-      "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
-      "optional": true,
-      "requires": {
-        "nan": "^2.12.1",
-        "node-pre-gyp": "^0.12.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "optional": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "deep-extend": {
-          "version": "0.6.0",
-          "bundled": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.24",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "^3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "optional": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "optional": true
-        },
-        "minipass": {
-          "version": "2.3.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.0"
-          }
-        },
-        "minizlib": {
-          "version": "1.2.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.2.1"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.3.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "debug": "^4.1.0",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.12.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "^1.0.2",
-            "mkdirp": "^0.5.1",
-            "needle": "^2.2.1",
-            "nopt": "^4.0.1",
-            "npm-packlist": "^1.1.6",
-            "npmlog": "^4.0.2",
-            "rc": "^1.2.7",
-            "rimraf": "^2.6.1",
-            "semver": "^5.3.0",
-            "tar": "^4"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.6",
-          "bundled": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.4.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "^3.0.1",
-            "npm-bundled": "^1.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "^0.6.0",
-            "ini": "~1.3.0",
-            "minimist": "^1.2.0",
-            "strip-json-comments": "~2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.7.0",
-          "bundled": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.8",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "chownr": "^1.1.1",
-            "fs-minipass": "^1.2.5",
-            "minipass": "^2.3.4",
-            "minizlib": "^1.1.1",
-            "mkdirp": "^0.5.0",
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "bundled": true,
-          "optional": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "optional": true
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "bundled": true,
-          "optional": true
-        }
-      }
-    },
-    "ftp": {
-      "version": "0.3.10",
-      "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz",
-      "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "1.1.x",
-        "xregexp": "2.0.0"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "readable-stream": {
-          "version": "1.1.14",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-          "dev": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
-          "dev": true
-        }
-      }
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
-    },
-    "function.prototype.name": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz",
-      "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "functions-have-names": "^1.2.0"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
-    },
-    "functions-have-names": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz",
-      "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==",
-      "dev": true
-    },
-    "gensync": {
-      "version": "1.0.0-beta.1",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
-      "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
-    },
-    "get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
-    },
-    "get-stream": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-      "requires": {
-        "pump": "^3.0.0"
-      }
-    },
-    "get-uri": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz",
-      "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==",
-      "dev": true,
-      "requires": {
-        "data-uri-to-buffer": "1",
-        "debug": "2",
-        "extend": "~3.0.2",
-        "file-uri-to-path": "1",
-        "ftp": "~0.3.10",
-        "readable-stream": "2"
-      }
-    },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
-    },
-    "getobject": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
-      "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw="
-    },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "glob": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-      "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "dependencies": {
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        }
-      }
-    },
-    "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "glob-to-regexp": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "dev": true
-    },
-    "global": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
-      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
-      "dev": true,
-      "requires": {
-        "min-document": "^2.19.0",
-        "process": "^0.11.10"
-      }
-    },
-    "global-modules": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-      "requires": {
-        "global-prefix": "^3.0.0"
-      },
-      "dependencies": {
-        "global-prefix": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-          "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-          "requires": {
-            "ini": "^1.3.5",
-            "kind-of": "^6.0.2",
-            "which": "^1.3.1"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
-      }
-    },
-    "global-prefix": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "homedir-polyfill": "^1.0.1",
-        "ini": "^1.3.4",
-        "is-windows": "^1.0.1",
-        "which": "^1.2.14"
-      }
-    },
-    "globals": {
-      "version": "11.5.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
-      "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ=="
-    },
-    "globby": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-      "requires": {
-        "array-union": "^1.0.1",
-        "glob": "^7.0.3",
-        "object-assign": "^4.0.1",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-        }
-      }
-    },
-    "graceful-fs": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-      "integrity": "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg=="
-    },
-    "growl": {
-      "version": "1.10.5",
-      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
-      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
-      "dev": true,
-      "optional": true
-    },
-    "growly": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-      "dev": true
-    },
-    "grunt": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.2.1.tgz",
-      "integrity": "sha512-zgJjn9N56tScvRt/y0+1QA+zDBnKTrkpyeSBqQPLcZvbqTD/oyGMrdZQXmm6I3828s+FmPvxc3Xv+lgKFtudOw==",
-      "requires": {
-        "dateformat": "~3.0.3",
-        "eventemitter2": "~0.4.13",
-        "exit": "~0.1.2",
-        "findup-sync": "~0.3.0",
-        "glob": "~7.1.6",
-        "grunt-cli": "~1.3.2",
-        "grunt-known-options": "~1.1.0",
-        "grunt-legacy-log": "~2.0.0",
-        "grunt-legacy-util": "~1.1.1",
-        "iconv-lite": "~0.4.13",
-        "js-yaml": "~3.14.0",
-        "minimatch": "~3.0.4",
-        "mkdirp": "~1.0.4",
-        "nopt": "~3.0.6",
-        "rimraf": "~3.0.2"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
-          "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
-        },
-        "rimraf": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        }
-      }
-    },
-    "grunt-cli": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz",
-      "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==",
-      "requires": {
-        "grunt-known-options": "~1.1.0",
-        "interpret": "~1.1.0",
-        "liftoff": "~2.5.0",
-        "nopt": "~4.0.1",
-        "v8flags": "~3.1.1"
-      },
-      "dependencies": {
-        "interpret": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
-          "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
-        },
-        "nopt": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
-          "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        }
-      }
-    },
-    "grunt-contrib-clean": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
-      "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=",
-      "requires": {
-        "async": "^1.5.2",
-        "rimraf": "^2.5.1"
-      },
-      "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-        }
-      }
-    },
-    "grunt-contrib-copy": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
-      "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
-      "requires": {
-        "chalk": "^1.1.1",
-        "file-sync-cmp": "^0.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "file-sync-cmp": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
-          "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs="
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        }
-      }
-    },
-    "grunt-couchapp": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/grunt-couchapp/-/grunt-couchapp-0.2.1.tgz",
-      "integrity": "sha1-OgYhahiGoVGEgQMF50cpx7MkXo4=",
-      "requires": {
-        "couchapp": "0.10.*",
-        "grunt": "~0.3.12",
-        "nano": "3.3.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "argparse": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
-          "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "asn1": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-          "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
-        },
-        "assert-plus": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
-          "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
-        },
-        "async": {
-          "version": "0.1.22",
-          "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
-          "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE="
-        },
-        "asynckit": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-          "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-        },
-        "aws-sign2": {
-          "version": "0.6.0",
-          "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
-          "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8="
-        },
-        "aws4": {
-          "version": "1.6.0",
-          "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
-          "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
-        },
-        "bcrypt-pbkdf": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-          "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-          "optional": true,
-          "requires": {
-            "tweetnacl": "^0.14.3"
-          }
-        },
-        "bind-obj-methods": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz",
-          "integrity": "sha1-T1l5ysFXk633DkiBYeRj4gnKUJw="
-        },
-        "boom": {
-          "version": "2.10.1",
-          "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
-          "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "brace-expansion": {
-          "version": "1.1.8",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
-          "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "bytes": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz",
-          "integrity": "sha1-xXSBIigSbWNp0VdpJahXnbP45aI="
-        },
-        "caseless": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
-          "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "clean-yaml-object": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz",
-          "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g="
-        },
-        "cli": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.3.tgz",
-          "integrity": "sha1-5oGcjV+qlX9k+Y9mqFBiaMHR8X0=",
-          "requires": {
-            "glob": ">= 3.1.4"
-          }
-        },
-        "color-support": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-          "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
-        },
-        "colors": {
-          "version": "0.6.2",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
-          "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w="
-        },
-        "combined-stream": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-          "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
-          "requires": {
-            "delayed-stream": "~1.0.0"
-          }
-        },
-        "commander": {
-          "version": "2.12.2",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
-          "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA=="
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-        },
-        "cookie": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz",
-          "integrity": "sha1-VFa9R67iZm6sl26oCmEFlASD/pg="
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
-        },
-        "couchapp": {
-          "version": "0.10.0",
-          "resolved": "https://registry.npmjs.org/couchapp/-/couchapp-0.10.0.tgz",
-          "integrity": "sha1-SDKOoAZuQ9D0tIuZSeBVeU0yC4Y=",
-          "requires": {
-            "coffee-script": "*",
-            "connect": "*",
-            "http-proxy": "*",
-            "nano": "*",
-            "request": "*",
-            "url": "*",
-            "watch": "~0.8.0"
-          }
-        },
-        "coveralls": {
-          "version": "2.13.3",
-          "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz",
-          "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==",
-          "requires": {
-            "js-yaml": "3.6.1",
-            "lcov-parse": "0.0.10",
-            "log-driver": "1.2.5",
-            "minimist": "1.2.0",
-            "request": "2.79.0"
-          },
-          "dependencies": {
-            "js-yaml": {
-              "version": "3.6.1",
-              "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
-              "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
-              "requires": {
-                "argparse": "^1.0.7",
-                "esprima": "^2.6.0"
-              }
-            },
-            "qs": {
-              "version": "6.3.2",
-              "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
-              "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw="
-            },
-            "request": {
-              "version": "2.79.0",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
-              "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
-              "requires": {
-                "aws-sign2": "~0.6.0",
-                "aws4": "^1.2.1",
-                "caseless": "~0.11.0",
-                "combined-stream": "~1.0.5",
-                "extend": "~3.0.0",
-                "forever-agent": "~0.6.1",
-                "form-data": "~2.1.1",
-                "har-validator": "~2.0.6",
-                "hawk": "~3.1.3",
-                "http-signature": "~1.1.0",
-                "is-typedarray": "~1.0.0",
-                "isstream": "~0.1.2",
-                "json-stringify-safe": "~5.0.1",
-                "mime-types": "~2.1.7",
-                "oauth-sign": "~0.8.1",
-                "qs": "~6.3.0",
-                "stringstream": "~0.0.4",
-                "tough-cookie": "~2.3.0",
-                "tunnel-agent": "~0.4.1",
-                "uuid": "^3.0.0"
-              }
-            }
-          }
-        },
-        "crc": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/crc/-/crc-0.2.0.tgz",
-          "integrity": "sha1-9Ehrm/ChLfg8P8oU4x4DD9q9lFQ="
-        },
-        "crc32": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz",
-          "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo="
-        },
-        "cross-spawn": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
-          "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
-          },
-          "dependencies": {
-            "lru-cache": {
-              "version": "4.1.1",
-              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
-              "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
-              "requires": {
-                "pseudomap": "^1.0.2",
-                "yallist": "^2.1.2"
-              }
-            }
-          }
-        },
-        "cryptiles": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-          "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
-          "requires": {
-            "boom": "2.x.x"
-          }
-        },
-        "dashdash": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-          "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "dateformat": {
-          "version": "1.0.2-1.2.3",
-          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
-          "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk="
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "deflate-js": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/deflate-js/-/deflate-js-0.2.3.tgz",
-          "integrity": "sha1-+Fq7WOvFFRowYUdHPVfD5PfkQms="
-        },
-        "delayed-stream": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-          "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-        },
-        "diff": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz",
-          "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8="
-        },
-        "ecc-jsbn": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
-          "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-          "optional": true,
-          "requires": {
-            "jsbn": "~0.1.0"
-          }
-        },
-        "errs": {
-          "version": "0.2.4",
-          "resolved": "https://registry.npmjs.org/errs/-/errs-0.2.4.tgz",
-          "integrity": "sha1-SMzv7JT9PmE9ZGmEDdHAOJN5g/Y="
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "esprima": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
-        },
-        "events-to-array": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz",
-          "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y="
-        },
-        "extend": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-          "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
-        },
-        "extsprintf": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-          "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
-        },
-        "eyes": {
-          "version": "0.1.8",
-          "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
-          "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
-        },
-        "follow": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/follow/-/follow-0.8.0.tgz",
-          "integrity": "sha1-Vg9o6gsED0kWch4pBWG1+kQlsAQ=",
-          "requires": {
-            "request": "~2.2.5"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.2.9",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.2.9.tgz",
-              "integrity": "sha1-77+K+/5/HiANSDuZdStsQrQEoPE="
-            }
-          }
-        },
-        "foreground-child": {
-          "version": "1.5.6",
-          "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
-          "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=",
-          "requires": {
-            "cross-spawn": "^4",
-            "signal-exit": "^3.0.0"
-          }
-        },
-        "forever-agent": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-          "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
-        },
-        "form-data": {
-          "version": "2.1.4",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
-          "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.5",
-            "mime-types": "^2.1.12"
-          }
-        },
-        "formidable": {
-          "version": "1.0.11",
-          "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz",
-          "integrity": "sha1-aPYzJaA15kS297s9ESQ7l2HeGzA="
-        },
-        "fresh": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz",
-          "integrity": "sha1-A+SwF4Qk5MLV0ZpU2IFM3JeTSFA="
-        },
-        "fs-exists-cached": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz",
-          "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84="
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-        },
-        "function-loop": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.1.tgz",
-          "integrity": "sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw="
-        },
-        "generate-function": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
-          "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ="
-        },
-        "generate-object-property": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
-          "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
-          "requires": {
-            "is-property": "^1.0.0"
-          }
-        },
-        "getpass": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-          "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-          "requires": {
-            "assert-plus": "^1.0.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          },
-          "dependencies": {
-            "minimatch": {
-              "version": "3.0.4",
-              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-              "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-              "requires": {
-                "brace-expansion": "^1.1.7"
-              }
-            }
-          }
-        },
-        "glob-whatev": {
-          "version": "0.1.8",
-          "resolved": "https://registry.npmjs.org/glob-whatev/-/glob-whatev-0.1.8.tgz",
-          "integrity": "sha1-ozp2MmLlAehRvIT9IrVzbP84Jv0=",
-          "requires": {
-            "minimatch": "~0.2.5"
-          }
-        },
-        "grunt": {
-          "version": "0.3.17",
-          "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.3.17.tgz",
-          "integrity": "sha1-8uA00gC+/V7rOLpcQdTM1yNf1k0=",
-          "requires": {
-            "async": "~0.1.18",
-            "colors": "~0.6.0",
-            "connect": "~2.4.4",
-            "dateformat": "1.0.2-1.2.3",
-            "glob-whatev": "~0.1.4",
-            "gzip-js": "~0.3.1",
-            "hooker": "~0.2.3",
-            "jshint": "~0.9.1",
-            "nodeunit": "~0.7.4",
-            "nopt": "~1.0.10",
-            "prompt": "~0.1.12",
-            "semver": "~1.0.13",
-            "temporary": "~0.0.4",
-            "uglify-js": "~1.3.3",
-            "underscore": "~1.2.4",
-            "underscore.string": "~2.1.1"
-          },
-          "dependencies": {
-            "connect": {
-              "version": "2.4.6",
-              "resolved": "https://registry.npmjs.org/connect/-/connect-2.4.6.tgz",
-              "integrity": "sha1-ASwv4FAYUE7SAoZooWkDGZ5ues4=",
-              "requires": {
-                "bytes": "0.1.0",
-                "cookie": "0.0.4",
-                "crc": "0.2.0",
-                "debug": "*",
-                "formidable": "1.0.11",
-                "fresh": "0.1.0",
-                "pause": "0.0.1",
-                "qs": "0.5.1",
-                "send": "0.0.4"
-              }
-            }
-          }
-        },
-        "gzip-js": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz",
-          "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=",
-          "requires": {
-            "crc32": ">= 0.2.2",
-            "deflate-js": ">= 0.2.2"
-          }
-        },
-        "har-validator": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
-          "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
-          "requires": {
-            "chalk": "^1.1.1",
-            "commander": "^2.9.0",
-            "is-my-json-valid": "^2.12.4",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "hawk": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
-          "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
-          "requires": {
-            "boom": "2.x.x",
-            "cryptiles": "2.x.x",
-            "hoek": "2.x.x",
-            "sntp": "1.x.x"
-          }
-        },
-        "hoek": {
-          "version": "2.16.3",
-          "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
-          "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
-        },
-        "hooker": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
-          "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk="
-        },
-        "http-signature": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
-          "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
-          "requires": {
-            "assert-plus": "^0.2.0",
-            "jsprim": "^1.2.2",
-            "sshpk": "^1.7.0"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        },
-        "is-my-json-valid": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
-          "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
-          "requires": {
-            "generate-function": "^2.0.0",
-            "generate-object-property": "^1.1.0",
-            "jsonpointer": "^4.0.0",
-            "xtend": "^4.0.0"
-          }
-        },
-        "is-property": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-          "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
-        },
-        "is-typedarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-          "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "optional": true
-        },
-        "isexe": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-          "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-        },
-        "isstream": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-          "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
-        },
-        "js-yaml": {
-          "version": "3.10.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
-          "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          },
-          "dependencies": {
-            "esprima": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
-              "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
-            }
-          }
-        },
-        "jsbn": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-          "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-          "optional": true
-        },
-        "jshint": {
-          "version": "0.9.1",
-          "resolved": "https://registry.npmjs.org/jshint/-/jshint-0.9.1.tgz",
-          "integrity": "sha1-/zLsfwn4QAH3SY7q/WPJ5Puy3A4=",
-          "requires": {
-            "cli": "0.4.3",
-            "minimatch": "0.0.x"
-          },
-          "dependencies": {
-            "lru-cache": {
-              "version": "1.0.6",
-              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-1.0.6.tgz",
-              "integrity": "sha1-qlD5cEdCKsclQ72hd6nJ0BjZhFI="
-            },
-            "minimatch": {
-              "version": "0.0.5",
-              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.0.5.tgz",
-              "integrity": "sha1-lrtJC707poNrv6wRGt91MBsVhN4=",
-              "requires": {
-                "lru-cache": "~1.0.2"
-              }
-            }
-          }
-        },
-        "json-schema": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-          "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
-        },
-        "json-stringify-safe": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-          "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
-        },
-        "jsonpointer": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
-          "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk="
-        },
-        "jsprim": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-          "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-          "requires": {
-            "assert-plus": "1.0.0",
-            "extsprintf": "1.3.0",
-            "json-schema": "0.2.3",
-            "verror": "1.10.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "lcov-parse": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
-          "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM="
-        },
-        "log-driver": {
-          "version": "1.2.5",
-          "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz",
-          "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY="
-        },
-        "loggly": {
-          "version": "0.3.11",
-          "resolved": "https://registry.npmjs.org/loggly/-/loggly-0.3.11.tgz",
-          "integrity": "sha1-YsHsNDZ3LwlUWY8muVfSrSmGthE=",
-          "requires": {
-            "request": "2.9.x",
-            "timespan": "2.x.x"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.9.203",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.9.203.tgz",
-              "integrity": "sha1-bBcRpUB/uUoRQhlWPkQUW8v0cjo="
-            }
-          }
-        },
-        "lru-cache": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
-          "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
-        },
-        "mime": {
-          "version": "1.2.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.6.tgz",
-          "integrity": "sha1-sfhsdowCX6h7SAdfFwnyiuryA2U="
-        },
-        "mime-db": {
-          "version": "1.30.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
-          "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
-        },
-        "mime-types": {
-          "version": "2.1.17",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
-          "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
-          "requires": {
-            "mime-db": "~1.30.0"
-          }
-        },
-        "minimatch": {
-          "version": "0.2.14",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
-          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
-          "requires": {
-            "lru-cache": "2",
-            "sigmund": "~1.0.0"
-          }
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        },
-        "nano": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/nano/-/nano-3.3.0.tgz",
-          "integrity": "sha1-EamaCBW2jtHVrM9fVwM0Dwc3Qqw=",
-          "requires": {
-            "errs": "0.2.x",
-            "follow": "0.8.x",
-            "request": "2.9.x"
-          },
-          "dependencies": {
-            "request": {
-              "version": "2.9.203",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.9.203.tgz",
-              "integrity": "sha1-bBcRpUB/uUoRQhlWPkQUW8v0cjo="
-            }
-          }
-        },
-        "nodeunit": {
-          "version": "0.7.4",
-          "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.7.4.tgz",
-          "integrity": "sha1-yQje9/KZ++Zf96yIh4KVXEaq6fg=",
-          "requires": {
-            "tap": ">=0.2.3"
-          }
-        },
-        "nopt": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
-          "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
-          "requires": {
-            "abbrev": "1"
-          }
-        },
-        "nyc": {
-          "version": "11.4.1",
-          "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz",
-          "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==",
-          "requires": {
-            "archy": "^1.0.0",
-            "arrify": "^1.0.1",
-            "caching-transform": "^1.0.0",
-            "convert-source-map": "^1.3.0",
-            "debug-log": "^1.0.1",
-            "default-require-extensions": "^1.0.0",
-            "find-cache-dir": "^0.1.1",
-            "find-up": "^2.1.0",
-            "foreground-child": "^1.5.3",
-            "glob": "^7.0.6",
-            "istanbul-lib-coverage": "^1.1.1",
-            "istanbul-lib-hook": "^1.1.0",
-            "istanbul-lib-instrument": "^1.9.1",
-            "istanbul-lib-report": "^1.1.2",
-            "istanbul-lib-source-maps": "^1.2.2",
-            "istanbul-reports": "^1.1.3",
-            "md5-hex": "^1.2.0",
-            "merge-source-map": "^1.0.2",
-            "micromatch": "^2.3.11",
-            "mkdirp": "^0.5.0",
-            "resolve-from": "^2.0.0",
-            "rimraf": "^2.5.4",
-            "signal-exit": "^3.0.1",
-            "spawn-wrap": "^1.4.2",
-            "test-exclude": "^4.1.1",
-            "yargs": "^10.0.3",
-            "yargs-parser": "^8.0.0"
-          },
-          "dependencies": {
-            "align-text": {
-              "version": "0.1.4",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "kind-of": "^3.0.2",
-                "longest": "^1.0.1",
-                "repeat-string": "^1.5.2"
-              }
-            },
-            "amdefine": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "ansi-regex": {
-              "version": "2.1.1",
-              "bundled": true
-            },
-            "ansi-styles": {
-              "version": "2.2.1",
-              "bundled": true
-            },
-            "append-transform": {
-              "version": "0.4.0",
-              "bundled": true,
-              "requires": {
-                "default-require-extensions": "^1.0.0"
-              }
-            },
-            "archy": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "arr-diff": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "arr-flatten": "^1.0.1"
-              }
-            },
-            "arr-flatten": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "array-unique": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "arrify": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "async": {
-              "version": "1.5.2",
-              "bundled": true
-            },
-            "babel-code-frame": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "chalk": "^1.1.3",
-                "esutils": "^2.0.2",
-                "js-tokens": "^3.0.2"
-              }
-            },
-            "babel-generator": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-messages": "^6.23.0",
-                "babel-runtime": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "detect-indent": "^4.0.0",
-                "jsesc": "^1.3.0",
-                "lodash": "^4.17.4",
-                "source-map": "^0.5.6",
-                "trim-right": "^1.0.1"
-              }
-            },
-            "babel-messages": {
-              "version": "6.23.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.22.0"
-              }
-            },
-            "babel-runtime": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "core-js": "^2.4.0",
-                "regenerator-runtime": "^0.11.0"
-              }
-            },
-            "babel-template": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.26.0",
-                "babel-traverse": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "babylon": "^6.18.0",
-                "lodash": "^4.17.4"
-              }
-            },
-            "babel-traverse": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-code-frame": "^6.26.0",
-                "babel-messages": "^6.23.0",
-                "babel-runtime": "^6.26.0",
-                "babel-types": "^6.26.0",
-                "babylon": "^6.18.0",
-                "debug": "^2.6.8",
-                "globals": "^9.18.0",
-                "invariant": "^2.2.2",
-                "lodash": "^4.17.4"
-              }
-            },
-            "babel-types": {
-              "version": "6.26.0",
-              "bundled": true,
-              "requires": {
-                "babel-runtime": "^6.26.0",
-                "esutils": "^2.0.2",
-                "lodash": "^4.17.4",
-                "to-fast-properties": "^1.0.3"
-              }
-            },
-            "babylon": {
-              "version": "6.18.0",
-              "bundled": true
-            },
-            "balanced-match": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "brace-expansion": {
-              "version": "1.1.8",
-              "bundled": true,
-              "requires": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-              }
-            },
-            "braces": {
-              "version": "1.8.5",
-              "bundled": true,
-              "requires": {
-                "expand-range": "^1.8.1",
-                "preserve": "^0.2.0",
-                "repeat-element": "^1.1.2"
-              }
-            },
-            "builtin-modules": {
-              "version": "1.1.1",
-              "bundled": true
-            },
-            "caching-transform": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "md5-hex": "^1.2.0",
-                "mkdirp": "^0.5.1",
-                "write-file-atomic": "^1.1.4"
-              }
-            },
-            "camelcase": {
-              "version": "1.2.1",
-              "bundled": true,
-              "optional": true
-            },
-            "center-align": {
-              "version": "0.1.3",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "align-text": "^0.1.3",
-                "lazy-cache": "^1.0.3"
-              }
-            },
-            "chalk": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "ansi-styles": "^2.2.1",
-                "escape-string-regexp": "^1.0.2",
-                "has-ansi": "^2.0.0",
-                "strip-ansi": "^3.0.0",
-                "supports-color": "^2.0.0"
-              }
-            },
-            "cliui": {
-              "version": "2.1.0",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "center-align": "^0.1.1",
-                "right-align": "^0.1.1",
-                "wordwrap": "0.0.2"
-              },
-              "dependencies": {
-                "wordwrap": {
-                  "version": "0.0.2",
-                  "bundled": true,
-                  "optional": true
-                }
-              }
-            },
-            "code-point-at": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "commondir": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "concat-map": {
-              "version": "0.0.1",
-              "bundled": true
-            },
-            "convert-source-map": {
-              "version": "1.5.1",
-              "bundled": true
-            },
-            "core-js": {
-              "version": "2.5.3",
-              "bundled": true
-            },
-            "cross-spawn": {
-              "version": "4.0.2",
-              "bundled": true,
-              "requires": {
-                "lru-cache": "^4.0.1",
-                "which": "^1.2.9"
-              }
-            },
-            "debug": {
-              "version": "2.6.9",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            },
-            "debug-log": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "decamelize": {
-              "version": "1.2.0",
-              "bundled": true
-            },
-            "default-require-extensions": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "strip-bom": "^2.0.0"
-              }
-            },
-            "detect-indent": {
-              "version": "4.0.0",
-              "bundled": true,
-              "requires": {
-                "repeating": "^2.0.0"
-              }
-            },
-            "error-ex": {
-              "version": "1.3.1",
-              "bundled": true,
-              "requires": {
-                "is-arrayish": "^0.2.1"
-              }
-            },
-            "escape-string-regexp": {
-              "version": "1.0.5",
-              "bundled": true
-            },
-            "esutils": {
-              "version": "2.0.2",
-              "bundled": true
-            },
-            "execa": {
-              "version": "0.7.0",
-              "bundled": true,
-              "requires": {
-                "cross-spawn": "^5.0.1",
-                "get-stream": "^3.0.0",
-                "is-stream": "^1.1.0",
-                "npm-run-path": "^2.0.0",
-                "p-finally": "^1.0.0",
-                "signal-exit": "^3.0.0",
-                "strip-eof": "^1.0.0"
-              },
-              "dependencies": {
-                "cross-spawn": {
-                  "version": "5.1.0",
-                  "bundled": true,
-                  "requires": {
-                    "lru-cache": "^4.0.1",
-                    "shebang-command": "^1.2.0",
-                    "which": "^1.2.9"
-                  }
-                }
-              }
-            },
-            "expand-brackets": {
-              "version": "0.1.5",
-              "bundled": true,
-              "requires": {
-                "is-posix-bracket": "^0.1.0"
-              }
-            },
-            "expand-range": {
-              "version": "1.8.2",
-              "bundled": true,
-              "requires": {
-                "fill-range": "^2.1.0"
-              }
-            },
-            "extglob": {
-              "version": "0.3.2",
-              "bundled": true,
-              "requires": {
-                "is-extglob": "^1.0.0"
-              }
-            },
-            "filename-regex": {
-              "version": "2.0.1",
-              "bundled": true
-            },
-            "fill-range": {
-              "version": "2.2.3",
-              "bundled": true,
-              "requires": {
-                "is-number": "^2.1.0",
-                "isobject": "^2.0.0",
-                "randomatic": "^1.1.3",
-                "repeat-element": "^1.1.2",
-                "repeat-string": "^1.5.2"
-              }
-            },
-            "find-cache-dir": {
-              "version": "0.1.1",
-              "bundled": true,
-              "requires": {
-                "commondir": "^1.0.1",
-                "mkdirp": "^0.5.1",
-                "pkg-dir": "^1.0.0"
-              }
-            },
-            "find-up": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "locate-path": "^2.0.0"
-              }
-            },
-            "for-in": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "for-own": {
-              "version": "0.1.5",
-              "bundled": true,
-              "requires": {
-                "for-in": "^1.0.1"
-              }
-            },
-            "foreground-child": {
-              "version": "1.5.6",
-              "bundled": true,
-              "requires": {
-                "cross-spawn": "^4",
-                "signal-exit": "^3.0.0"
-              }
-            },
-            "fs.realpath": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "get-caller-file": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "get-stream": {
-              "version": "3.0.0",
-              "bundled": true
-            },
-            "glob": {
-              "version": "7.1.2",
-              "bundled": true,
-              "requires": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-              }
-            },
-            "glob-base": {
-              "version": "0.3.0",
-              "bundled": true,
-              "requires": {
-                "glob-parent": "^2.0.0",
-                "is-glob": "^2.0.0"
-              }
-            },
-            "glob-parent": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "is-glob": "^2.0.0"
-              }
-            },
-            "globals": {
-              "version": "9.18.0",
-              "bundled": true
-            },
-            "graceful-fs": {
-              "version": "4.1.11",
-              "bundled": true
-            },
-            "handlebars": {
-              "version": "4.0.11",
-              "bundled": true,
-              "requires": {
-                "async": "^1.4.0",
-                "optimist": "^0.6.1",
-                "source-map": "^0.4.4",
-                "uglify-js": "^2.6"
-              },
-              "dependencies": {
-                "source-map": {
-                  "version": "0.4.4",
-                  "bundled": true,
-                  "requires": {
-                    "amdefine": ">=0.0.4"
-                  }
-                }
-              }
-            },
-            "has-ansi": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            },
-            "has-flag": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "hosted-git-info": {
-              "version": "2.5.0",
-              "bundled": true
-            },
-            "imurmurhash": {
-              "version": "0.1.4",
-              "bundled": true
-            },
-            "inflight": {
-              "version": "1.0.6",
-              "bundled": true,
-              "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-              }
-            },
-            "inherits": {
-              "version": "2.0.3",
-              "bundled": true
-            },
-            "invariant": {
-              "version": "2.2.2",
-              "bundled": true,
-              "requires": {
-                "loose-envify": "^1.0.0"
-              }
-            },
-            "invert-kv": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "is-arrayish": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "is-buffer": {
-              "version": "1.1.6",
-              "bundled": true
-            },
-            "is-builtin-module": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "builtin-modules": "^1.0.0"
-              }
-            },
-            "is-dotfile": {
-              "version": "1.0.3",
-              "bundled": true
-            },
-            "is-equal-shallow": {
-              "version": "0.1.3",
-              "bundled": true,
-              "requires": {
-                "is-primitive": "^2.0.0"
-              }
-            },
-            "is-extendable": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "is-extglob": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "is-finite": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "is-fullwidth-code-point": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "is-glob": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "is-extglob": "^1.0.0"
-              }
-            },
-            "is-number": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^3.0.2"
-              }
-            },
-            "is-posix-bracket": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "is-primitive": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "is-stream": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "is-utf8": {
-              "version": "0.2.1",
-              "bundled": true
-            },
-            "isarray": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "isexe": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "isobject": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            },
-            "istanbul-lib-coverage": {
-              "version": "1.1.1",
-              "bundled": true
-            },
-            "istanbul-lib-hook": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "append-transform": "^0.4.0"
-              }
-            },
-            "istanbul-lib-instrument": {
-              "version": "1.9.1",
-              "bundled": true,
-              "requires": {
-                "babel-generator": "^6.18.0",
-                "babel-template": "^6.16.0",
-                "babel-traverse": "^6.18.0",
-                "babel-types": "^6.18.0",
-                "babylon": "^6.18.0",
-                "istanbul-lib-coverage": "^1.1.1",
-                "semver": "^5.3.0"
-              }
-            },
-            "istanbul-lib-report": {
-              "version": "1.1.2",
-              "bundled": true,
-              "requires": {
-                "istanbul-lib-coverage": "^1.1.1",
-                "mkdirp": "^0.5.1",
-                "path-parse": "^1.0.5",
-                "supports-color": "^3.1.2"
-              },
-              "dependencies": {
-                "supports-color": {
-                  "version": "3.2.3",
-                  "bundled": true,
-                  "requires": {
-                    "has-flag": "^1.0.0"
-                  }
-                }
-              }
-            },
-            "istanbul-lib-source-maps": {
-              "version": "1.2.2",
-              "bundled": true,
-              "requires": {
-                "debug": "^3.1.0",
-                "istanbul-lib-coverage": "^1.1.1",
-                "mkdirp": "^0.5.1",
-                "rimraf": "^2.6.1",
-                "source-map": "^0.5.3"
-              },
-              "dependencies": {
-                "debug": {
-                  "version": "3.1.0",
-                  "bundled": true,
-                  "requires": {
-                    "ms": "2.0.0"
-                  }
-                }
-              }
-            },
-            "istanbul-reports": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "handlebars": "^4.0.3"
-              }
-            },
-            "js-tokens": {
-              "version": "3.0.2",
-              "bundled": true
-            },
-            "jsesc": {
-              "version": "1.3.0",
-              "bundled": true
-            },
-            "kind-of": {
-              "version": "3.2.2",
-              "bundled": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            },
-            "lazy-cache": {
-              "version": "1.0.4",
-              "bundled": true,
-              "optional": true
-            },
-            "lcid": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "invert-kv": "^1.0.0"
-              }
-            },
-            "load-json-file": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.2",
-                "parse-json": "^2.2.0",
-                "pify": "^2.0.0",
-                "pinkie-promise": "^2.0.0",
-                "strip-bom": "^2.0.0"
-              }
-            },
-            "locate-path": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "p-locate": "^2.0.0",
-                "path-exists": "^3.0.0"
-              },
-              "dependencies": {
-                "path-exists": {
-                  "version": "3.0.0",
-                  "bundled": true
-                }
-              }
-            },
-            "lodash": {
-              "version": "4.17.4",
-              "bundled": true
-            },
-            "longest": {
-              "version": "1.0.1",
-              "bundled": true,
-              "optional": true
-            },
-            "loose-envify": {
-              "version": "1.3.1",
-              "bundled": true,
-              "requires": {
-                "js-tokens": "^3.0.0"
-              }
-            },
-            "lru-cache": {
-              "version": "4.1.1",
-              "bundled": true,
-              "requires": {
-                "pseudomap": "^1.0.2",
-                "yallist": "^2.1.2"
-              }
-            },
-            "md5-hex": {
-              "version": "1.3.0",
-              "bundled": true,
-              "requires": {
-                "md5-o-matic": "^0.1.1"
-              }
-            },
-            "md5-o-matic": {
-              "version": "0.1.1",
-              "bundled": true
-            },
-            "mem": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "mimic-fn": "^1.0.0"
-              }
-            },
-            "merge-source-map": {
-              "version": "1.0.4",
-              "bundled": true,
-              "requires": {
-                "source-map": "^0.5.6"
-              }
-            },
-            "micromatch": {
-              "version": "2.3.11",
-              "bundled": true,
-              "requires": {
-                "arr-diff": "^2.0.0",
-                "array-unique": "^0.2.1",
-                "braces": "^1.8.2",
-                "expand-brackets": "^0.1.4",
-                "extglob": "^0.3.1",
-                "filename-regex": "^2.0.0",
-                "is-extglob": "^1.0.0",
-                "is-glob": "^2.0.1",
-                "kind-of": "^3.0.2",
-                "normalize-path": "^2.0.1",
-                "object.omit": "^2.0.0",
-                "parse-glob": "^3.0.4",
-                "regex-cache": "^0.4.2"
-              }
-            },
-            "mimic-fn": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "minimatch": {
-              "version": "3.0.4",
-              "bundled": true,
-              "requires": {
-                "brace-expansion": "^1.1.7"
-              }
-            },
-            "minimist": {
-              "version": "0.0.8",
-              "bundled": true
-            },
-            "mkdirp": {
-              "version": "0.5.1",
-              "bundled": true,
-              "requires": {
-                "minimist": "0.0.8"
-              }
-            },
-            "ms": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "normalize-package-data": {
-              "version": "2.4.0",
-              "bundled": true,
-              "requires": {
-                "hosted-git-info": "^2.1.4",
-                "is-builtin-module": "^1.0.0",
-                "semver": "2 || 3 || 4 || 5",
-                "validate-npm-package-license": "^3.0.1"
-              }
-            },
-            "normalize-path": {
-              "version": "2.1.1",
-              "bundled": true,
-              "requires": {
-                "remove-trailing-separator": "^1.0.1"
-              }
-            },
-            "npm-run-path": {
-              "version": "2.0.2",
-              "bundled": true,
-              "requires": {
-                "path-key": "^2.0.0"
-              }
-            },
-            "number-is-nan": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "object-assign": {
-              "version": "4.1.1",
-              "bundled": true
-            },
-            "object.omit": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "for-own": "^0.1.4",
-                "is-extendable": "^0.1.1"
-              }
-            },
-            "once": {
-              "version": "1.4.0",
-              "bundled": true,
-              "requires": {
-                "wrappy": "1"
-              }
-            },
-            "optimist": {
-              "version": "0.6.1",
-              "bundled": true,
-              "requires": {
-                "minimist": "~0.0.1",
-                "wordwrap": "~0.0.2"
-              }
-            },
-            "os-homedir": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "os-locale": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "execa": "^0.7.0",
-                "lcid": "^1.0.0",
-                "mem": "^1.1.0"
-              }
-            },
-            "p-finally": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "p-limit": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "p-locate": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "p-limit": "^1.1.0"
-              }
-            },
-            "parse-glob": {
-              "version": "3.0.4",
-              "bundled": true,
-              "requires": {
-                "glob-base": "^0.3.0",
-                "is-dotfile": "^1.0.0",
-                "is-extglob": "^1.0.0",
-                "is-glob": "^2.0.0"
-              }
-            },
-            "parse-json": {
-              "version": "2.2.0",
-              "bundled": true,
-              "requires": {
-                "error-ex": "^1.2.0"
-              }
-            },
-            "path-exists": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "pinkie-promise": "^2.0.0"
-              }
-            },
-            "path-is-absolute": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "path-key": {
-              "version": "2.0.1",
-              "bundled": true
-            },
-            "path-parse": {
-              "version": "1.0.5",
-              "bundled": true
-            },
-            "path-type": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.2",
-                "pify": "^2.0.0",
-                "pinkie-promise": "^2.0.0"
-              }
-            },
-            "pify": {
-              "version": "2.3.0",
-              "bundled": true
-            },
-            "pinkie": {
-              "version": "2.0.4",
-              "bundled": true
-            },
-            "pinkie-promise": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "pinkie": "^2.0.0"
-              }
-            },
-            "pkg-dir": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "find-up": "^1.0.0"
-              },
-              "dependencies": {
-                "find-up": {
-                  "version": "1.1.2",
-                  "bundled": true,
-                  "requires": {
-                    "path-exists": "^2.0.0",
-                    "pinkie-promise": "^2.0.0"
-                  }
-                }
-              }
-            },
-            "preserve": {
-              "version": "0.2.0",
-              "bundled": true
-            },
-            "pseudomap": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "randomatic": {
-              "version": "1.1.7",
-              "bundled": true,
-              "requires": {
-                "is-number": "^3.0.0",
-                "kind-of": "^4.0.0"
-              },
-              "dependencies": {
-                "is-number": {
-                  "version": "3.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "kind-of": "^3.0.2"
-                  },
-                  "dependencies": {
-                    "kind-of": {
-                      "version": "3.2.2",
-                      "bundled": true,
-                      "requires": {
-                        "is-buffer": "^1.1.5"
-                      }
-                    }
-                  }
-                },
-                "kind-of": {
-                  "version": "4.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "is-buffer": "^1.1.5"
-                  }
-                }
-              }
-            },
-            "read-pkg": {
-              "version": "1.1.0",
-              "bundled": true,
-              "requires": {
-                "load-json-file": "^1.0.0",
-                "normalize-package-data": "^2.3.2",
-                "path-type": "^1.0.0"
-              }
-            },
-            "read-pkg-up": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "find-up": "^1.0.0",
-                "read-pkg": "^1.0.0"
-              },
-              "dependencies": {
-                "find-up": {
-                  "version": "1.1.2",
-                  "bundled": true,
-                  "requires": {
-                    "path-exists": "^2.0.0",
-                    "pinkie-promise": "^2.0.0"
-                  }
-                }
-              }
-            },
-            "regenerator-runtime": {
-              "version": "0.11.1",
-              "bundled": true
-            },
-            "regex-cache": {
-              "version": "0.4.4",
-              "bundled": true,
-              "requires": {
-                "is-equal-shallow": "^0.1.3"
-              }
-            },
-            "remove-trailing-separator": {
-              "version": "1.1.0",
-              "bundled": true
-            },
-            "repeat-element": {
-              "version": "1.1.2",
-              "bundled": true
-            },
-            "repeat-string": {
-              "version": "1.6.1",
-              "bundled": true
-            },
-            "repeating": {
-              "version": "2.0.1",
-              "bundled": true,
-              "requires": {
-                "is-finite": "^1.0.0"
-              }
-            },
-            "require-directory": {
-              "version": "2.1.1",
-              "bundled": true
-            },
-            "require-main-filename": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "resolve-from": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "right-align": {
-              "version": "0.1.3",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "align-text": "^0.1.1"
-              }
-            },
-            "rimraf": {
-              "version": "2.6.2",
-              "bundled": true,
-              "requires": {
-                "glob": "^7.0.5"
-              }
-            },
-            "semver": {
-              "version": "5.4.1",
-              "bundled": true
-            },
-            "set-blocking": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "shebang-command": {
-              "version": "1.2.0",
-              "bundled": true,
-              "requires": {
-                "shebang-regex": "^1.0.0"
-              }
-            },
-            "shebang-regex": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "signal-exit": {
-              "version": "3.0.2",
-              "bundled": true
-            },
-            "slide": {
-              "version": "1.1.6",
-              "bundled": true
-            },
-            "source-map": {
-              "version": "0.5.7",
-              "bundled": true
-            },
-            "spawn-wrap": {
-              "version": "1.4.2",
-              "bundled": true,
-              "requires": {
-                "foreground-child": "^1.5.6",
-                "mkdirp": "^0.5.0",
-                "os-homedir": "^1.0.1",
-                "rimraf": "^2.6.2",
-                "signal-exit": "^3.0.2",
-                "which": "^1.3.0"
-              }
-            },
-            "spdx-correct": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "spdx-license-ids": "^1.0.2"
-              }
-            },
-            "spdx-expression-parse": {
-              "version": "1.0.4",
-              "bundled": true
-            },
-            "spdx-license-ids": {
-              "version": "1.2.2",
-              "bundled": true
-            },
-            "string-width": {
-              "version": "2.1.1",
-              "bundled": true,
-              "requires": {
-                "is-fullwidth-code-point": "^2.0.0",
-                "strip-ansi": "^4.0.0"
-              },
-              "dependencies": {
-                "ansi-regex": {
-                  "version": "3.0.0",
-                  "bundled": true
-                },
-                "is-fullwidth-code-point": {
-                  "version": "2.0.0",
-                  "bundled": true
-                },
-                "strip-ansi": {
-                  "version": "4.0.0",
-                  "bundled": true,
-                  "requires": {
-                    "ansi-regex": "^3.0.0"
-                  }
-                }
-              }
-            },
-            "strip-ansi": {
-              "version": "3.0.1",
-              "bundled": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            },
-            "strip-bom": {
-              "version": "2.0.0",
-              "bundled": true,
-              "requires": {
-                "is-utf8": "^0.2.0"
-              }
-            },
-            "strip-eof": {
-              "version": "1.0.0",
-              "bundled": true
-            },
-            "supports-color": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "test-exclude": {
-              "version": "4.1.1",
-              "bundled": true,
-              "requires": {
-                "arrify": "^1.0.1",
-                "micromatch": "^2.3.11",
-                "object-assign": "^4.1.0",
-                "read-pkg-up": "^1.0.1",
-                "require-main-filename": "^1.0.1"
-              }
-            },
-            "to-fast-properties": {
-              "version": "1.0.3",
-              "bundled": true
-            },
-            "trim-right": {
-              "version": "1.0.1",
-              "bundled": true
-            },
-            "uglify-js": {
-              "version": "2.8.29",
-              "bundled": true,
-              "optional": true,
-              "requires": {
-                "source-map": "~0.5.1",
-                "uglify-to-browserify": "~1.0.0",
-                "yargs": "~3.10.0"
-              },
-              "dependencies": {
-                "yargs": {
-                  "version": "3.10.0",
-                  "bundled": true,
-                  "optional": true,
-                  "requires": {
-                    "camelcase": "^1.0.2",
-                    "cliui": "^2.1.0",
-                    "decamelize": "^1.0.0",
-                    "window-size": "0.1.0"
-                  }
-                }
-              }
-            },
-            "uglify-to-browserify": {
-              "version": "1.0.2",
-              "bundled": true,
-              "optional": true
-            },
-            "validate-npm-package-license": {
-              "version": "3.0.1",
-              "bundled": true,
-              "requires": {
-                "spdx-correct": "~1.0.0",
-                "spdx-expression-parse": "~1.0.0"
-              }
-            },
-            "which": {
-              "version": "1.3.0",
-              "bundled": true,
-              "requires": {
-                "isexe": "^2.0.0"
-              }
-            },
-            "which-module": {
-              "version": "2.0.0",
-              "bundled": true
-            },
-            "window-size": {
-              "version": "0.1.0",
-              "bundled": true,
-              "optional": true
-            },
-            "wordwrap": {
-              "version": "0.0.3",
-              "bundled": true
-            },
-            "wrap-ansi": {
-              "version": "2.1.0",
-              "bundled": true,
-              "requires": {
-                "string-width": "^1.0.1",
-                "strip-ansi": "^3.0.1"
-              },
-              "dependencies": {
-                "string-width": {
-                  "version": "1.0.2",
-                  "bundled": true,
-                  "requires": {
-                    "code-point-at": "^1.0.0",
-                    "is-fullwidth-code-point": "^1.0.0",
-                    "strip-ansi": "^3.0.0"
-                  }
-                }
-              }
-            },
-            "wrappy": {
-              "version": "1.0.2",
-              "bundled": true
-            },
-            "write-file-atomic": {
-              "version": "1.3.4",
-              "bundled": true,
-              "requires": {
-                "graceful-fs": "^4.1.11",
-                "imurmurhash": "^0.1.4",
-                "slide": "^1.1.5"
-              }
-            },
-            "y18n": {
-              "version": "3.2.1",
-              "bundled": true
-            },
-            "yallist": {
-              "version": "2.1.2",
-              "bundled": true
-            },
-            "yargs": {
-              "version": "10.0.3",
-              "bundled": true,
-              "requires": {
-                "cliui": "^3.2.0",
-                "decamelize": "^1.1.1",
-                "find-up": "^2.1.0",
-                "get-caller-file": "^1.0.1",
-                "os-locale": "^2.0.0",
-                "require-directory": "^2.1.1",
-                "require-main-filename": "^1.0.1",
-                "set-blocking": "^2.0.0",
-                "string-width": "^2.0.0",
-                "which-module": "^2.0.0",
-                "y18n": "^3.2.1",
-                "yargs-parser": "^8.0.0"
-              },
-              "dependencies": {
-                "cliui": {
-                  "version": "3.2.0",
-                  "bundled": true,
-                  "requires": {
-                    "string-width": "^1.0.1",
-                    "strip-ansi": "^3.0.1",
-                    "wrap-ansi": "^2.0.0"
-                  },
-                  "dependencies": {
-                    "string-width": {
-                      "version": "1.0.2",
-                      "bundled": true,
-                      "requires": {
-                        "code-point-at": "^1.0.0",
-                        "is-fullwidth-code-point": "^1.0.0",
-                        "strip-ansi": "^3.0.0"
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "yargs-parser": {
-              "version": "8.0.0",
-              "bundled": true,
-              "requires": {
-                "camelcase": "^4.1.0"
-              },
-              "dependencies": {
-                "camelcase": {
-                  "version": "4.1.0",
-                  "bundled": true
-                }
-              }
-            }
-          }
-        },
-        "oauth-sign": {
-          "version": "0.8.2",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-          "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
-        },
-        "once": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "opener": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
-          "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg="
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-        },
-        "own-or": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
-          "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw="
-        },
-        "own-or-env": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.0.tgz",
-          "integrity": "sha1-nvkg/IHi5jz1nUEQElg2jPT8pPs="
-        },
-        "package": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz",
-          "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw="
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-        },
-        "pause": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
-          "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
-        },
-        "pinkie": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-          "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
-        },
-        "pinkie-promise": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-          "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-          "requires": {
-            "pinkie": "^2.0.0"
-          }
-        },
-        "pkginfo": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
-          "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8="
-        },
-        "process-nextick-args": {
-          "version": "1.0.7",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
-          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
-          "optional": true
-        },
-        "prompt": {
-          "version": "0.1.12",
-          "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.1.12.tgz",
-          "integrity": "sha1-0xFOT7mFrGbqo1WG3Lez+zsnv8Y=",
-          "requires": {
-            "async": "0.1.x",
-            "colors": "0.x.x",
-            "pkginfo": "0.x.x",
-            "winston": "0.5.x"
-          }
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-          "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
-        },
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        },
-        "qs": {
-          "version": "0.5.1",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.1.tgz",
-          "integrity": "sha1-n2v12axsdjhOldNtFbSJgOXkrdA="
-        },
-        "range-parser": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz",
-          "integrity": "sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs="
-        },
-        "readable-stream": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
-          "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~1.0.6",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.0.3",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-          "requires": {
-            "glob": "^7.0.5"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-          "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
-          "optional": true
-        },
-        "semver": {
-          "version": "1.0.14",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz",
-          "integrity": "sha1-ysXi1Vpvv5WMsiCuhEBFBxx49nY="
-        },
-        "send": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.0.4.tgz",
-          "integrity": "sha1-LUz3mxifzQlhDhMCUQrJsOTd6AA=",
-          "requires": {
-            "debug": "*",
-            "fresh": "0.1.0",
-            "mime": "1.2.6",
-            "range-parser": "0.0.4"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.1.0",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-              "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "sigmund": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
-          "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
-        },
-        "sntp": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
-          "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
-          "requires": {
-            "hoek": "2.x.x"
-          }
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        },
-        "source-map-support": {
-          "version": "0.4.18",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
-          "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
-          "requires": {
-            "source-map": "^0.5.6"
-          }
-        },
-        "sprintf-js": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-          "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-        },
-        "sshpk": {
-          "version": "1.13.1",
-          "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
-          "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
-          "requires": {
-            "asn1": "~0.2.3",
-            "assert-plus": "^1.0.0",
-            "bcrypt-pbkdf": "^1.0.0",
-            "dashdash": "^1.12.0",
-            "ecc-jsbn": "~0.1.1",
-            "getpass": "^0.1.1",
-            "jsbn": "~0.1.0",
-            "tweetnacl": "~0.14.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "stack-trace": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
-          "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
-        },
-        "stack-utils": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz",
-          "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA="
-        },
-        "string_decoder": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-          "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "stringstream": {
-          "version": "0.0.5",
-          "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
-          "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        },
-        "tap": {
-          "version": "11.0.1",
-          "resolved": "https://registry.npmjs.org/tap/-/tap-11.0.1.tgz",
-          "integrity": "sha512-YfrPp7FFxASC4tK4DEAKnnTxyg+J7T8kh8NiOmICNhiGvSojPAV34Ir4DDElFvnIiDEMzDP7233lw3WacFvIFQ==",
-          "requires": {
-            "bind-obj-methods": "^1.0.0",
-            "bluebird": "^3.5.1",
-            "clean-yaml-object": "^0.1.0",
-            "color-support": "^1.1.0",
-            "coveralls": "^2.13.3",
-            "foreground-child": "^1.3.3",
-            "fs-exists-cached": "^1.0.0",
-            "function-loop": "^1.0.1",
-            "glob": "^7.0.0",
-            "isexe": "^2.0.0",
-            "js-yaml": "^3.10.0",
-            "minipass": "^2.2.1",
-            "mkdirp": "^0.5.1",
-            "nyc": "^11.3.0",
-            "opener": "^1.4.1",
-            "os-homedir": "^1.0.2",
-            "own-or": "^1.0.0",
-            "own-or-env": "^1.0.0",
-            "rimraf": "^2.6.2",
-            "signal-exit": "^3.0.0",
-            "source-map-support": "^0.4.18",
-            "stack-utils": "^1.0.0",
-            "tap-mocha-reporter": "^3.0.6",
-            "tap-parser": "^7.0.0",
-            "tmatch": "^3.1.0",
-            "trivial-deferred": "^1.0.1",
-            "tsame": "^1.1.2",
-            "write-file-atomic": "^2.3.0",
-            "yapool": "^1.0.0"
-          }
-        },
-        "tap-mocha-reporter": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz",
-          "integrity": "sha512-UImgw3etckDQCoqZIAIKcQDt0w1JLVs3v0yxLlmwvGLZl6MGFxF7JME5PElXjAoDklVDU42P3vVu5jgr37P4Yg==",
-          "requires": {
-            "color-support": "^1.1.0",
-            "debug": "^2.1.3",
-            "diff": "^1.3.2",
-            "escape-string-regexp": "^1.0.3",
-            "glob": "^7.0.5",
-            "js-yaml": "^3.3.1",
-            "readable-stream": "^2.1.5",
-            "tap-parser": "^5.1.0",
-            "unicode-length": "^1.0.0"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "2.6.9",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-              "requires": {
-                "ms": "2.0.0"
-              }
-            },
-            "tap-parser": {
-              "version": "5.4.0",
-              "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz",
-              "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==",
-              "requires": {
-                "events-to-array": "^1.0.1",
-                "js-yaml": "^3.2.7",
-                "readable-stream": "^2"
-              }
-            }
-          }
-        },
-        "tap-parser": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz",
-          "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==",
-          "requires": {
-            "events-to-array": "^1.0.1",
-            "js-yaml": "^3.2.7",
-            "minipass": "^2.2.0"
-          }
-        },
-        "temporary": {
-          "version": "0.0.8",
-          "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz",
-          "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=",
-          "requires": {
-            "package": ">= 1.0.0 < 1.2.0"
-          }
-        },
-        "timespan": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
-          "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk="
-        },
-        "tmatch": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-3.1.0.tgz",
-          "integrity": "sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ=="
-        },
-        "tough-cookie": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
-          "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
-          "requires": {
-            "punycode": "^1.4.1"
-          }
-        },
-        "trivial-deferred": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
-          "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM="
-        },
-        "tsame": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/tsame/-/tsame-1.1.2.tgz",
-          "integrity": "sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw=="
-        },
-        "tunnel-agent": {
-          "version": "0.4.3",
-          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
-          "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us="
-        },
-        "tweetnacl": {
-          "version": "0.14.5",
-          "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-          "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-          "optional": true
-        },
-        "uglify-js": {
-          "version": "1.3.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz",
-          "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0="
-        },
-        "underscore": {
-          "version": "1.2.4",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz",
-          "integrity": "sha1-6NpiQaoG9k3yRzuyWQuMF8hMPH4="
-        },
-        "underscore.string": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.1.1.tgz",
-          "integrity": "sha1-RYOXeZEUubZ/YDC7UnsK+uaJwGE="
-        },
-        "unicode-length": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz",
-          "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=",
-          "requires": {
-            "punycode": "^1.3.2",
-            "strip-ansi": "^3.0.1"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "optional": true
-        },
-        "verror": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-          "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-          "requires": {
-            "assert-plus": "^1.0.0",
-            "core-util-is": "1.0.2",
-            "extsprintf": "^1.2.0"
-          },
-          "dependencies": {
-            "assert-plus": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-              "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
-            }
-          }
-        },
-        "watch": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npmjs.org/watch/-/watch-0.8.0.tgz",
-          "integrity": "sha1-G7DupT3v5uYh6cjGPANYAH7L28w="
-        },
-        "which": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-          "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "winston": {
-          "version": "0.5.11",
-          "resolved": "https://registry.npmjs.org/winston/-/winston-0.5.11.tgz",
-          "integrity": "sha1-nYTq2YGkl6kt33ZhYTer72YcQU8=",
-          "requires": {
-            "async": "0.1.x",
-            "colors": "0.x.x",
-            "eyes": "0.1.x",
-            "loggly": "0.3.x >=0.3.7",
-            "pkginfo": "0.2.x",
-            "stack-trace": "0.0.x"
-          },
-          "dependencies": {
-            "pkginfo": {
-              "version": "0.2.3",
-              "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz",
-              "integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg="
-            }
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        },
-        "xtend": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
-          "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
-        },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
-        },
-        "yapool": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz",
-          "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o="
-        }
-      }
-    },
-    "grunt-exec": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.1.tgz",
-      "integrity": "sha1-5dU6OcXzRpATBe3uXIfbDyr5mcQ="
-    },
-    "grunt-known-options": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
-      "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ=="
-    },
-    "grunt-legacy-log": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
-      "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
-      "requires": {
-        "colors": "~1.1.2",
-        "grunt-legacy-log-utils": "~2.0.0",
-        "hooker": "~0.2.3",
-        "lodash": "~4.17.5"
-      }
-    },
-    "grunt-legacy-log-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
-      "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
-      "requires": {
-        "chalk": "~2.4.1",
-        "lodash": "~4.17.10"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        }
-      }
-    },
-    "grunt-legacy-util": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
-      "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
-      "requires": {
-        "async": "~1.5.2",
-        "exit": "~0.1.1",
-        "getobject": "~0.1.0",
-        "hooker": "~0.2.3",
-        "lodash": "~4.17.10",
-        "underscore.string": "~3.3.4",
-        "which": "~1.3.0"
-      },
-      "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-        }
-      }
-    },
-    "grunt-shell": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz",
-      "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=",
-      "requires": {
-        "chalk": "^1.0.0",
-        "npm-run-path": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "npm-run-path": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-          "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-          "requires": {
-            "path-key": "^2.0.0"
-          }
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
-        }
-      }
-    },
-    "handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
-    },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
-    },
-    "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-      "requires": {
-        "ajv": "^6.5.5",
-        "har-schema": "^2.0.0"
-      }
-    },
-    "has": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
-      "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
-      "requires": {
-        "function-bind": "^1.0.2"
-      }
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
-    },
-    "has-symbols": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "hash-base": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
-      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
-      "requires": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
-      }
-    },
-    "he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
-    },
-    "hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-      "requires": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "requires": {
-        "react-is": "^16.7.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "homedir-polyfill": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
-      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
-      "requires": {
-        "parse-passwd": "^1.0.0"
-      }
-    },
-    "hooker": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
-      "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk="
-    },
-    "hosted-git-info": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
-      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
-      "dev": true
-    },
-    "hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-      "requires": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "html-element-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz",
-      "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==",
-      "dev": true,
-      "requires": {
-        "array-filter": "^1.0.0"
-      }
-    },
-    "html-encoding-sniffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
-      "dev": true,
-      "requires": {
-        "whatwg-encoding": "^1.0.1"
-      }
-    },
-    "html-entities": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
-      "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
-    },
-    "html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "html-minifier": {
-      "version": "3.5.21",
-      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
-      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
-      "requires": {
-        "camel-case": "3.0.x",
-        "clean-css": "4.2.x",
-        "commander": "2.17.x",
-        "he": "1.2.x",
-        "param-case": "2.1.x",
-        "relateurl": "0.2.x",
-        "uglify-js": "3.4.x"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.17.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
-          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "uglify-js": {
-          "version": "3.4.10",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
-          "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
-          "requires": {
-            "commander": "~2.19.0",
-            "source-map": "~0.6.1"
-          },
-          "dependencies": {
-            "commander": {
-              "version": "2.19.0",
-              "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
-              "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
-            }
-          }
-        }
-      }
-    },
-    "html-webpack-plugin": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
-      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
-      "requires": {
-        "html-minifier": "^3.2.3",
-        "loader-utils": "^0.2.16",
-        "lodash": "^4.17.3",
-        "pretty-error": "^2.0.2",
-        "tapable": "^1.0.0",
-        "toposort": "^1.0.0",
-        "util.promisify": "1.0.0"
-      },
-      "dependencies": {
-        "loader-utils": {
-          "version": "0.2.17",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
-          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0",
-            "object-assign": "^4.0.1"
-          }
-        },
-        "tapable": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-          "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
-        }
-      }
-    },
-    "htmlparser2": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
-      "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
-      "requires": {
-        "domelementtype": "^1.3.0",
-        "domhandler": "^2.3.0",
-        "domutils": "^1.5.1",
-        "entities": "^1.1.1",
-        "inherits": "^2.0.1",
-        "readable-stream": "^3.0.6"
-      },
-      "dependencies": {
-        "domelementtype": {
-          "version": "1.3.0",
-          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
-          "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
-        },
-        "readable-stream": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
-          "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
-    },
-    "http-errors": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
-      "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
-      "requires": {
-        "depd": "1.1.1",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.0.3",
-        "statuses": ">= 1.3.1 < 2"
-      }
-    },
-    "http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-      "requires": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "http-proxy-agent": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
-      "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "4",
-        "debug": "3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "http-proxy-middleware": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
-      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
-      "requires": {
-        "http-proxy": "^1.17.0",
-        "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
-        "micromatch": "^3.1.10"
-      }
-    },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      }
-    },
-    "https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
-    },
-    "https-proxy-agent": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz",
-      "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.3.0",
-        "debug": "^3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "icss-utils": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
-      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
-      "requires": {
-        "postcss": "^7.0.14"
-      }
-    },
-    "ieee754": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
-      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
-    },
-    "iferr": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
-      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
-    },
-    "ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
-    },
-    "image-size": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
-      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
-      "optional": true
-    },
-    "immediate": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
-    },
-    "import-fresh": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-      "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
-      "requires": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      }
-    },
-    "import-local": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
-      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
-      "requires": {
-        "pkg-dir": "^3.0.0",
-        "resolve-cwd": "^2.0.0"
-      }
-    },
-    "imports-loader": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz",
-      "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==",
-      "requires": {
-        "loader-utils": "^1.0.2",
-        "source-map": "^0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
-    },
-    "indexes-of": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
-    },
-    "infer-owner": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
-      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-    },
-    "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
-    },
-    "inquirer": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
-      "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^3.0.0",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^2.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^3.0.0",
-        "lodash": "^4.17.15",
-        "mute-stream": "0.0.8",
-        "run-async": "^2.4.0",
-        "rxjs": "^6.5.3",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "through": "^2.3.6"
-      },
-      "dependencies": {
-        "ansi-escapes": {
-          "version": "4.3.1",
-          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
-          "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
-          "requires": {
-            "type-fest": "^0.11.0"
-          }
-        },
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
-        },
-        "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
-          "requires": {
-            "@types/color-name": "^1.1.1",
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-        },
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
-        },
-        "is-fullwidth-code-point": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
-        },
-        "rxjs": {
-          "version": "6.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
-          "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "string-width": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
-          "requires": {
-            "emoji-regex": "^8.0.0",
-            "is-fullwidth-code-point": "^3.0.0",
-            "strip-ansi": "^6.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "type-fest": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
-          "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
-        }
-      }
-    },
-    "internal-ip": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
-      "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
-      "requires": {
-        "default-gateway": "^4.2.0",
-        "ipaddr.js": "^1.9.0"
-      }
-    },
-    "internal-slot": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
-      "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
-      "requires": {
-        "es-abstract": "^1.17.0-next.1",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.2"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
-      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
-    },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "requires": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
-    },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
-      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
-    },
-    "ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
-    },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
-      "requires": {
-        "is-relative": "^1.0.0",
-        "is-windows": "^1.0.1"
-      }
-    },
-    "is-absolute-url": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
-      "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="
-    },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-arguments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
-      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "requires": {
-        "binary-extensions": "^1.0.0"
-      }
-    },
-    "is-boolean-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz",
-      "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==",
-      "dev": true
-    },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
-    },
-    "is-builtin-module": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
-      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
-      "dev": true,
-      "requires": {
-        "builtin-modules": "^1.0.0"
-      }
-    },
-    "is-callable": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
-      "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI="
-    },
-    "is-ci": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-      "dev": true,
-      "requires": {
-        "ci-info": "^2.0.0"
-      }
-    },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-date-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
-      "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
-        }
-      }
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
-    },
-    "is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
-    },
-    "is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
-      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-interactive": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-      "dev": true
-    },
-    "is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "is-number-object": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
-      "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
-      "dev": true
-    },
-    "is-path-cwd": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
-      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="
-    },
-    "is-path-in-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
-      "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
-      "requires": {
-        "is-path-inside": "^2.1.0"
-      }
-    },
-    "is-path-inside": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
-      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
-      "requires": {
-        "path-is-inside": "^1.0.2"
-      }
-    },
-    "is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
-    },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "is-promise": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
-      "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
-    },
-    "is-regex": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
-      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-      "requires": {
-        "has": "^1.0.1"
-      }
-    },
-    "is-relative": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-      "requires": {
-        "is-unc-path": "^1.0.0"
-      }
-    },
-    "is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
-    },
-    "is-string": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
-      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
-    },
-    "is-subset": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
-      "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
-      "dev": true
-    },
-    "is-symbol": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
-      "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="
-    },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
-    },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
-      "requires": {
-        "unc-path-regex": "^0.1.2"
-      }
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
-    },
-    "is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
-    },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
-    },
-    "istanbul-lib-coverage": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
-      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
-      "dev": true
-    },
-    "istanbul-lib-instrument": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
-      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
-      "dev": true,
-      "requires": {
-        "@babel/generator": "^7.4.0",
-        "@babel/parser": "^7.4.3",
-        "@babel/template": "^7.4.0",
-        "@babel/traverse": "^7.4.3",
-        "@babel/types": "^7.4.0",
-        "istanbul-lib-coverage": "^2.0.5",
-        "semver": "^6.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-lib-report": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
-      "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
-      "dev": true,
-      "requires": {
-        "istanbul-lib-coverage": "^2.0.5",
-        "make-dir": "^2.1.0",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "istanbul-lib-source-maps": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
-      "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^2.0.5",
-        "make-dir": "^2.1.0",
-        "rimraf": "^2.6.3",
-        "source-map": "^0.6.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
-          "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-reports": {
-      "version": "2.2.7",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz",
-      "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==",
-      "dev": true,
-      "requires": {
-        "html-escaper": "^2.0.0"
-      }
-    },
-    "jest": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
-      "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==",
-      "dev": true,
-      "requires": {
-        "import-local": "^2.0.0",
-        "jest-cli": "^24.9.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "get-caller-file": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-          "dev": true
-        },
-        "jest-cli": {
-          "version": "24.9.0",
-          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
-          "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
-          "dev": true,
-          "requires": {
-            "@jest/core": "^24.9.0",
-            "@jest/test-result": "^24.9.0",
-            "@jest/types": "^24.9.0",
-            "chalk": "^2.0.1",
-            "exit": "^0.1.2",
-            "import-local": "^2.0.0",
-            "is-ci": "^2.0.0",
-            "jest-config": "^24.9.0",
-            "jest-util": "^24.9.0",
-            "jest-validate": "^24.9.0",
-            "prompts": "^2.0.1",
-            "realpath-native": "^1.1.0",
-            "yargs": "^13.3.0"
-          }
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "13.3.2",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^5.0.0",
-            "find-up": "^3.0.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^3.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^13.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "13.1.2",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
-      }
-    },
-    "jest-changed-files": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
-      "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "execa": "^1.0.0",
-        "throat": "^4.0.0"
-      }
-    },
-    "jest-config": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
-      "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "babel-jest": "^24.9.0",
-        "chalk": "^2.0.1",
-        "glob": "^7.1.1",
-        "jest-environment-jsdom": "^24.9.0",
-        "jest-environment-node": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "jest-jasmine2": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "pretty-format": "^24.9.0",
-        "realpath-native": "^1.1.0"
-      }
-    },
-    "jest-diff": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
-      "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "diff-sequences": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-docblock": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
-      "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
-      "dev": true,
-      "requires": {
-        "detect-newline": "^2.1.0"
-      }
-    },
-    "jest-each": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
-      "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "jest-get-type": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-environment-jsdom": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
-      "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jsdom": "^11.5.1"
-      }
-    },
-    "jest-environment-node": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
-      "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-util": "^24.9.0"
-      }
-    },
-    "jest-get-type": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
-      "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==",
-      "dev": true
-    },
-    "jest-haste-map": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
-      "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "anymatch": "^2.0.0",
-        "fb-watchman": "^2.0.0",
-        "fsevents": "^1.2.7",
-        "graceful-fs": "^4.1.15",
-        "invariant": "^2.2.4",
-        "jest-serializer": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.9.0",
-        "micromatch": "^3.1.10",
-        "sane": "^4.0.3",
-        "walker": "^1.0.7"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "invariant": {
-          "version": "2.2.4",
-          "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-          "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-          "dev": true,
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "jest-jasmine2": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
-      "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
-      "dev": true,
-      "requires": {
-        "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "co": "^4.6.0",
-        "expect": "^24.9.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "pretty-format": "^24.9.0",
-        "throat": "^4.0.0"
-      }
-    },
-    "jest-leak-detector": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
-      "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
-      "dev": true,
-      "requires": {
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-matcher-utils": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
-      "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "jest-diff": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-message-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
-      "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/stack-utils": "^1.0.1",
-        "chalk": "^2.0.1",
-        "micromatch": "^3.1.10",
-        "slash": "^2.0.0",
-        "stack-utils": "^1.0.1"
-      }
-    },
-    "jest-mock": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
-      "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0"
-      }
-    },
-    "jest-pnp-resolver": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
-      "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
-      "dev": true
-    },
-    "jest-regex-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
-      "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
-      "dev": true
-    },
-    "jest-resolve": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
-      "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "browser-resolve": "^1.11.3",
-        "chalk": "^2.0.1",
-        "jest-pnp-resolver": "^1.2.1",
-        "realpath-native": "^1.1.0"
-      }
-    },
-    "jest-resolve-dependencies": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
-      "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-snapshot": "^24.9.0"
-      }
-    },
-    "jest-runner": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
-      "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/environment": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.4.2",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.1.15",
-        "jest-config": "^24.9.0",
-        "jest-docblock": "^24.3.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-jasmine2": "^24.9.0",
-        "jest-leak-detector": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "jest-runtime": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-worker": "^24.6.0",
-        "source-map-support": "^0.5.6",
-        "throat": "^4.0.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        }
-      }
-    },
-    "jest-runtime": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
-      "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.7.1",
-        "@jest/environment": "^24.9.0",
-        "@jest/source-map": "^24.3.0",
-        "@jest/transform": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/yargs": "^13.0.0",
-        "chalk": "^2.0.1",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.1.15",
-        "jest-config": "^24.9.0",
-        "jest-haste-map": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-mock": "^24.9.0",
-        "jest-regex-util": "^24.3.0",
-        "jest-resolve": "^24.9.0",
-        "jest-snapshot": "^24.9.0",
-        "jest-util": "^24.9.0",
-        "jest-validate": "^24.9.0",
-        "realpath-native": "^1.1.0",
-        "slash": "^2.0.0",
-        "strip-bom": "^3.0.0",
-        "yargs": "^13.3.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "get-caller-file": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-          "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-          "dev": true
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "13.3.2",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-          "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^5.0.0",
-            "find-up": "^3.0.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^3.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^13.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "13.1.2",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-          "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
-      }
-    },
-    "jest-serializer": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
-      "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
-      "dev": true
-    },
-    "jest-snapshot": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
-      "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0",
-        "@jest/types": "^24.9.0",
-        "chalk": "^2.0.1",
-        "expect": "^24.9.0",
-        "jest-diff": "^24.9.0",
-        "jest-get-type": "^24.9.0",
-        "jest-matcher-utils": "^24.9.0",
-        "jest-message-util": "^24.9.0",
-        "jest-resolve": "^24.9.0",
-        "mkdirp": "^0.5.1",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^24.9.0",
-        "semver": "^6.2.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        }
-      }
-    },
-    "jest-util": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
-      "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^24.9.0",
-        "@jest/fake-timers": "^24.9.0",
-        "@jest/source-map": "^24.9.0",
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "callsites": "^3.0.0",
-        "chalk": "^2.0.1",
-        "graceful-fs": "^4.1.15",
-        "is-ci": "^2.0.0",
-        "mkdirp": "^0.5.1",
-        "slash": "^2.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.3",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-          "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
-      }
-    },
-    "jest-validate": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
-      "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "camelcase": "^5.3.1",
-        "chalk": "^2.0.1",
-        "jest-get-type": "^24.9.0",
-        "leven": "^3.1.0",
-        "pretty-format": "^24.9.0"
-      }
-    },
-    "jest-watcher": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
-      "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^24.9.0",
-        "@jest/types": "^24.9.0",
-        "@types/yargs": "^13.0.0",
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.1",
-        "jest-util": "^24.9.0",
-        "string-length": "^2.0.0"
-      }
-    },
-    "jest-worker": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
-      "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
-      "dev": true,
-      "requires": {
-        "merge-stream": "^2.0.0",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "jquery": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
-      "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
-    },
-    "jquery-param-fn": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/jquery-param-fn/-/jquery-param-fn-1.0.3.tgz",
-      "integrity": "sha1-1YwyX2dBedHkgwV9Qbu4TUqs0F0="
-    },
-    "js-tokens": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-    },
-    "js-yaml": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
-      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
-      "requires": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      }
-    },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-      "optional": true
-    },
-    "jsdom": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
-      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "acorn": "^5.5.3",
-        "acorn-globals": "^4.1.0",
-        "array-equal": "^1.0.0",
-        "cssom": ">= 0.3.2 < 0.4.0",
-        "cssstyle": "^1.0.0",
-        "data-urls": "^1.0.0",
-        "domexception": "^1.0.1",
-        "escodegen": "^1.9.1",
-        "html-encoding-sniffer": "^1.0.2",
-        "left-pad": "^1.3.0",
-        "nwsapi": "^2.0.7",
-        "parse5": "4.0.0",
-        "pn": "^1.1.0",
-        "request": "^2.87.0",
-        "request-promise-native": "^1.0.5",
-        "sax": "^1.2.4",
-        "symbol-tree": "^3.2.2",
-        "tough-cookie": "^2.3.4",
-        "w3c-hr-time": "^1.0.1",
-        "webidl-conversions": "^4.0.2",
-        "whatwg-encoding": "^1.0.3",
-        "whatwg-mimetype": "^2.1.0",
-        "whatwg-url": "^6.4.1",
-        "ws": "^5.2.0",
-        "xml-name-validator": "^3.0.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "5.7.4",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
-          "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
-          "dev": true
-        },
-        "parse5": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
-          "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
-          "dev": true
-        }
-      }
-    },
-    "jsesc": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
-      "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4="
-    },
-    "json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
-    },
-    "json-schema": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
-    },
-    "json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-    },
-    "json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
-    },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
-    },
-    "json3": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
-      "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA=="
-    },
-    "json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
-    },
-    "jsondiffpatch": {
-      "version": "0.3.11",
-      "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.3.11.tgz",
-      "integrity": "sha512-Xi3Iygdt/BGhml6bdUFhgDki1TgOsp3hG3iiH3KtzP+CahtGcdPfKRLlnZbSw+3b1umZkhmKrqXUgUcKenyhtA==",
-      "requires": {
-        "chalk": "^2.3.0",
-        "diff-match-patch": "^1.0.0"
-      }
-    },
-    "jsprim": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
-      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.2.3",
-        "verror": "1.10.0"
-      }
-    },
-    "jsx-ast-utils": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
-      "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
-      "requires": {
-        "array-includes": "^3.1.1",
-        "object.assign": "^4.1.0"
-      }
-    },
-    "just-extend": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz",
-      "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==",
-      "dev": true
-    },
-    "killable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
-      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
-    },
-    "kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-      "requires": {
-        "is-buffer": "^1.1.5"
-      }
-    },
-    "kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true
-    },
-    "left-pad": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
-      "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
-      "dev": true
-    },
-    "less": {
-      "version": "3.11.3",
-      "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz",
-      "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==",
-      "requires": {
-        "clone": "^2.1.2",
-        "errno": "^0.1.1",
-        "graceful-fs": "^4.1.2",
-        "image-size": "~0.5.0",
-        "make-dir": "^2.1.0",
-        "mime": "^1.4.1",
-        "promise": "^7.1.1",
-        "request": "^2.83.0",
-        "source-map": "~0.6.0",
-        "tslib": "^1.10.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "optional": true
-        }
-      }
-    },
-    "less-loader": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz",
-      "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==",
-      "requires": {
-        "clone": "^2.1.1",
-        "loader-utils": "^1.1.0",
-        "pify": "^4.0.1"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        }
-      }
-    },
-    "leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
-    },
-    "levenary": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
-      "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
-      "requires": {
-        "leven": "^3.1.0"
-      }
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
-    "liftoff": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
-      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
-      "requires": {
-        "extend": "^3.0.0",
-        "findup-sync": "^2.0.0",
-        "fined": "^1.0.1",
-        "flagged-respawn": "^1.0.0",
-        "is-plain-object": "^2.0.4",
-        "object.map": "^1.0.0",
-        "rechoir": "^0.6.2",
-        "resolve": "^1.1.7"
-      },
-      "dependencies": {
-        "findup-sync": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
-          "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
-          "requires": {
-            "detect-file": "^1.0.0",
-            "is-glob": "^3.1.0",
-            "micromatch": "^3.0.4",
-            "resolve-dir": "^1.0.1"
-          }
-        },
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "dependencies": {
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
-    },
-    "loader-fs-cache": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
-      "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
-      "requires": {
-        "find-cache-dir": "^0.1.1",
-        "mkdirp": "^0.5.1"
-      },
-      "dependencies": {
-        "find-cache-dir": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
-          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
-          "requires": {
-            "commondir": "^1.0.1",
-            "mkdirp": "^0.5.1",
-            "pkg-dir": "^1.0.0"
-          }
-        },
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-          "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pkg-dir": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
-          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
-          "requires": {
-            "find-up": "^1.0.0"
-          }
-        }
-      }
-    },
-    "loader-runner": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
-      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
-    },
-    "loader-utils": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
-      "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
-      "requires": {
-        "big.js": "^3.1.3",
-        "emojis-list": "^2.0.0",
-        "json5": "^0.5.0"
-      }
-    },
-    "locate-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-      "requires": {
-        "p-locate": "^3.0.0",
-        "path-exists": "^3.0.0"
-      }
-    },
-    "lodash": {
-      "version": "4.17.17",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.17.tgz",
-      "integrity": "sha512-/B2DjOphAoqi5BX4Gg2oh4UR0Gy/A7xYAMh3aSECEKzwS3eCDEpS0Cals1Ktvxwlal3bBJNc+5W9kNIcADdw5Q=="
-    },
-    "lodash._arraycopy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
-      "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=",
-      "dev": true
-    },
-    "lodash._arrayeach": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
-      "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=",
-      "dev": true
-    },
-    "lodash._baseassign": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
-      "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
-      "dev": true,
-      "requires": {
-        "lodash._basecopy": "^3.0.0",
-        "lodash.keys": "^3.0.0"
-      }
-    },
-    "lodash._baseclone": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz",
-      "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=",
-      "dev": true,
-      "requires": {
-        "lodash._arraycopy": "^3.0.0",
-        "lodash._arrayeach": "^3.0.0",
-        "lodash._baseassign": "^3.0.0",
-        "lodash._basefor": "^3.0.0",
-        "lodash.isarray": "^3.0.0",
-        "lodash.keys": "^3.0.0"
-      }
-    },
-    "lodash._basecopy": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
-      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
-      "dev": true
-    },
-    "lodash._basefor": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
-      "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=",
-      "dev": true
-    },
-    "lodash._bindcallback": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
-      "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
-      "dev": true
-    },
-    "lodash._getnative": {
-      "version": "3.9.1",
-      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
-      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
-      "dev": true
-    },
-    "lodash._isiterateecall": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
-      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
-      "dev": true
-    },
-    "lodash.clone": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz",
-      "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=",
-      "dev": true,
-      "requires": {
-        "lodash._baseclone": "^3.0.0",
-        "lodash._bindcallback": "^3.0.0",
-        "lodash._isiterateecall": "^3.0.0"
-      }
-    },
-    "lodash.defaultsdeep": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
-      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
-      "dev": true
-    },
-    "lodash.escape": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
-      "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
-      "dev": true
-    },
-    "lodash.flattendeep": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
-      "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
-      "dev": true
-    },
-    "lodash.isarguments": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
-      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
-      "dev": true
-    },
-    "lodash.isarray": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
-      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
-      "dev": true
-    },
-    "lodash.isempty": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
-      "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4="
-    },
-    "lodash.isequal": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
-      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
-      "dev": true
-    },
-    "lodash.isplainobject": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
-      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
-      "dev": true
-    },
-    "lodash.keys": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
-      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
-      "dev": true,
-      "requires": {
-        "lodash._getnative": "^3.0.0",
-        "lodash.isarguments": "^3.0.0",
-        "lodash.isarray": "^3.0.0"
-      }
-    },
-    "lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
-      "dev": true
-    },
-    "log-symbols": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
-      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^2.0.1"
-      }
-    },
-    "loglevel": {
-      "version": "1.6.8",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
-      "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA=="
-    },
-    "lolex": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz",
-      "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==",
-      "dev": true
-    },
-    "loose-envify": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-      "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-      "requires": {
-        "js-tokens": "^3.0.0"
-      }
-    },
-    "lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
-      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
-    },
-    "lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "requires": {
-        "yallist": "^3.0.2"
-      }
-    },
-    "make-dir": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-      "requires": {
-        "pify": "^4.0.1",
-        "semver": "^5.6.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        },
-        "semver": {
-          "version": "5.7.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
-          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
-        }
-      }
-    },
-    "make-iterator": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
-      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
-      "requires": {
-        "kind-of": "^6.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "makeerror": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
-      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
-      "dev": true,
-      "requires": {
-        "tmpl": "1.0.x"
-      }
-    },
-    "map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
-    },
-    "map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
-      "requires": {
-        "object-visit": "^1.0.0"
-      }
-    },
-    "md5.js": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
-    },
-    "memory-fs": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
-      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
-      "requires": {
-        "errno": "^0.1.3",
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
-    },
-    "merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
-    },
-    "micromatch": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "braces": "^2.3.1",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "extglob": "^2.0.4",
-        "fragment-cache": "^0.2.1",
-        "kind-of": "^6.0.2",
-        "nanomatch": "^1.2.9",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "miller-rabin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
-      "requires": {
-        "bn.js": "^4.0.0",
-        "brorand": "^1.0.1"
-      }
-    },
-    "mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
-    },
-    "mime-db": {
-      "version": "1.35.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
-      "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
-    },
-    "mime-types": {
-      "version": "2.1.19",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
-      "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
-      "requires": {
-        "mime-db": "~1.35.0"
-      }
-    },
-    "min-document": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
-      "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
-      "dev": true,
-      "requires": {
-        "dom-walk": "^0.1.0"
-      }
-    },
-    "mini-css-extract-plugin": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz",
-      "integrity": "sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ==",
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "normalize-url": "1.9.1",
-        "schema-utils": "^1.0.0",
-        "webpack-sources": "^1.1.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.10.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
-    },
-    "minimalistic-crypto-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
-    },
-    "minipass": {
-      "version": "2.3.5",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
-      "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
-      "requires": {
-        "safe-buffer": "^5.1.2",
-        "yallist": "^3.0.0"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        },
-        "yallist": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
-          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
-        }
-      }
-    },
-    "mississippi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
-      "requires": {
-        "concat-stream": "^1.5.0",
-        "duplexify": "^3.4.2",
-        "end-of-stream": "^1.1.0",
-        "flush-write-stream": "^1.0.0",
-        "from2": "^2.1.0",
-        "parallel-transform": "^1.1.0",
-        "pump": "^3.0.0",
-        "pumpify": "^1.3.3",
-        "stream-each": "^1.1.0",
-        "through2": "^2.0.0"
-      }
-    },
-    "mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
-      "requires": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "mkdirp": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-      "requires": {
-        "minimist": "^1.2.5"
-      }
-    },
-    "mkpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz",
-      "integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0=",
-      "dev": true
-    },
-    "mocha": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz",
-      "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "ansi-colors": "3.2.3",
-        "browser-stdout": "1.3.1",
-        "debug": "3.2.6",
-        "diff": "3.5.0",
-        "escape-string-regexp": "1.0.5",
-        "find-up": "3.0.0",
-        "glob": "7.1.3",
-        "growl": "1.10.5",
-        "he": "1.2.0",
-        "js-yaml": "3.13.1",
-        "log-symbols": "2.2.0",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.4",
-        "ms": "2.1.1",
-        "node-environment-flags": "1.0.5",
-        "object.assign": "4.1.0",
-        "strip-json-comments": "2.0.1",
-        "supports-color": "6.0.0",
-        "which": "1.3.1",
-        "wide-align": "1.1.3",
-        "yargs": "13.3.2",
-        "yargs-parser": "13.1.2",
-        "yargs-unparser": "1.6.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "glob": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
-          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
-          "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-          "dev": true,
-          "optional": true
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-          "dev": true,
-          "optional": true
-        },
-        "supports-color": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
-          "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
-      }
-    },
-    "mock-local-storage": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.12.tgz",
-      "integrity": "sha512-LBxvtbUE384RV+rQbeklJ/Ii08qmDpod65XkcnFybZD9o4YaT1CBwk77kjtCQxi4CKzjqr5dStUuy2KynOQvNg==",
-      "dev": true,
-      "requires": {
-        "core-js": "^0.8.3",
-        "global": "^4.3.2"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "0.8.4",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.8.4.tgz",
-          "integrity": "sha1-wiZl8eDRucPF4bCNq9HxCGleT88=",
-          "dev": true
-        }
-      }
-    },
-    "moment": {
-      "version": "2.27.0",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
-      "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ=="
-    },
-    "moo": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz",
-      "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==",
-      "dev": true
-    },
-    "move-concurrently": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
-      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
-      "requires": {
-        "aproba": "^1.1.1",
-        "copy-concurrently": "^1.0.0",
-        "fs-write-stream-atomic": "^1.0.8",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.5.4",
-        "run-queue": "^1.0.3"
-      }
-    },
-    "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-    },
-    "multicast-dns": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
-      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
-      "requires": {
-        "dns-packet": "^1.3.1",
-        "thunky": "^1.0.2"
-      }
-    },
-    "multicast-dns-service-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
-    },
-    "mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
-    },
-    "nan": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
-      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
-      "optional": true
-    },
-    "nano": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/nano/-/nano-8.0.1.tgz",
-      "integrity": "sha512-q9q8894oLNyWHhsUjF4Nk9gAvGorsCrmx0aeA7AG9pYRnM+xtAKVX5GtWfW8c2qx4mJftXHeN1/6RR8Oo9eQaQ==",
-      "requires": {
-        "@types/request": "^2.47.1",
-        "cloudant-follow": "^0.18.0",
-        "debug": "^2.2.0",
-        "errs": "^0.3.2",
-        "request": "^2.85.0"
-      },
-      "dependencies": {
-        "aws4": {
-          "version": "1.9.1",
-          "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
-          "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
-        },
-        "cloudant-follow": {
-          "version": "0.18.2",
-          "resolved": "https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.18.2.tgz",
-          "integrity": "sha512-qu/AmKxDqJds+UmT77+0NbM7Yab2K3w0qSeJRzsq5dRWJTEJdWeb+XpG4OpKuTE9RKOa/Awn2gR3TTnvNr3TeA==",
-          "requires": {
-            "browser-request": "~0.3.0",
-            "debug": "^4.0.1",
-            "request": "^2.88.0"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "4.1.1",
-              "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-              "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-              "requires": {
-                "ms": "^2.1.1"
-              }
-            },
-            "request": {
-              "version": "2.88.2",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-              "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-              "requires": {
-                "aws-sign2": "~0.7.0",
-                "aws4": "^1.8.0",
-                "caseless": "~0.12.0",
-                "combined-stream": "~1.0.6",
-                "extend": "~3.0.2",
-                "forever-agent": "~0.6.1",
-                "form-data": "~2.3.2",
-                "har-validator": "~5.1.3",
-                "http-signature": "~1.2.0",
-                "is-typedarray": "~1.0.0",
-                "isstream": "~0.1.2",
-                "json-stringify-safe": "~5.0.1",
-                "mime-types": "~2.1.19",
-                "oauth-sign": "~0.9.0",
-                "performance-now": "^2.1.0",
-                "qs": "~6.5.2",
-                "safe-buffer": "^5.1.2",
-                "tough-cookie": "~2.5.0",
-                "tunnel-agent": "^0.6.0",
-                "uuid": "^3.3.2"
-              }
-            }
-          }
-        },
-        "har-validator": {
-          "version": "5.1.3",
-          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
-          "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
-          "requires": {
-            "ajv": "^6.5.5",
-            "har-schema": "^2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "oauth-sign": {
-          "version": "0.9.0",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-          "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-        },
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        },
-        "uuid": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
-        }
-      }
-    },
-    "nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "6.0.3",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-          "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
-        }
-      }
-    },
-    "natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
-    },
-    "nearley": {
-      "version": "2.19.4",
-      "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.4.tgz",
-      "integrity": "sha512-oqj3m4oqwKsN77pETa9IPvxHHHLW68KrDc2KYoWMUOhDlrNUo7finubwffQMBRnwNCOXc4kRxCZO0Rvx4L6Zrw==",
-      "dev": true,
-      "requires": {
-        "commander": "^2.19.0",
-        "moo": "^0.5.0",
-        "railroad-diagrams": "^1.0.0",
-        "randexp": "0.4.6",
-        "semver": "^5.4.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-          "dev": true
-        }
-      }
-    },
-    "negotiator": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
-    },
-    "neo-async": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
-      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
-    },
-    "netmask": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
-      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
-      "dev": true
-    },
-    "nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
-    },
-    "nightwatch": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.3.6.tgz",
-      "integrity": "sha512-61kz2mw3Ng8Rrs2CDZv6aVB+bW+oNIFXL543L9kOvOqft3zVh2j08W8ww6BxGDzmWZe1HGRXNEI5U8+I4hO4KA==",
-      "dev": true,
-      "requires": {
-        "assertion-error": "^1.1.0",
-        "chai-nightwatch": "^0.4.0",
-        "ci-info": "^2.0.0",
-        "dotenv": "7.0.0",
-        "ejs": "^2.7.4",
-        "envinfo": "^7.5.1",
-        "lodash.clone": "3.0.3",
-        "lodash.defaultsdeep": "^4.6.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "3.0.4",
-        "minimist": "^1.2.5",
-        "mkpath": "1.0.0",
-        "mocha": "^6.2.2",
-        "ora": "^4.0.3",
-        "proxy-agent": "^3.1.1",
-        "request": "^2.88.2",
-        "request-promise": "^4.2.5",
-        "semver": "^6.3.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        }
-      }
-    },
-    "nise": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
-      "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/formatio": "^3.2.1",
-        "@sinonjs/text-encoding": "^0.7.1",
-        "just-extend": "^4.0.2",
-        "lolex": "^5.0.1",
-        "path-to-regexp": "^1.7.0"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        },
-        "lolex": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
-          "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
-          "dev": true,
-          "requires": {
-            "@sinonjs/commons": "^1.7.0"
-          }
-        },
-        "path-to-regexp": {
-          "version": "1.8.0",
-          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
-          "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
-          "dev": true,
-          "requires": {
-            "isarray": "0.0.1"
-          }
-        }
-      }
-    },
-    "no-case": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
-      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
-      "requires": {
-        "lower-case": "^1.1.1"
-      }
-    },
-    "node-environment-flags": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
-      "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "object.getownpropertydescriptors": "^2.0.3",
-        "semver": "^5.7.0"
-      }
-    },
-    "node-fetch": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
-      "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
-      "dev": true
-    },
-    "node-forge": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
-      "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ=="
-    },
-    "node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
-      "dev": true
-    },
-    "node-libs-browser": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
-      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
-      "requires": {
-        "assert": "^1.1.1",
-        "browserify-zlib": "^0.2.0",
-        "buffer": "^4.3.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "^1.0.0",
-        "crypto-browserify": "^3.11.0",
-        "domain-browser": "^1.1.1",
-        "events": "^3.0.0",
-        "https-browserify": "^1.0.0",
-        "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.1",
-        "process": "^0.11.10",
-        "punycode": "^1.2.4",
-        "querystring-es3": "^0.2.0",
-        "readable-stream": "^2.3.3",
-        "stream-browserify": "^2.0.1",
-        "stream-http": "^2.7.2",
-        "string_decoder": "^1.0.0",
-        "timers-browserify": "^2.0.4",
-        "tty-browserify": "0.0.0",
-        "url": "^0.11.0",
-        "util": "^0.11.0",
-        "vm-browserify": "^1.0.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        },
-        "url": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-          "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-          "requires": {
-            "punycode": "1.3.2",
-            "querystring": "0.2.0"
-          },
-          "dependencies": {
-            "punycode": {
-              "version": "1.3.2",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-              "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
-            }
-          }
-        }
-      }
-    },
-    "node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
-    },
-    "node-notifier": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
-      "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
-      "dev": true,
-      "requires": {
-        "growly": "^1.3.0",
-        "is-wsl": "^1.1.0",
-        "semver": "^5.5.0",
-        "shellwords": "^0.1.1",
-        "which": "^1.3.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        }
-      }
-    },
-    "node-releases": {
-      "version": "1.1.59",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz",
-      "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw=="
-    },
-    "nopt": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-      "requires": {
-        "abbrev": "1"
-      }
-    },
-    "normalize-package-data": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
-      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
-      "dev": true,
-      "requires": {
-        "hosted-git-info": "^2.1.4",
-        "is-builtin-module": "^1.0.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-      "requires": {
-        "remove-trailing-separator": "^1.0.1"
-      }
-    },
-    "normalize-url": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
-      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
-      "requires": {
-        "object-assign": "^4.0.1",
-        "prepend-http": "^1.0.0",
-        "query-string": "^4.1.0",
-        "sort-keys": "^1.0.0"
-      }
-    },
-    "npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
-    "nth-check": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
-      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
-      "requires": {
-        "boolbase": "~1.0.0"
-      }
-    },
-    "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
-      "dev": true
-    },
-    "oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
-    },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
-    },
-    "object-inspect": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
-      "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
-    },
-    "object-is": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
-      "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object-keys": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
-      "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
-    },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
-      "requires": {
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
-      }
-    },
-    "object.defaults": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
-      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
-      "requires": {
-        "array-each": "^1.0.1",
-        "array-slice": "^1.0.0",
-        "for-own": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "object.entries": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz",
-      "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object.fromentries": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
-      "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "object.getownpropertydescriptors": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
-      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.5.1"
-      }
-    },
-    "object.map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
-      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
-      "requires": {
-        "for-own": "^1.0.0",
-        "make-iterator": "^1.0.0"
-      }
-    },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
-      "requires": {
-        "isobject": "^3.0.1"
-      }
-    },
-    "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
-    },
-    "on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-      "requires": {
-        "ee-first": "1.1.1"
-      }
-    },
-    "on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "onetime": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
-      "requires": {
-        "mimic-fn": "^2.1.0"
-      },
-      "dependencies": {
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
-        }
-      }
-    },
-    "opn": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
-      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
-      "requires": {
-        "is-wsl": "^1.1.0"
-      }
-    },
-    "optimist": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
-      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-      "requires": {
-        "minimist": "~0.0.1",
-        "wordwrap": "~0.0.2"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.10",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
-          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
-          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
-        }
-      }
-    },
-    "optionator": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
-      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
-      "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.4",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "wordwrap": "~1.0.0"
-      }
-    },
-    "ora": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz",
-      "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==",
-      "dev": true,
-      "requires": {
-        "chalk": "^3.0.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.2.0",
-        "is-interactive": "^1.0.0",
-        "log-symbols": "^3.0.0",
-        "mute-stream": "0.0.8",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
-          "dev": true,
-          "requires": {
-            "@types/color-name": "^1.1.1",
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "log-symbols": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
-          "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
-          "dev": true,
-          "requires": {
-            "chalk": "^2.4.2"
-          },
-          "dependencies": {
-            "ansi-styles": {
-              "version": "3.2.1",
-              "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-              "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-              "dev": true,
-              "requires": {
-                "color-convert": "^1.9.0"
-              }
-            },
-            "chalk": {
-              "version": "2.4.2",
-              "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-              "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-              "dev": true,
-              "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-              }
-            },
-            "color-convert": {
-              "version": "1.9.3",
-              "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-              "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-              "dev": true,
-              "requires": {
-                "color-name": "1.1.3"
-              }
-            },
-            "color-name": {
-              "version": "1.1.3",
-              "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-              "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-              "dev": true
-            },
-            "has-flag": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-              "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-              "dev": true
-            },
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "original": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
-      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
-      "requires": {
-        "url-parse": "^1.4.3"
-      }
-    },
-    "os-browserify": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
-    },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
-    },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
-    },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
-      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
-    "p-each-series": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
-      "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
-      "dev": true,
-      "requires": {
-        "p-reduce": "^1.0.0"
-      }
-    },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
-    },
-    "p-limit": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
-      "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
-      "requires": {
-        "p-try": "^2.0.0"
-      }
-    },
-    "p-locate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-      "requires": {
-        "p-limit": "^2.0.0"
-      }
-    },
-    "p-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
-      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
-    },
-    "p-reduce": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
-      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
-      "dev": true
-    },
-    "p-retry": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
-      "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
-      "requires": {
-        "retry": "^0.12.0"
-      }
-    },
-    "p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-    },
-    "pac-proxy-agent": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz",
-      "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.2.0",
-        "debug": "^4.1.1",
-        "get-uri": "^2.0.0",
-        "http-proxy-agent": "^2.1.0",
-        "https-proxy-agent": "^3.0.0",
-        "pac-resolver": "^3.0.0",
-        "raw-body": "^2.2.0",
-        "socks-proxy-agent": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "pac-resolver": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz",
-      "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==",
-      "dev": true,
-      "requires": {
-        "co": "^4.6.0",
-        "degenerator": "^1.0.4",
-        "ip": "^1.1.5",
-        "netmask": "^1.0.6",
-        "thunkify": "^2.1.2"
-      }
-    },
-    "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
-    },
-    "parallel-transform": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
-      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
-      "requires": {
-        "cyclist": "^1.0.1",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.1.5"
-      }
-    },
-    "param-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
-      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
-    "parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "requires": {
-        "callsites": "^3.0.0"
-      }
-    },
-    "parse-asn1": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
-      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
-      "requires": {
-        "asn1.js": "^4.0.0",
-        "browserify-aes": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.0",
-        "pbkdf2": "^3.0.3",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "parse-filepath": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
-      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
-      "requires": {
-        "is-absolute": "^1.0.0",
-        "map-cache": "^0.2.0",
-        "path-root": "^0.1.1"
-      }
-    },
-    "parse-passwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
-    },
-    "parse5": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
-      "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "parseurl": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
-      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
-    },
-    "path-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
-    },
-    "path-dirname": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
-      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
-    },
-    "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-    },
-    "path-is-inside": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
-    },
-    "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
-    },
-    "path-root": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
-      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
-      "requires": {
-        "path-root-regex": "^0.1.0"
-      }
-    },
-    "path-root-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
-      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
-    },
-    "path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
-    },
-    "path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
-    },
-    "pbkdf2": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
-      "requires": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
-      }
-    },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-    },
-    "pify": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-    },
-    "pinkie": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
-    },
-    "pinkie-promise": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "requires": {
-        "pinkie": "^2.0.0"
-      }
-    },
-    "pirates": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
-      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
-      "requires": {
-        "node-modules-regexp": "^1.0.0"
-      }
-    },
-    "pkg-dir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
-      "requires": {
-        "find-up": "^3.0.0"
-      }
-    },
-    "pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-      "dev": true
-    },
-    "portfinder": {
-      "version": "1.0.26",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
-      "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
-      "requires": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.1"
-      },
-      "dependencies": {
-        "async": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
-          "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
-          "requires": {
-            "lodash": "^4.17.14"
-          }
-        },
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
-    },
-    "postcss": {
-      "version": "7.0.32",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
-      "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
-      "requires": {
-        "chalk": "^2.4.2",
-        "source-map": "^0.6.1",
-        "supports-color": "^6.1.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "postcss-modules-extract-imports": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
-      "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
-      "requires": {
-        "postcss": "^7.0.5"
-      }
-    },
-    "postcss-modules-local-by-default": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
-      "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
-      "requires": {
-        "icss-utils": "^4.1.1",
-        "postcss": "^7.0.16",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.0.0"
-      }
-    },
-    "postcss-modules-scope": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
-      "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
-      "requires": {
-        "postcss": "^7.0.6",
-        "postcss-selector-parser": "^6.0.0"
-      }
-    },
-    "postcss-modules-values": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
-      "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
-      "requires": {
-        "icss-utils": "^4.0.0",
-        "postcss": "^7.0.6"
-      }
-    },
-    "postcss-selector-parser": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
-      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
-      "requires": {
-        "cssesc": "^3.0.0",
-        "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
-      }
-    },
-    "postcss-value-parser": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-      "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
-    },
-    "pouchdb-adapter-http": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-adapter-http/-/pouchdb-adapter-http-7.2.1.tgz",
-      "integrity": "sha512-+JAoRkqPLneyrOj7oLCnGKtE+aei8mBiN4Id3bWxmSSBOKCoTDDO4iLAsqOEQGqd2fe1qujh0zFhjeJgg2UMPA==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "pouchdb-binary-utils": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-fetch": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-binary-utils": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.2.1.tgz",
-      "integrity": "sha512-kbzOOYti/3d8s2bQY5EfJVd7c9E84q4oEpr1M8fOOHKnINZFteKkZQywD4roblUnew0Obyhvozif4LAr3CMZFg==",
-      "requires": {
-        "buffer-from": "1.1.0"
-      },
-      "dependencies": {
-        "buffer-from": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
-          "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
-        }
-      }
-    },
-    "pouchdb-changes-filter": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-changes-filter/-/pouchdb-changes-filter-7.2.1.tgz",
-      "integrity": "sha512-cXrkDSIqgG3WniIHac97OzFDHnN00RL26X9t0RoTCZo7s3wZ8lCunIPWaZLu5GoaueLzkKqyaBTNISe6wK0AhQ==",
-      "requires": {
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-selector-core": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-collate": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.2.1.tgz",
-      "integrity": "sha512-vE1wGPOSJy1QLpHG4Jo6c7/Fronc5zEwILP6vMw/tY3BbpRHKVFKcbdf7g1FICR1mb8WPqkSwzlQbniuNMYMGQ=="
-    },
-    "pouchdb-collections": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.2.1.tgz",
-      "integrity": "sha512-cqe3GY3wDq2j59tnh+5ZV0bZj1O+YWiBz4qM7HEcgrEXnc29ADvXXPp71tmcpZUCR39bzLKyYtadAQu7FpOeOA=="
-    },
-    "pouchdb-core": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-core/-/pouchdb-core-7.2.1.tgz",
-      "integrity": "sha512-YY5OJEfrLPb9eCuPmemYcFnDMVKvk3sTaROzRu3crrhN9WD0wWbVpYgRj5KleW1O9kMqfYHxi2NQ6xv9vocGRA==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "inherits": "2.0.4",
-        "pouchdb-changes-filter": "7.2.1",
-        "pouchdb-collections": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-fetch": "7.2.1",
-        "pouchdb-merge": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        }
-      }
-    },
-    "pouchdb-errors": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.2.1.tgz",
-      "integrity": "sha512-/tBP+eWY6a62UoZnJ6JJlNmbNpNS5FgVimkqwLMrFQkXpbJlhshYDeJ5PHR0W3Rlfc54GMZC7m4KhJt9kG/CkA==",
-      "requires": {
-        "inherits": "2.0.4"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        }
-      }
-    },
-    "pouchdb-fetch": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.2.1.tgz",
-      "integrity": "sha512-5P77dwl5qF6GLZk36N65RNIsCwcNX79NSmQJnnbx9KGSH2R9yuvADqPCUSAYanX0+YDWizv3BBC/0V/oe8qSGQ==",
-      "requires": {
-        "abort-controller": "3.0.0",
-        "fetch-cookie": "0.7.3",
-        "node-fetch": "2.4.1"
-      },
-      "dependencies": {
-        "node-fetch": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.4.1.tgz",
-          "integrity": "sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw=="
-        }
-      }
-    },
-    "pouchdb-md5": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.2.1.tgz",
-      "integrity": "sha512-TJqGtNguctPiSai5b4+oTPi9oOcxSbNolkUtxRBxklf8kw+PNsDUi1H0DIFmA57n0qHCU19PXdbEVYlUhv/PAA==",
-      "requires": {
-        "pouchdb-binary-utils": "7.2.1",
-        "spark-md5": "3.0.0"
-      }
-    },
-    "pouchdb-merge": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.2.1.tgz",
-      "integrity": "sha512-TgxXPw1sZERwihoWSzLIdvn5MP1YKhYNaB0UuvYjboK+WUpCLh5WEeNTJi6WwUD9Yoc66QxP9D3qmfNEjd1BHQ=="
-    },
-    "pouchdb-selector-core": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.2.1.tgz",
-      "integrity": "sha512-omD/dSQIQjS0SIBCKJiACeoaPjJek+iDvQEUoTd51SjQR9aRGdKxkEO0+9qN1DJcf+mL4T/eSYYjqdeRwJ4L1A==",
-      "requires": {
-        "pouchdb-collate": "7.2.1",
-        "pouchdb-utils": "7.2.1"
-      }
-    },
-    "pouchdb-utils": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.2.1.tgz",
-      "integrity": "sha512-ZInfRpKtJ2HwLz2Dv3NEona9khvGud0rWzvQGwUs1zoaOoSB5XxK3ui5s5fLpBrONgz0WcTB49msOUq4oAUzFg==",
-      "requires": {
-        "argsarray": "0.0.1",
-        "clone-buffer": "1.0.0",
-        "immediate": "3.0.6",
-        "inherits": "2.0.4",
-        "pouchdb-collections": "7.2.1",
-        "pouchdb-errors": "7.2.1",
-        "pouchdb-md5": "7.2.1",
-        "uuid": "3.3.3"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "uuid": {
-          "version": "3.3.3",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
-          "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
-        }
-      }
-    },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
-    },
-    "prepend-http": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
-    },
-    "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
-      "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
-      }
-    },
-    "pretty-format": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
-      "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^24.9.0",
-        "ansi-regex": "^4.0.0",
-        "ansi-styles": "^3.2.0",
-        "react-is": "^16.8.4"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-          "dev": true
-        }
-      }
-    },
-    "process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
-    },
-    "process-nextick-args": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
-    },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
-    },
-    "promise": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
-      "optional": true,
-      "requires": {
-        "asap": "~2.0.3"
-      }
-    },
-    "promise-inflight": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
-    },
-    "prompts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz",
-      "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==",
-      "dev": true,
-      "requires": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.4"
-      }
-    },
-    "prop-types": {
-      "version": "15.7.2",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.8.1"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "prop-types-exact": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
-      "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3",
-        "object.assign": "^4.1.0",
-        "reflect.ownkeys": "^0.2.0"
-      },
-      "dependencies": {
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        }
-      }
-    },
-    "proxy-addr": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
-      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
-      "requires": {
-        "forwarded": "~0.1.2",
-        "ipaddr.js": "1.9.1"
-      }
-    },
-    "proxy-agent": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz",
-      "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==",
-      "dev": true,
-      "requires": {
-        "agent-base": "^4.2.0",
-        "debug": "4",
-        "http-proxy-agent": "^2.1.0",
-        "https-proxy-agent": "^3.0.0",
-        "lru-cache": "^5.1.1",
-        "pac-proxy-agent": "^3.0.1",
-        "proxy-from-env": "^1.0.0",
-        "socks-proxy-agent": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "proxy-from-env": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
-      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
-      "dev": true
-    },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
-    },
-    "psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
-    },
-    "public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
-      "requires": {
-        "bn.js": "^4.1.0",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "parse-asn1": "^5.0.0",
-        "randombytes": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
-        }
-      }
-    },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "pumpify": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
-      "requires": {
-        "duplexify": "^3.6.0",
-        "inherits": "^2.0.3",
-        "pump": "^2.0.0"
-      },
-      "dependencies": {
-        "pump": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-          "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
-          }
-        }
-      }
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-    },
-    "qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
-    },
-    "query-string": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
-      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
-      "requires": {
-        "object-assign": "^4.1.0",
-        "strict-uri-encode": "^1.0.0"
-      }
-    },
-    "querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
-    },
-    "querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
-    },
-    "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
-      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
-    },
-    "raf": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
-      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
-      "requires": {
-        "performance-now": "^2.1.0"
-      }
-    },
-    "railroad-diagrams": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
-      "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
-      "dev": true
-    },
-    "randexp": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
-      "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
-      "dev": true,
-      "requires": {
-        "discontinuous-range": "1.0.0",
-        "ret": "~0.1.10"
-      }
-    },
-    "randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "requires": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "randomfill": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
-      "requires": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "range-parser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
-      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
-    },
-    "raw-body": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-      "requires": {
-        "bytes": "3.1.0",
-        "http-errors": "1.7.2",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.2",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-          "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "rc-align": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.1.tgz",
-      "integrity": "sha512-RQ5Fhxl0LW+zsxbY8dxAcpXdaHkHH2jzRSSpvBTS7G9LMK3T+WRcn4ovjg/eqAESM6TdTx0hfqWF2S1pO75jxQ==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "2.x",
-        "dom-align": "^1.7.0",
-        "rc-util": "^5.0.1",
-        "resize-observer-polyfill": "^1.5.1"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-animate": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz",
-      "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==",
-      "requires": {
-        "@ant-design/css-animation": "^1.7.2",
-        "classnames": "^2.2.6",
-        "raf": "^3.4.0",
-        "rc-util": "^5.0.1"
-      },
-      "dependencies": {
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        }
-      }
-    },
-    "rc-slider": {
-      "version": "9.3.1",
-      "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.3.1.tgz",
-      "integrity": "sha512-c52PWPyrfJWh28K6dixAm0906L3/4MUIxqrNQA4TLnC/Z+cBNycWJUZoJerpwSOE1HdM3XDwixCsmtFc/7aWlQ==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "^2.2.5",
-        "rc-tooltip": "^4.0.0",
-        "rc-util": "^5.0.0",
-        "shallowequal": "^1.1.0"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-tooltip": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-4.2.1.tgz",
-      "integrity": "sha512-oykuaGsHg7RFvPUaxUpxo7ScEqtH61C66x4JUmjlFlSS8gSx2L8JFtfwM1D68SLBxUqGqJObtxj4TED75gQTiA==",
-      "requires": {
-        "rc-trigger": "^4.2.1"
-      }
-    },
-    "rc-trigger": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.3.0.tgz",
-      "integrity": "sha512-jnGNzosXmDdivMBjPCYe/AfOXTpJU2/xQ9XukgoXDQEoZq/9lcI1r7eUIfq70WlWpLxlUEqQktiV3hwyy6Nw9g==",
-      "requires": {
-        "@babel/runtime": "^7.10.1",
-        "classnames": "^2.2.6",
-        "raf": "^3.4.1",
-        "rc-align": "^4.0.0",
-        "rc-animate": "^3.0.0",
-        "rc-util": "^5.0.1"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
-          "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        },
-        "regenerator-runtime": {
-          "version": "0.13.5",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
-          "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
-        }
-      }
-    },
-    "rc-util": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.0.5.tgz",
-      "integrity": "sha512-zLIdNm6qz+hQbB5T1fmzHFFgPuRl3uB2eS2iLR/mewUWvgC3l7NzRYRVlHoCEEFVUkKEEsHuJXG1J52FInl5lA==",
-      "requires": {
-        "react-is": "^16.12.0",
-        "shallowequal": "^1.1.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
-      "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2"
-      },
-      "dependencies": {
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          },
-          "dependencies": {
-            "loose-envify": {
-              "version": "1.4.0",
-              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-              "requires": {
-                "js-tokens": "^3.0.0 || ^4.0.0"
-              }
-            }
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-bootstrap": {
-      "version": "0.31.5",
-      "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.31.5.tgz",
-      "integrity": "sha512-xgDihgX4QvYHmHzL87faDBMDnGfYyqcrqV0TEbWY+JizePOG1vfb8M3xJN+6MJ3kUYqDtQSZ7v/Q6Y5YDrkMdA==",
-      "requires": {
-        "babel-runtime": "^6.11.6",
-        "classnames": "^2.2.5",
-        "dom-helpers": "^3.2.0",
-        "invariant": "^2.2.1",
-        "keycode": "^2.1.2",
-        "prop-types": "^15.5.10",
-        "prop-types-extra": "^1.0.1",
-        "react-overlays": "^0.7.4",
-        "uncontrollable": "^4.1.0",
-        "warning": "^3.0.0"
-      },
-      "dependencies": {
-        "babel-runtime": {
-          "version": "6.26.0",
-          "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-          "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-          "requires": {
-            "core-js": "^2.4.0",
-            "regenerator-runtime": "^0.11.0"
-          }
-        },
-        "dom-helpers": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
-          "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
-        },
-        "invariant": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
-          "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-        },
-        "keycode": {
-          "version": "2.1.9",
-          "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz",
-          "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo="
-        },
-        "loose-envify": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-          "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-          "requires": {
-            "js-tokens": "^3.0.0"
-          }
-        },
-        "prop-types-extra": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.0.1.tgz",
-          "integrity": "sha1-pXvUgQ6C0no/9DF+zBtK0AX3moI=",
-          "requires": {
-            "warning": "^3.0.0"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
-        },
-        "uncontrollable": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz",
-          "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=",
-          "requires": {
-            "invariant": "^2.1.0"
-          }
-        },
-        "warning": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "react-dom": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
-      "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "scheduler": "^0.19.1"
-      },
-      "dependencies": {
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          },
-          "dependencies": {
-            "loose-envify": {
-              "version": "1.4.0",
-              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-              "requires": {
-                "js-tokens": "^3.0.0 || ^4.0.0"
-              }
-            }
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        },
-        "scheduler": {
-          "version": "0.19.1",
-          "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-          "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
-          "requires": {
-            "loose-envify": "^1.1.0",
-            "object-assign": "^4.1.1"
-          }
-        }
-      }
-    },
-    "react-input-autosize": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz",
-      "integrity": "sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==",
-      "requires": {
-        "prop-types": "^15.5.8"
-      }
-    },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-      "dev": true
-    },
-    "react-motion": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz",
-      "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==",
-      "requires": {
-        "performance-now": "^0.2.0",
-        "prop-types": "^15.5.8",
-        "raf": "^3.1.0"
-      },
-      "dependencies": {
-        "performance-now": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
-          "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU="
-        },
-        "raf": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
-          "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
-          "requires": {
-            "performance-now": "^2.1.0"
-          },
-          "dependencies": {
-            "performance-now": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-              "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
-            }
-          }
-        }
-      }
-    },
-    "react-overlays": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.7.4.tgz",
-      "integrity": "sha512-7vsooMx3siLAuEfTs8FYeP/lAORWWFXTO8PON3KgX0Htq1Oa+po6ioSjGyO0/GO5CVSMNhpWt6V2opeexHgBuQ==",
-      "requires": {
-        "classnames": "^2.2.5",
-        "dom-helpers": "^3.2.1",
-        "prop-types": "^15.5.10",
-        "prop-types-extra": "^1.0.1",
-        "warning": "^3.0.0"
-      },
-      "dependencies": {
-        "dom-helpers": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
-          "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
-        },
-        "loose-envify": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
-          "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
-          "requires": {
-            "js-tokens": "^3.0.0"
-          }
-        },
-        "prop-types-extra": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.0.1.tgz",
-          "integrity": "sha1-pXvUgQ6C0no/9DF+zBtK0AX3moI=",
-          "requires": {
-            "warning": "^3.0.0"
-          }
-        },
-        "warning": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
-          "requires": {
-            "loose-envify": "^1.0.0"
-          }
-        }
-      }
-    },
-    "react-redux": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
-      "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==",
-      "requires": {
-        "@babel/runtime": "^7.5.5",
-        "hoist-non-react-statics": "^3.3.0",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.7.2",
-        "react-is": "^16.9.0"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-select": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.3.0.tgz",
-      "integrity": "sha512-g/QAU1HZrzSfxkwMAo/wzi6/ezdWye302RGZevsATec07hI/iSxcpB1hejFIp7V63DJ8mwuign6KmB3VjdlinQ==",
-      "requires": {
-        "classnames": "^2.2.4",
-        "prop-types": "^15.5.8",
-        "react-input-autosize": "^2.1.2"
-      }
-    },
-    "react-test-renderer": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz",
-      "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==",
-      "dev": true,
-      "requires": {
-        "object-assign": "^4.1.1",
-        "prop-types": "^15.6.2",
-        "react-is": "^16.8.6",
-        "scheduler": "^0.19.1"
-      }
-    },
-    "react-toastify": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-5.5.0.tgz",
-      "integrity": "sha512-jsVme7jALIFGRyQsri/g4YTsRuaaGI70T6/ikjwZMB4mwTZaCWqj5NqxhGrRStKlJc5npXKKvKeqTiRGQl78LQ==",
-      "requires": {
-        "@babel/runtime": "^7.4.2",
-        "classnames": "^2.2.6",
-        "prop-types": "^15.7.2",
-        "react-transition-group": "^4"
-      },
-      "dependencies": {
-        "classnames": {
-          "version": "2.2.6",
-          "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-          "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-        },
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "react-transition-group": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz",
-      "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==",
-      "requires": {
-        "@babel/runtime": "^7.5.5",
-        "dom-helpers": "^5.0.1",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "^1.4.0",
-            "object-assign": "^4.1.1",
-            "react-is": "^16.8.1"
-          }
-        },
-        "react-is": {
-          "version": "16.13.1",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-          "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-        }
-      }
-    },
-    "read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      }
-    },
-    "read-pkg-up": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
-      "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
-      "dev": true,
-      "requires": {
-        "find-up": "^3.0.0",
-        "read-pkg": "^3.0.0"
-      }
-    },
-    "readable-stream": {
-      "version": "2.3.5",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
-      "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.0.3",
-        "util-deprecate": "~1.0.1"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
-        }
-      }
-    },
-    "readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "realpath-native": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
-      "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
-      "dev": true,
-      "requires": {
-        "util.promisify": "^1.0.0"
-      }
-    },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "requires": {
-        "resolve": "^1.1.6"
-      }
-    },
-    "redux": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
-      "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "symbol-observable": "^1.2.0"
-      },
-      "dependencies": {
-        "loose-envify": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-          "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-          "requires": {
-            "js-tokens": "^3.0.0 || ^4.0.0"
-          }
-        }
-      }
-    },
-    "redux-mock-store": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.4.tgz",
-      "integrity": "sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==",
-      "dev": true,
-      "requires": {
-        "lodash.isplainobject": "^4.0.6"
-      }
-    },
-    "redux-thunk": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
-      "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
-    },
-    "reflect.ownkeys": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
-      "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
-      "dev": true
-    },
-    "regenerate": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
-      "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A=="
-    },
-    "regenerate-unicode-properties": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
-      "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
-      "requires": {
-        "regenerate": "^1.4.0"
-      }
-    },
-    "regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
-    },
-    "regenerator-transform": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
-      "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
-      "requires": {
-        "@babel/runtime": "^7.8.4"
-      }
-    },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
-      "requires": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "regexp.prototype.flags": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
-      "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "regexpp": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
-    },
-    "regexpu-core": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
-      "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
-      "requires": {
-        "regenerate": "^1.4.0",
-        "regenerate-unicode-properties": "^8.2.0",
-        "regjsgen": "^0.5.1",
-        "regjsparser": "^0.6.4",
-        "unicode-match-property-ecmascript": "^1.0.4",
-        "unicode-match-property-value-ecmascript": "^1.2.0"
-      }
-    },
-    "regjsgen": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
-      "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
-    },
-    "regjsparser": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
-      "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
-      "requires": {
-        "jsesc": "~0.5.0"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
-        }
-      }
-    },
-    "relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
-    },
-    "remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
-    },
-    "renderkid": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
-      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
-      "requires": {
-        "css-select": "^1.1.0",
-        "dom-converter": "^0.2",
-        "htmlparser2": "^3.3.0",
-        "strip-ansi": "^3.0.0",
-        "utila": "^0.4.0"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        }
-      }
-    },
-    "repeat-element": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
-      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
-    },
-    "request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-      "requires": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        }
-      }
-    },
-    "request-promise": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz",
-      "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.5.0",
-        "request-promise-core": "1.1.3",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "request-promise-core": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
-      "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.15"
-      }
-    },
-    "request-promise-native": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
-      "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
-      "dev": true,
-      "requires": {
-        "request-promise-core": "1.1.3",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
-      }
-    },
-    "require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
-    },
-    "require-main-filename": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
-    },
-    "requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
-    },
-    "resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
-    },
-    "resolve": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-      "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-      "requires": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "resolve-cwd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
-      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
-      "requires": {
-        "resolve-from": "^3.0.0"
-      },
-      "dependencies": {
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
-        }
-      }
-    },
-    "resolve-dir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
-      "requires": {
-        "expand-tilde": "^2.0.0",
-        "global-modules": "^1.0.0"
-      },
-      "dependencies": {
-        "global-modules": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-          "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
-          "requires": {
-            "global-prefix": "^1.0.1",
-            "is-windows": "^1.0.1",
-            "resolve-dir": "^1.0.0"
-          }
-        }
-      }
-    },
-    "resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
-    },
-    "restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "requires": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      }
-    },
-    "ret": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
-    },
-    "retry": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
-      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
-    },
-    "rimraf": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
-      "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
-      "requires": {
-        "glob": "^7.0.5"
-      }
-    },
-    "ripemd160": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1"
-      }
-    },
-    "rst-selector-parser": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
-      "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
-      "dev": true,
-      "requires": {
-        "lodash.flattendeep": "^4.4.0",
-        "nearley": "^2.7.10"
-      }
-    },
-    "rsvp": {
-      "version": "4.8.5",
-      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
-      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
-      "dev": true
-    },
-    "run-async": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
-      "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
-      "requires": {
-        "is-promise": "^2.1.0"
-      }
-    },
-    "run-queue": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
-      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
-      "requires": {
-        "aproba": "^1.1.1"
-      }
-    },
-    "rxjs": {
-      "version": "5.5.12",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
-      "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
-      "requires": {
-        "symbol-observable": "1.0.1"
-      },
-      "dependencies": {
-        "symbol-observable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
-          "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ="
-        }
-      }
-    },
-    "safe-buffer": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
-      "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
-      "requires": {
-        "ret": "~0.1.10"
-      }
-    },
-    "safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "sane": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
-      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
-      "dev": true,
-      "requires": {
-        "@cnakazawa/watch": "^1.0.3",
-        "anymatch": "^2.0.0",
-        "capture-exit": "^2.0.0",
-        "exec-sh": "^0.3.2",
-        "execa": "^1.0.0",
-        "fb-watchman": "^2.0.0",
-        "micromatch": "^3.1.4",
-        "minimist": "^1.1.1",
-        "walker": "~1.0.5"
-      }
-    },
-    "sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-      "dev": true
-    },
-    "scheduler": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
-      "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
-      "dev": true,
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
-      }
-    },
-    "schema-utils": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
-      "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
-      "requires": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.5.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
-          "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.1"
-          }
-        },
-        "ajv-keywords": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
-          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        }
-      }
-    },
-    "select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo="
-    },
-    "selfsigned": {
-      "version": "1.10.7",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
-      "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
-      "requires": {
-        "node-forge": "0.9.0"
-      }
-    },
-    "semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
-    },
-    "send": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
-      "requires": {
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "~1.6.2",
-        "mime": "1.4.1",
-        "ms": "2.0.0",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.0",
-        "statuses": "~1.4.0"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "mime": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-          "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
-        },
-        "statuses": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
-        }
-      }
-    },
-    "serialize-javascript": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
-      "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
-    },
-    "serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
-      "requires": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      }
-    },
-    "serve-static": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-      "requires": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.17.1"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
-        },
-        "http-errors": {
-          "version": "1.7.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
-          "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.4",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "inherits": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-        },
-        "ms": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-        },
-        "parseurl": {
-          "version": "1.3.3",
-          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-          "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        },
-        "send": {
-          "version": "0.17.1",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-          "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "destroy": "~1.0.4",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "~1.7.2",
-            "mime": "1.6.0",
-            "ms": "2.1.1",
-            "on-finished": "~2.3.0",
-            "range-parser": "~1.2.1",
-            "statuses": "~1.5.0"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
-        }
-      }
-    },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
-    },
-    "set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "setimmediate": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
-    },
-    "setprototypeof": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
-      "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
-    },
-    "sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "shallowequal": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
-      "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
-    },
-    "shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "requires": {
-        "shebang-regex": "^1.0.0"
-      }
-    },
-    "shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
-    },
-    "shellwords": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
-      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
-      "dev": true
-    },
-    "side-channel": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
-      "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
-      "requires": {
-        "es-abstract": "^1.17.0-next.1",
-        "object-inspect": "^1.7.0"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
-    },
-    "sinon": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz",
-      "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.4.0",
-        "@sinonjs/formatio": "^3.2.1",
-        "@sinonjs/samsam": "^3.3.3",
-        "diff": "^3.5.0",
-        "lolex": "^4.2.0",
-        "nise": "^1.5.2",
-        "supports-color": "^5.5.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
-    },
-    "slash": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
-    },
-    "slice-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
-      "requires": {
-        "ansi-styles": "^3.2.0",
-        "astral-regex": "^1.0.0",
-        "is-fullwidth-code-point": "^2.0.0"
-      }
-    },
-    "smart-buffer": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz",
-      "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==",
-      "dev": true
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
-      "requires": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
-      "requires": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        },
-        "kind-of": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
-          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
-        }
-      }
-    },
-    "snapdragon-util": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
-      "requires": {
-        "kind-of": "^3.2.0"
-      }
-    },
-    "sockjs": {
-      "version": "0.3.20",
-      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
-      "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
-      "requires": {
-        "faye-websocket": "^0.10.0",
-        "uuid": "^3.4.0",
-        "websocket-driver": "0.6.5"
-      }
-    },
-    "sockjs-client": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
-      "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
-      "requires": {
-        "debug": "^3.2.5",
-        "eventsource": "^1.0.7",
-        "faye-websocket": "~0.11.1",
-        "inherits": "^2.0.3",
-        "json3": "^3.3.2",
-        "url-parse": "^1.4.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "faye-websocket": {
-          "version": "0.11.3",
-          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
-          "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
-          "requires": {
-            "websocket-driver": ">=0.5.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "socks": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz",
-      "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==",
-      "dev": true,
-      "requires": {
-        "ip": "1.1.5",
-        "smart-buffer": "^4.1.0"
-      }
-    },
-    "socks-proxy-agent": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz",
-      "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==",
-      "dev": true,
-      "requires": {
-        "agent-base": "~4.2.1",
-        "socks": "~2.3.2"
-      },
-      "dependencies": {
-        "agent-base": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
-          "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
-          "dev": true,
-          "requires": {
-            "es6-promisify": "^5.0.0"
-          }
-        }
-      }
-    },
-    "sort-keys": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
-      "requires": {
-        "is-plain-obj": "^1.0.0"
-      }
-    },
-    "source-list-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
-      "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
-    },
-    "source-map": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
-    },
-    "source-map-resolve": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-      "requires": {
-        "atob": "^2.1.1",
-        "decode-uri-component": "^0.2.0",
-        "resolve-url": "^0.2.1",
-        "source-map-url": "^0.4.0",
-        "urix": "^0.1.0"
-      }
-    },
-    "source-map-support": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
-      "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "source-map-url": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
-    },
-    "spark-md5": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
-      "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8="
-    },
-    "spdx-correct": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
-      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
-      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
-      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
-      "dev": true
-    },
-    "spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-      "requires": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-      "requires": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-          "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
-        },
-        "string_decoder": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-          "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-          "requires": {
-            "safe-buffer": "~5.2.0"
-          }
-        }
-      }
-    },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
-      "requires": {
-        "extend-shallow": "^3.0.0"
-      }
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "sshpk": {
-      "version": "1.14.2",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
-      "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
-      "requires": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
-      }
-    },
-    "ssri": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
-      "requires": {
-        "figgy-pudding": "^3.5.1"
-      }
-    },
-    "stack-utils": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
-      "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
-      "dev": true
-    },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
-      "requires": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
-      }
-    },
-    "statuses": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
-    },
-    "stealthy-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-      "dev": true
-    },
-    "stream-browserify": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
-      "requires": {
-        "inherits": "~2.0.1",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "stream-each": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
-      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "stream-shift": "^1.0.0"
-      }
-    },
-    "stream-http": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
-      "requires": {
-        "builtin-status-codes": "^3.0.0",
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.3.6",
-        "to-arraybuffer": "^1.0.0",
-        "xtend": "^4.0.0"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "stream-shift": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
-      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
-    },
-    "strict-uri-encode": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
-      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
-    },
-    "string-length": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
-      "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
-      "dev": true,
-      "requires": {
-        "astral-regex": "^1.0.0",
-        "strip-ansi": "^4.0.0"
-      }
-    },
-    "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      }
-    },
-    "string.prototype.matchall": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz",
-      "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "has-symbols": "^1.0.1",
-        "internal-slot": "^1.0.2",
-        "regexp.prototype.flags": "^1.3.0",
-        "side-channel": "^1.0.2"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string.prototype.trim": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz",
-      "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "dev": true,
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "dev": true,
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "dev": true,
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "dev": true,
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
-          "dev": true
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "dev": true,
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-          "dev": true
-        }
-      }
-    },
-    "string.prototype.trimend": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
-      "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string.prototype.trimstart": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
-      "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      },
-      "dependencies": {
-        "define-properties": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-          "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-          "requires": {
-            "object-keys": "^1.0.12"
-          }
-        },
-        "es-abstract": {
-          "version": "1.17.6",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
-          "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
-          "requires": {
-            "es-to-primitive": "^1.2.1",
-            "function-bind": "^1.1.1",
-            "has": "^1.0.3",
-            "has-symbols": "^1.0.1",
-            "is-callable": "^1.2.0",
-            "is-regex": "^1.1.0",
-            "object-inspect": "^1.7.0",
-            "object-keys": "^1.1.1",
-            "object.assign": "^4.1.0",
-            "string.prototype.trimend": "^1.0.1",
-            "string.prototype.trimstart": "^1.0.1"
-          }
-        },
-        "es-to-primitive": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-          "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-          "requires": {
-            "is-callable": "^1.1.4",
-            "is-date-object": "^1.0.1",
-            "is-symbol": "^1.0.2"
-          }
-        },
-        "has": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-          "requires": {
-            "function-bind": "^1.1.1"
-          }
-        },
-        "is-callable": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
-          "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
-        },
-        "is-regex": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
-          "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "is-symbol": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-          "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-          "requires": {
-            "has-symbols": "^1.0.1"
-          }
-        },
-        "object-keys": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-          "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-        }
-      }
-    },
-    "string_decoder": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-      "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-          "dev": true
-        }
-      }
-    },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
-    },
-    "strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
-    },
-    "strip-json-comments": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
-      "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w=="
-    },
-    "style-loader": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
-      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
-      "requires": {
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.10.2",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
-          "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
-          "requires": {
-            "fast-deep-equal": "^2.0.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
-      }
-    },
-    "supports-color": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
-      "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
-      "requires": {
-        "has-flag": "^3.0.0"
-      }
-    },
-    "symbol-observable": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
-      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
-    },
-    "symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
-    },
-    "table": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
-      "requires": {
-        "ajv": "^6.10.2",
-        "lodash": "^4.17.14",
-        "slice-ansi": "^2.1.0",
-        "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "tapable": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
-    },
-    "terser": {
-      "version": "4.6.12",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz",
-      "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==",
-      "requires": {
-        "commander": "^2.20.0",
-        "source-map": "~0.6.1",
-        "source-map-support": "~0.5.12"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "terser-webpack-plugin": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
-      "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
-      "requires": {
-        "cacache": "^12.0.2",
-        "find-cache-dir": "^2.1.0",
-        "is-wsl": "^1.1.0",
-        "schema-utils": "^1.0.0",
-        "serialize-javascript": "^2.1.2",
-        "source-map": "^0.6.1",
-        "terser": "^4.1.2",
-        "webpack-sources": "^1.4.0",
-        "worker-farm": "^1.7.0"
-      },
-      "dependencies": {
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "webpack-sources": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-          "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
-          "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
-          }
-        }
-      }
-    },
-    "test-exclude": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
-      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.3",
-        "minimatch": "^3.0.4",
-        "read-pkg-up": "^4.0.0",
-        "require-main-filename": "^2.0.0"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "require-main-filename": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-          "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-          "dev": true
-        }
-      }
-    },
-    "text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
-    },
-    "throat": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
-      "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
-      "dev": true
-    },
-    "through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
-    },
-    "through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-      "requires": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "2.3.7",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        }
-      }
-    },
-    "thunkify": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz",
-      "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=",
-      "dev": true
-    },
-    "thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="
-    },
-    "timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
-      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
-      "requires": {
-        "setimmediate": "^1.0.4"
-      }
-    },
-    "tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-      "requires": {
-        "os-tmpdir": "~1.0.2"
-      }
-    },
-    "tmpl": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
-      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
-      "dev": true
-    },
-    "to-arraybuffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
-    },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
-    },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
-      "requires": {
-        "kind-of": "^3.0.2"
-      }
-    },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
-      "requires": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
-      "requires": {
-        "is-number": "^3.0.0",
-        "repeat-string": "^1.6.1"
-      }
-    },
-    "toidentifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
-    },
-    "toposort": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
-      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk="
-    },
-    "tough-cookie": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
-      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
-      "requires": {
-        "punycode": "^1.4.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        }
-      }
-    },
-    "tr46": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
-    },
-    "tslib": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
-      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
-    },
-    "tty-browserify": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
-    },
-    "tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
-      "requires": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
-      "optional": true
-    },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
-      "requires": {
-        "prelude-ls": "~1.1.2"
-      }
-    },
-    "type-detect": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
-      "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
-      "dev": true
-    },
-    "type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
-    },
-    "type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-      "requires": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "requires": {
-            "mime-db": "1.44.0"
-          }
-        }
-      }
-    },
-    "typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
-    },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
-    },
-    "underscore.string": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
-      "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
-      "requires": {
-        "sprintf-js": "^1.0.3",
-        "util-deprecate": "^1.0.2"
-      }
-    },
-    "unicode-canonical-property-names-ecmascript": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
-    },
-    "unicode-match-property-ecmascript": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
-      "requires": {
-        "unicode-canonical-property-names-ecmascript": "^1.0.4",
-        "unicode-property-aliases-ecmascript": "^1.0.4"
-      }
-    },
-    "unicode-match-property-value-ecmascript": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
-      "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
-    },
-    "unicode-property-aliases-ecmascript": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
-      "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
-    },
-    "union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-      "requires": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      }
-    },
-    "uniq": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
-    },
-    "unique-filename": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
-      "requires": {
-        "unique-slug": "^2.0.0"
-      }
-    },
-    "unique-slug": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
-      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
-      "requires": {
-        "imurmurhash": "^0.1.4"
-      }
-    },
-    "unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
-      "requires": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
-      "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
-          "requires": {
-            "get-value": "^2.0.3",
-            "has-values": "^0.1.4",
-            "isobject": "^2.0.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
-        }
-      }
-    },
-    "upath": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
-      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
-    },
-    "upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
-      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
-    },
-    "uri-js": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
-      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
-    },
-    "url": {
-      "version": "0.7.9",
-      "resolved": "https://registry.npmjs.org/url/-/url-0.7.9.tgz",
-      "integrity": "sha1-GVmxqLNh/AF7WVE6fH+pgn9eTtA=",
-      "requires": {
-        "punycode": ">=1.0.0 <1.1.0",
-        "querystring": ">=0.1.0 <0.2.0"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.0.0.tgz",
-          "integrity": "sha1-zp5sbpwdtYJxdPzrEv9JOHAKG9M="
-        },
-        "querystring": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.1.0.tgz",
-          "integrity": "sha1-y3aibNoKEKlBY/zbPhMoJ/BLexA="
-        }
-      }
-    },
-    "url-loader": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
-      "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
-      "requires": {
-        "loader-utils": "^1.2.3",
-        "mime": "^2.4.4",
-        "schema-utils": "^2.5.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "mime": {
-          "version": "2.4.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
-          "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
-      }
-    },
-    "url-parse": {
-      "version": "1.4.7",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
-      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
-      "requires": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "urls": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/urls/-/urls-0.0.4.tgz",
-      "integrity": "sha1-xBT/RAJFbxxUh4grKxiDreDx2ek="
-    },
-    "use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
-    },
-    "util": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
-      "requires": {
-        "inherits": "2.0.3"
-      }
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
-    },
-    "util.promisify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
-      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
-      "requires": {
-        "define-properties": "^1.1.2",
-        "object.getownpropertydescriptors": "^2.0.3"
-      }
-    },
-    "utila": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
-      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
-    },
-    "utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
-    },
-    "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
-    },
-    "v8-compile-cache": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
-      "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w=="
-    },
-    "v8flags": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz",
-      "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==",
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
-    },
-    "validate-npm-package-license": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
-      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
-    },
-    "verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      }
-    },
-    "visualize-rev-tree": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/visualize-rev-tree/-/visualize-rev-tree-0.0.1.tgz",
-      "integrity": "sha512-FWGun8R+BCINc7GBAWS8cEu9Nry40ZH3mM8XGgsqMFNJ0nFzeF9YecesK45EO5Pwgt8rBntdTdZfCV/JS1gjVw=="
-    },
-    "vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
-      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
-    },
-    "w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
-      "dev": true,
-      "requires": {
-        "browser-process-hrtime": "^1.0.0"
-      }
-    },
-    "walker": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
-      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
-      "dev": true,
-      "requires": {
-        "makeerror": "1.0.x"
-      }
-    },
-    "watchpack": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
-      "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
-      "requires": {
-        "chokidar": "^2.1.8",
-        "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0"
-      }
-    },
-    "wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
-      "requires": {
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "wcwidth": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
-      "dev": true,
-      "requires": {
-        "defaults": "^1.0.3"
-      }
-    },
-    "webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true
-    },
-    "webpack": {
-      "version": "4.43.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
-      "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
-      "requires": {
-        "@webassemblyjs/ast": "1.9.0",
-        "@webassemblyjs/helper-module-context": "1.9.0",
-        "@webassemblyjs/wasm-edit": "1.9.0",
-        "@webassemblyjs/wasm-parser": "1.9.0",
-        "acorn": "^6.4.1",
-        "ajv": "^6.10.2",
-        "ajv-keywords": "^3.4.1",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^4.1.0",
-        "eslint-scope": "^4.0.3",
-        "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^2.4.0",
-        "loader-utils": "^1.2.3",
-        "memory-fs": "^0.4.1",
-        "micromatch": "^3.1.10",
-        "mkdirp": "^0.5.3",
-        "neo-async": "^2.6.1",
-        "node-libs-browser": "^2.2.1",
-        "schema-utils": "^1.0.0",
-        "tapable": "^1.1.3",
-        "terser-webpack-plugin": "^1.4.3",
-        "watchpack": "^1.6.1",
-        "webpack-sources": "^1.4.1"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "eslint-scope": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
-          "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        },
-        "webpack-sources": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-          "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
-          "requires": {
-            "source-list-map": "^2.0.0",
-            "source-map": "~0.6.1"
-          }
-        }
-      }
-    },
-    "webpack-cli": {
-      "version": "3.3.12",
-      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
-      "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
-      "requires": {
-        "chalk": "^2.4.2",
-        "cross-spawn": "^6.0.5",
-        "enhanced-resolve": "^4.1.1",
-        "findup-sync": "^3.0.0",
-        "global-modules": "^2.0.0",
-        "import-local": "^2.0.0",
-        "interpret": "^1.4.0",
-        "loader-utils": "^1.4.0",
-        "supports-color": "^6.1.0",
-        "v8-compile-cache": "^2.1.1",
-        "yargs": "^13.3.2"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "5.2.2",
-          "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-          "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "5.5.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-              "requires": {
-                "has-flag": "^3.0.0"
-              }
-            }
-          }
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
-        },
-        "findup-sync": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
-          "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
-          "requires": {
-            "detect-file": "^1.0.0",
-            "is-glob": "^4.0.0",
-            "micromatch": "^3.0.4",
-            "resolve-dir": "^1.0.1"
-          }
-        },
-        "json5": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-          "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "v8-compile-cache": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
-          "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ=="
-        }
-      }
-    },
-    "webpack-dev-middleware": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
-      "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
-      "requires": {
-        "memory-fs": "^0.4.1",
-        "mime": "^2.4.4",
-        "mkdirp": "^0.5.1",
-        "range-parser": "^1.2.1",
-        "webpack-log": "^2.0.0"
-      },
-      "dependencies": {
-        "mime": {
-          "version": "2.4.6",
-          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
-          "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
-        },
-        "range-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
-        }
-      }
-    },
-    "webpack-dev-server": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
-      "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
-      "requires": {
-        "ansi-html": "0.0.7",
-        "bonjour": "^3.5.0",
-        "chokidar": "^2.1.8",
-        "compression": "^1.7.4",
-        "connect-history-api-fallback": "^1.6.0",
-        "debug": "^4.1.1",
-        "del": "^4.1.1",
-        "express": "^4.17.1",
-        "html-entities": "^1.3.1",
-        "http-proxy-middleware": "0.19.1",
-        "import-local": "^2.0.0",
-        "internal-ip": "^4.3.0",
-        "ip": "^1.1.5",
-        "is-absolute-url": "^3.0.3",
-        "killable": "^1.0.1",
-        "loglevel": "^1.6.8",
-        "opn": "^5.5.0",
-        "p-retry": "^3.0.1",
-        "portfinder": "^1.0.26",
-        "schema-utils": "^1.0.0",
-        "selfsigned": "^1.10.7",
-        "semver": "^6.3.0",
-        "serve-index": "^1.9.1",
-        "sockjs": "0.3.20",
-        "sockjs-client": "1.4.0",
-        "spdy": "^4.0.2",
-        "strip-ansi": "^3.0.1",
-        "supports-color": "^6.1.0",
-        "url": "^0.11.0",
-        "webpack-dev-middleware": "^3.7.2",
-        "webpack-log": "^2.0.0",
-        "ws": "^6.2.1",
-        "yargs": "^13.3.2"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        },
-        "punycode": {
-          "version": "1.3.2",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
-        },
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        },
-        "url": {
-          "version": "0.11.0",
-          "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-          "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
-          "requires": {
-            "punycode": "1.3.2",
-            "querystring": "0.2.0"
-          }
-        },
-        "ws": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
-          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
-          "requires": {
-            "async-limiter": "~1.0.0"
-          }
-        }
-      }
-    },
-    "webpack-log": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
-      "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
-      "requires": {
-        "ansi-colors": "^3.0.0",
-        "uuid": "^3.3.2"
-      }
-    },
-    "webpack-sources": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
-      "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
-      "requires": {
-        "source-list-map": "^2.0.0",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
-    "websocket-driver": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
-      "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
-      "requires": {
-        "websocket-extensions": ">=0.1.1"
-      }
-    },
-    "websocket-extensions": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
-    },
-    "whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
-      "dev": true,
-      "requires": {
-        "iconv-lite": "0.4.24"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.4.24",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        }
-      }
-    },
-    "whatwg-fetch": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
-      "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
-    },
-    "whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
-    },
-    "whatwg-url": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
-      "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
-      "dev": true,
-      "requires": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "which": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
-      "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
-      "requires": {
-        "isexe": "^2.0.0"
-      }
-    },
-    "which-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
-    },
-    "wide-align": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
-      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "string-width": "^1.0.2 || 2"
-      }
-    },
-    "word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
-    },
-    "wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-      "dev": true
-    },
-    "worker-farm": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
-      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
-      "requires": {
-        "errno": "~0.1.7"
-      }
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "write": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
-      "requires": {
-        "mkdirp": "^0.5.1"
-      }
-    },
-    "write-file-atomic": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
-      "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.2"
-      }
-    },
-    "ws": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-      "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
-      "dev": true,
-      "requires": {
-        "async-limiter": "~1.0.0"
-      }
-    },
-    "xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true
-    },
-    "xregexp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
-      "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
-      "dev": true
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
-    "y18n": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
-    },
-    "yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-    },
-    "yargs": {
-      "version": "13.3.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-      "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
-      "requires": {
-        "cliui": "^5.0.0",
-        "find-up": "^3.0.0",
-        "get-caller-file": "^2.0.1",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^2.0.0",
-        "set-blocking": "^2.0.0",
-        "string-width": "^3.0.0",
-        "which-module": "^2.0.0",
-        "y18n": "^4.0.0",
-        "yargs-parser": "^13.1.2"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "yargs-parser": {
-      "version": "13.1.2",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-      "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-      "requires": {
-        "camelcase": "^5.0.0",
-        "decamelize": "^1.2.0"
-      }
-    },
-    "yargs-unparser": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
-      "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "flat": "^4.1.0",
-        "lodash": "^4.17.15",
-        "yargs": "^13.3.0"
-      }
-    }
-  }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index a30a7e2..0000000
--- a/package.json
+++ /dev/null
@@ -1,155 +0,0 @@
-{
-  "name": "fauxton",
-  "version": "1.2.6",
-  "description": "Fauxton is a modular CouchDB dashboard and Futon replacement.",
-  "main": "./index.js",
-  "directories": {
-    "test": "test"
-  },
-  "bin": {
-    "fauxton": "./bin/fauxton"
-  },
-  "devDependencies": {
-    "babel-jest": "^24.9.0",
-    "bootstrap": "^3.4.1",
-    "enzyme": "^3.11.0",
-    "enzyme-adapter-react-16": "^1.15.2",
-    "es5-shim": "4.5.4",
-    "fetch-mock": "^9.10.3",
-    "jest": "^24.9.0",
-    "mock-local-storage": "^1.1.12",
-    "nightwatch": "^1.3.6",
-    "node-fetch": "^2.6.0",
-    "redux-mock-store": "^1.5.4",
-    "sinon": "^7.5.0"
-  },
-  "dependencies": {
-    "@babel/cli": "^7.10.4",
-    "@babel/core": "^7.10.4",
-    "@babel/plugin-proposal-class-properties": "^7.10.4",
-    "@babel/plugin-proposal-object-rest-spread": "^7.10.4",
-    "@babel/plugin-transform-async-to-generator": "^7.10.4",
-    "@babel/plugin-transform-object-assign": "^7.10.4",
-    "@babel/preset-env": "^7.10.4",
-    "@babel/preset-react": "^7.10.4",
-    "@babel/register": "^7.10.4",
-    "@webcomponents/url": "^0.7.5",
-    "acorn": "^6.4.1",
-    "ajv": "^6.12.3",
-    "async": "~0.2.6",
-    "babel-eslint": "^9.0.0",
-    "babel-loader": "^8.1.0",
-    "babel-plugin-array-includes": "^2.0.3",
-    "backbone": "^1.4.0",
-    "base-64": "^0.1.0",
-    "bluebird": "^3.7.2",
-    "brace": "^0.11.0",
-    "classnames": "^2.2.6",
-    "clean-css": "^4.2.3",
-    "clipboard": "^1.5.16",
-    "cookie": "^0.3.1",
-    "core-js": "^2.6.11",
-    "couchapp": "~0.11.0",
-    "css-loader": "^3.6.0",
-    "d3": "^3.4.11",
-    "eslint": "^6.8.0",
-    "eslint-loader": "^2.2.1",
-    "eslint-plugin-react": "^7.20.3",
-    "exports-loader": "~0.6.4",
-    "expose-loader": "^0.7.5",
-    "express": "^4.17.1",
-    "file-loader": "^1.1.11",
-    "fs-extra": "^2.0.0",
-    "grunt": "^1.2.1",
-    "grunt-cli": "~1.3.2",
-    "grunt-contrib-clean": "~1.1.0",
-    "grunt-contrib-copy": "~1.0.0",
-    "grunt-couchapp": "~0.2.1",
-    "grunt-exec": "~1.0.1",
-    "grunt-shell": "^2.1.0",
-    "html-webpack-plugin": "^3.2.0",
-    "http-proxy": "^1.18.1",
-    "imports-loader": "^0.8.0",
-    "jquery": "^3.5.1",
-    "jquery-param-fn": "^1.0.0",
-    "jsondiffpatch": "^0.3.11",
-    "less": "^3.11.3",
-    "less-loader": "^5.0.0",
-    "lodash": "^4.17.17",
-    "mini-css-extract-plugin": "^0.7.0",
-    "mkdirp": "^0.5.1",
-    "moment": "^2.27.0",
-    "nano": "~8.0.0",
-    "optimist": "^0.6.1",
-    "pouchdb-adapter-http": "^7.2.1",
-    "pouchdb-core": "^7.2.1",
-    "prop-types": "^15.7.2",
-    "rc-slider": "^9.3.1",
-    "react": "^16.13.1",
-    "react-bootstrap": "^0.31.3",
-    "react-dom": "^16.13.1",
-    "react-motion": "^0.5.0",
-    "react-overlays": "^0.7.0",
-    "react-redux": "^7.2.0",
-    "react-select": "^1.3.0",
-    "react-toastify": "^5.5.0",
-    "redux": "^4.0.5",
-    "redux-thunk": "^2.3.0",
-    "regenerator-runtime": "^0.11.1",
-    "request": "^2.88.2",
-    "rxjs": "^5.5.12",
-    "semver": "^5.7.1",
-    "send": "^0.16.2",
-    "style-loader": "^0.23.1",
-    "url": "~0.7.9",
-    "url-loader": "^2.3.0",
-    "urls": "~0.0.3",
-    "uuid": "^3.4.0",
-    "visualize-rev-tree": "0.0.1",
-    "webpack": "^4.43.0",
-    "webpack-cli": "^3.3.12",
-    "webpack-dev-server": "^3.11.0",
-    "whatwg-fetch": "^2.0.4"
-  },
-  "scripts": {
-    "stylecheck": "eslint --ext=js,jsx .",
-    "webpack:dev": "webpack --debug --progress --colors --config ./webpack.config.dev.js",
-    "webpack:test": "webpack --debug --progress --colors --config ./webpack.config.test.js",
-    "webpack:release": "webpack --optimize-minimize --debug --progress --colors --config ./webpack.config.release.js",
-    "jest": "jest --config ./jest-config.json",
-    "test": "grunt test && npm run jest",
-    "phantomjs": "./node_modules/.bin/mocha-phantomjs --debug=false --ssl-protocol=sslv2 --web-security=false --ignore-ssl-errors=true ./test/runner.html",
-    "couchdebug": "grunt couchdebug",
-    "couchdb": "grunt couchdb",
-    "couchapp": "grunt couchapp_deploy",
-    "dev": "node ./devserver.js",
-    "devtests": "webpack-dev-server --config webpack.config.test-dev.js --debug --progress",
-    "nightwatch": "grunt nightwatch",
-    "nightwatch_retries": "grunt nightwatch_retries",
-    "start": "node ./bin/fauxton",
-    "start-debug": "DIST=./dist/debug node ./bin/fauxton",
-    "preversion": "node version-check.js && grunt release",
-    "test-before-publish": "npm run preversion && npm install . -g",
-    "create:animaldb": "node ./bin/create-animal-db",
-    "docker:couchdb-up": "docker-compose -f ./docker/dc.selenium.yml up -d couchdb",
-    "docker:selenium-up": "docker-compose -f ./docker/dc.selenium.yml up -d selenium",
-    "docker:selenium-debug-up": "docker-compose -f ./docker/dc.selenium-debug.yml up -d selenium",
-    "docker:reset": "npm run docker:down && npm run docker:up",
-    "docker:logs": "docker logs couchdb",
-    "docker:up": "docker-compose -f ./docker/dc.selenium.yml up -d",
-    "docker:debug-up": "docker-compose -f ./docker/dc.selenium-debug.yml up -d",
-    "docker:down": "docker-compose -f ./docker/dc.selenium.yml down",
-    "remove-test-dbs": "node ./bin/remove-test-dbs.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/apache/couchdb-fauxton.git"
-  },
-  "keywords": [
-    "couchdb",
-    "futon",
-    "fauxton"
-  ],
-  "author": "The Apache CouchDB contributors",
-  "license": "Apache-2.0"
-}
diff --git a/readme.md b/readme.md
index a01c769..8a2c4a4 100644
--- a/readme.md
+++ b/readme.md
@@ -1,102 +1,3 @@
-[![Build Status](https://travis-ci.org/apache/couchdb-fauxton.svg?branch=master)](https://travis-ci.org/apache/couchdb-fauxton)
+# CouchDB Fauxton
 
-# Fauxton
-
-
-Fauxton is the new Web UI for CouchDB. To get it running in development on your machine. Follow the steps below.
-
-## Install as standalone server via npm
-
-You can use the latest release of Fauxton via npm:
-
-    npm install -g fauxton
-    fauxton
-
-See `fauxton --help` for extra options.
-
-
-## Setting up Fauxton
-
-Please note that [node.js](http://nodejs.org/) and npm is required. Specifically, Fauxton requires at least Node 6 and npm 3.
-
-1. Fork this repo (see [GitHub help](https://help.github.com/articles/fork-a-repo/) for details)
-1. Clone your fork: `git clone https://github.com/YOUR-USERNAME/couchdb-fauxton.git`
-1. Go to your cloned copy: `cd couchdb-fauxton`
-1. Set up the upstream repo: 
-    * `git remote add upstream https://github.com/apache/couchdb-fauxton.git`
-    * `git fetch upstream`
-    * `git branch --set-upstream-to=upstream/master master`
-1. Download all dependencies: `npm install`
-1. Make sure you have CouchDB installed.
-    - Option 1 (**recommended**): Use `npm run docker:up` to start a Docker container running CouchDB with user `tester` and password `testerpass`.
-      - You need to have [Docker](https://docs.docker.com/engine/installation/) installed to use this option. 
-    - Option 2: Follow instructions 
-[found here](http://couchdb.readthedocs.org/en/latest/install/index.html)
-
-
-## Running Fauxton
-
-**NOTE: Before you run Fauxton, don't forget to start CouchDB!**
-
-
-### The Dev Server
-
-Using the dev server is the easiest way to use Fauxton, especially when developing for it. In the cloned repo folder,
-type:
-
-```
-npm run dev
-```
-
-You should be able to access Fauxton at `http://localhost:8000`
-
-
-### Preparing a Fauxton Release
-
-Follow the "Setting up Fauxton" section above, then edit the `settings.json` variable root where the document will live, 
-e.g. `/_utils/`. Then type:
-
-```
-npm run couchdb
-```
-This will install the latest version of Fauxton into `/share/www/`
-
-
-### To Deploy Fauxton
-
-To deploy to your local [CouchDB instance](http://localhost:5984/fauxton/_design/fauxton/index.html):
-
-    grunt couchapp_deploy
-
-### Build pipeline overview
-
-During a release build we are creating a folder called `dist/tmp-out`.
-It contains all files that are just intermediate results for the final
-release artifact. Once everything is finished the files are copied from
-`tmp-out` to their final destination, `dist/release` where they are
-part of the deployable release artifact.
-
-### (Optional) To avoid a npm global install
-    # Development mode, non minified files
-    npm run couchdebug
-
-    # Or fully compiled install
-    npm run couchdb
-
-
-
-## More information 
-
-Check out the following pages for a lot more information about Fauxton:
-
-- [The Fauxton Code Layout](https://github.com/apache/couchdb-fauxton/blob/master/code-layout.md)
-- [Style Guide](https://github.com/apache/couchdb-fauxton/blob/master/styleguide.md)
-- [Testing Fauxton](https://github.com/apache/couchdb-fauxton/blob/master/tests.md)
-- [Extensions](https://github.com/apache/couchdb-fauxton/blob/master/extensions.md)
-- [How to contribute](https://github.com/apache/couchdb-fauxton/blob/master/CONTRIBUTING.md)
-
-
-------
-
-
--- The Fauxton Team
+You are on the wrong branch. You want the `main` branch instead.
diff --git a/settings.json.default.json b/settings.json.default.json
deleted file mode 100644
index 02979f9..0000000
--- a/settings.json.default.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-  "deps": [
-  { "name": "fauxton" },
-  { "name": "components" },
-  { "name": "databases" },
-  { "name": "documents" },
-  { "name": "setup" },
-  { "name": "activetasks" },
-  { "name": "cluster" },
-  { "name": "config" },
-  { "name": "replication" },
-  { "name": "search" },
-  { "name": "cors" },
-  { "name": "permissions" },
-  { "name": "auth" },
-  { "name": "verifyinstall" },
-  { "name": "documentation" },
-  { "name": "news" }
-  ],
-    "template": {
-      "development": {
-        "src": "./assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Dev",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "./",
-          "version": "1.0.dev"
-        }
-      },
-      "release": {
-        "src": "assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Release",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "../",
-          "version": "1.0"
-        }
-      },
-      "couchapp": {
-        "src": "assets/index.underscore",
-        "dest": "dist/debug/index.html",
-        "variables": {
-          "title": "Project Fauxton",
-          "generationLabel": "Fauxton Couchapp",
-          "largeLogoPath": "../../../../../assets/img/CouchDB-negative-logo.png",
-          "smallLogoPath": "../../../../../assets/img/couchdb-logo.png"
-        },
-        "app": {
-          "root": "/",
-          "host": "../../..",
-          "version": "1.0"
-        }
-      }
-    },
-
-    "couch_config": {
-      "fauxton": {
-        "db": "http://localhost:5984/fauxton",
-        "app": "./couchapp.js",
-        "options": {
-          "okay_if_missing": true
-        }
-      }
-    },
-
-    "nightwatch": {
-      "fauxton_username": "tester",
-      "password": "testerpass",
-      "fauxton_port": "8000",
-      "db_protocol": "http",
-      "db_host": "localhost",
-      "db_port": "5984",
-      "custom_commands_path": ["test/nightwatch_tests/custom-commands", "test/nightwatch_tests/custom-commands/auth"],
-      "globals_path": "./helpers/helpers.js",
-      "selenium_port": "4444"
-    }
-}
diff --git a/styleguide.md b/styleguide.md
deleted file mode 100644
index 9d11b3a..0000000
--- a/styleguide.md
+++ /dev/null
@@ -1,261 +0,0 @@
-# Style Guide
-
-This document attempts to codify the JavaScript, HTML and CSS style rules for Fauxton. This has been patched together from
-a few sources, including [Pootle's style guide](http://pootle.readthedocs.org/en/latest/developers/styleguide.html),
-[Google JS style guide](https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml), and from
-reverse-engineering our own codebase.
-
-This is intended to be a living document: any disagreements about style should be brought to the community via the
-[mailing list](http://markmail.org/search/?q=couchdb#query:couchdb%20list%3Aorg.apache.couchdb.dev%20order%3Adate-backward),
-discussed, agreed upon and documented here.
-
-- [Javascript](#js)
-- [HTML](#html)
-- [CSS / Less](#css)
-
-
-<a name="js" />
-
-## JavaScript
-
-Note: We have JSHint running as a grunt task which will catch the more egregious errors (missing `vars`, missing
-semicolons etc). See the `Gruntfile.js` for the settings being used.
-
-### Programming Style
-
-#### Indentation
-- 2-space indentation. Don't use tabs. JSHint will whine if you have mixed tabs and spaces.
-- Avoid lines longer than 120 characters.
-
-#### Whitespace
-- For anonymous function calls there should be one space between the word `function` and the `(` (left parenthesis).
-Similarly, for named functions there should be a space between the function name `myFunction` and the opening parenthesis.
-- Control statements should have one space between the control keyword and opening parenthesis.
-- Each `;` (semicolon) in the control part of a for statement should be followed with a space.
-- Every `,` (comma) should be followed with whitespace.
-
-#### Strings
-Use `'` single quote character for strings, because HTML markup uses `"`. Eg. `var greeting = 'Hello World!'`;
-
-#### Numbers
-When using `parseInt` always explicitly include the second radix argument (usually 10).
-
-#### Variables
-- use camel case for variables and methods: `myVariable`, `myMethod`
-- use upper camel case (Pascal) for classes / uninstantiated objects: `MyModel`, `MyView`
-- If a variable holds a jQuery object, prefix it by a dollar sign `$`. For example:
-
-```javascript
-var $ul = $('#myList');
-```
-
-#### Selectors
-- Prefix selectors that deal with JavaScript with `js-`. This way it’s clear the separation between class selectors that
-deal with presentation (CSS) and functionality (JavaScript).
-- Use the same naming criterion as with CSS selector names, ie, lowercase and consequent words separated by dashes.
-- Inside Backbone Views, always use `this.$("...")` to target elements, even IDs.
-
-#### Control statements
-Use Underscore's more concise looping methods (`_.each`, `_.filter`) over plain vanilla `for` loops.
-
-Control statements such as `if`, `while`, `switch` should follow these rules:
-- The enclosed statements should be indented.
-- The `{` (left curly brace) should be at the end of the line that begins the compound statement.
-- The `}` (right curly brace) should begin a line and be indented to align with the beginning of the line containing
-the matching `{` (left curly brace).
-- Braces should be used around all statements, even single statements, when they are part of a control structure,
-such as an `if` or `while` statement. This makes it easier to add statements without accidentally introducing bugs.
-
-#### expr ? yay : nay ternary operator
-- use only for simple logic; anything more complex can become difficult to read.
-
-#### Avoid changing a variable's type
-Once you have create a variable and assigned a value, it is set as a type, stick with that type for that variable. This
-has performance benefits as well as making it easier for someone to understand your code.
-
-Bad:
-```javascript
-var greeting = 'Hello World!';
-greeting = function () {
-  return 'Goodbye World';
-};
-```
-
-Special cases for `null` and `undefined` since they're their own type. It's fine to assign a new value to an undefined
-or null var.
-
-#### Binding
-To maintain calling context, favour `_.bind` over storing a reference to `this`. If you do, use `that` as a var name
-(`var that = this;`)
-
-#### Object Prototypes
-Do not modify any native objects' prototype. eg. `Array.prototype`.
-
-#### Object Constructors
-Avoid using constructors for the built-in object types: Number, String, Boolean, Array, Object.
-
-Number:
-```javascript
-var x = 10; // good
-var x = new Number(10); // bad
-```
-
-String:
-```javascript
-var greeting = 'Hello'; // good
-var greeting = new String('Hello'); // bad
-```
-
-Boolean:
-```javascript
-var yes = true; // good
-var yes = new Boolean(1); // bad
-```
-
-Array:
-```javascript
-var myList = new Array(1, 2, 3); // nope
-var myList = [1, 2, 3]; // yay!
-```
-
-Object:
-```javascript
-var myObj = { size: 10 }; // hurrah!
-var myObj = new Object(); // boooo!
-```
-
-#### Associative Arrays
-Use object literal notation for map/hash/associative arrays.
-
-
-### Examples
-
-#### `if` statements
-
-```javascript
-if (condition) {
-  statements
-}
-
-if (condition) {
-  statements
-} else {
-  statements
-}
-
-if (condition) {
-  statements
-} else if (condition) {
-  statements
-} else {
-  statements
-}
-```
-
-#### `for` statements
-
-As mentioned above, using Underscore's looping methods is favoured here.
-
-```javascript
-for (initialization; condition; update) {
-  statements;
-}
-
-for (variable in object) {
-  if (condition) {
-    statements
-  }
-}
-```
-
-#### `switch` statements
-
-```javascript
-switch (condition) {
-  case 1:
-    statements
-    break;
-
-  case 2:
-    statements
-    break;
-
-  default:
-    statements
-}
-```
-
-#### Functions
-
-```javascript
-function myFunction () {
-  // stuff!
-}
-
-function anotherFunction (firstParam, secondParam, thirdParam) {
-  // stuff!
-}
-
-var yetAnotherFunction = function (firstParam) {
-  // stuff!
-}
-
-var anonymousFunction = function () {
-  // more stuff!
-}
-```
-
-
-<a name="html" />
-
-## HTML
-
-In Fauxton, all our HTML documents are all Underscore templates so this section contains a few Underscore-related 
-style recommendations as well.
-
-#### Indentation
-- 2-space indentation using spaces, not tabs.
-- Avoid lines longer than 120 characters.
-
-### Naming
-- IDs and class names with multiple words should be lowercase and separated with hyphens (`-`), like `my-class` and 
-`fixed-header`.
-- Please try to name your classes and IDs something that makes sense for the current component and won't conflict with
-other markup in the page.
-- IDs or classes that are to be used for javascript only should be named with a `js-` prefix. Note: these should NOT be 
-styled; they should be used for JS hooks only.
-
-#### Other
-- Always use double quotes for attribute strings.
-
-### Underscore-related
-- If a template name consists of multiple words, separate it with underscores, like `my_template.html`.
-- Unless they're explicitly needed, always use `<%- %>` over `<%= %>`.
-
-
-
-<a name="css" />
-
-## CSS / Less
-
-We use Less to generate our CSS.
-
-#### Indentation / Whitespace
-- Indent using 2 spaces. Don’t use tabs.
-- Put selectors and braces on their own lines.
-- One space between the end of the selector and the opening brace, e.g. 
- 
-```
-.my-class {
-    /* rules here */
-}
-```
-
-#### Naming 
-- As noted in the HTML section above, selectors should be lowercase. 
-- Selectors with multiple words should be separated with hyphens (`-`), like `.my-class` and `.fixed-header`. 
-
-#### Other
-- Avoid deep-nesting of rules. Always try to style an element with the minimum specificity required.
-
-
diff --git a/tasks/fauxton.js b/tasks/fauxton.js
deleted file mode 100644
index dce4a96..0000000
--- a/tasks/fauxton.js
+++ /dev/null
@@ -1,222 +0,0 @@
-// Licensed 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.
-
-module.exports = function (grunt) {
-  var _ = grunt.util._,
-      fs = require('fs'),
-      os = require('os');
-
-  grunt.registerMultiTask('get_deps', 'Fetch external dependencies', function () {
-
-    grunt.log.writeln('Fetching external dependencies');
-    const data = this.data,
-          target = data.target || 'app/addons/',
-          settingsFile = fs.existsSync(data.src) ? data.src : 'settings.json.default.json',
-          settings = grunt.file.readJSON(settingsFile);
-
-    const fetch = deps => {
-      var fs = require('fs-extra');
-      deps.forEach(dep => {
-        const path = target + dep.name;
-        const location = dep.url || dep.path;
-        grunt.log.writeln('Fetching: ' + dep.name + ' (' + location + ')');
-        try {
-          fs.copySync(dep.path, path);
-        } catch (e) {
-          grunt.log.writeln('ERROR: ' + e.message);
-        }
-      });
-    };
-
-    const localDeps = settings.deps.filter(dep => !!dep.path);
-    grunt.log.writeln(localDeps.length + ' local dependencies');
-    fetch(localDeps);
-  });
-
-  grunt.registerMultiTask('gen_load_addons', 'Generate the load_addons.js file', function () {
-    var data = this.data,
-        _ = grunt.util._,
-        settingsFile = fs.existsSync(data.src) ? data.src : 'settings.json.default.json',
-        settings = grunt.file.readJSON(settingsFile),
-        template = 'app/load_addons.js.underscore',
-        dest = 'app/load_addons.js',
-        deps = _.map(settings.deps, function (dep) {
-          return './addons/' + dep.name + '/base';
-        });
-
-    var tmpl = _.template(grunt.file.read(template));
-    grunt.file.write(dest, tmpl({deps: deps}));
-  });
-
-  grunt.registerMultiTask('gen_initialize', 'Generate the app.js file', function () {
-    var _ = grunt.util._,
-        settings = this.data,
-        template = 'app/initialize.js.underscore',
-        dest = 'app/initialize.js',
-        tmpl = _.template(grunt.file.read(template)),
-        app = {};
-
-    _.defaults(app, settings.app, {
-      root: '/',
-      host: '../..',
-      version: "0.0"
-    });
-
-    grunt.file.write(dest, tmpl(app));
-  });
-
-  // run every time nightwatch is executed from the command line
-  grunt.registerMultiTask('initNightwatch', 'Sets up Nightwatch', function () {
-    // perform a little validation on the settings
-    _validateNightwatchSettings(this.data.settings);
-
-    // figure out what tests we need to run by examining the settings.json file content. This method returns
-    // the list of addon folders to test, plus a list of files to exclude
-    var result = _getNightwatchTests(this.data.settings);
-    var addonsWithTests = result.addonFolders;
-    var excludeTests = result.excludeTests;
-    var skipTags = result.skipTags;
-    console.info('addons and excluded', addonsWithTests, excludeTests);
-    console.info('skipTags', skipTags);
-
-    // if the user passed a --file="X" on the command line, filter out
-    var singleTestToRun = grunt.option('file');
-    if (singleTestToRun) {
-      addonsWithTests = _findSpecificNightwatchTest(addonsWithTests, singleTestToRun);
-    }
-
-    // now generate the new nightwatch.json file
-    var nightwatchTemplate = _.template(grunt.file.read(this.data.template));
-    grunt.file.write(this.data.dest, nightwatchTemplate({
-      src_folders: JSON.stringify(addonsWithTests),
-      exclude_tests: JSON.stringify(excludeTests, null, '\t'),
-      custom_commands_path: JSON.stringify(this.data.settings.nightwatch.custom_commands_path),
-      globals_path: this.data.settings.nightwatch.globals_path,
-      fauxton_username: this.data.settings.nightwatch.fauxton_username,
-      password: this.data.settings.nightwatch.password,
-      launch_url: this.data.settings.nightwatch.launch_url,
-      fauxton_host: _getHost(this.data.settings.nightwatch.fauxton_ip),
-      fauxton_port: this.data.settings.nightwatch.fauxton_port,
-      db_protocol: this.data.settings.nightwatch.db_protocol,
-      db_host: this.data.settings.nightwatch.db_host,
-      db_port: this.data.settings.nightwatch.db_port,
-      selenium_port: this.data.settings.nightwatch.selenium_port,
-      skiptags: skipTags
-    }));
-  });
-
-  // HELPERS
-
-  //if FAUXTON_HOST not set use ip address
-  function _getHost (fauxton_ip) {
-    if (fauxton_ip) {
-      return fauxton_ip;
-    }
-    //making some assumptions here
-    const interfaces = os.networkInterfaces();
-    const eth0 = interfaces[Object.keys(interfaces)[2]];
-    return eth0.find(function (item) {
-      return item.family === 'IPv4';
-    }).address;
-  }
-
-  function _validateNightwatchSettings (data) {
-    var error = '';
-
-    // if the settings file didn't contain any addons, it points to bigger problems!
-    if (!data.deps.length) {
-      error = 'No addons listed in settings.json - no tests to run!';
-
-    // check the requires nightwatch settings. These should always exist in the settings.json file
-    } else if (!_.has(data, 'nightwatch') ||
-      !_.has(data.nightwatch, 'fauxton_username') ||
-      !_.has(data.nightwatch, 'password')) {
-      error = 'Your settings.json file doesn\'t contain valid nightwatch settings. Please check the user doc.';
-    }
-
-    if (error) {
-      grunt.fail.fatal(error);
-    }
-  }
-
-  function _findSpecificNightwatchTest (addonsWithTests, file) {
-    var filename = file + '.js';
-
-    var paths = addonsWithTests.reduce(function (acc, dir) {
-      if (fs.existsSync(dir + '/' + filename)) {
-        acc.push(dir + '/' + filename);
-      }
-      return acc;
-    }, []);
-
-    if (paths.length > 1) {
-      grunt.fail.fatal('Found multiple nightwatch tests with that filename.');
-    } else if (!paths.length) {
-      grunt.fail.fatal('Found no testfile named ' + filename);
-    }
-
-    return paths[0];
-  }
-
-  function _getNightwatchTests (settings) {
-    var testBlacklist = (_.has(settings.nightwatch, 'testBlacklist')) ? settings.nightwatch.testBlacklist : {};
-    var addonFolders = [],
-        excludeTests = [];
-
-    _.each(settings.deps, function (addon) {
-      var addonTestsFolder = 'app/addons/' + addon.name + '/tests/nightwatch';
-      if (_.has(addon, 'path')) {
-        addonTestsFolder = addon.path + '/tests/nightwatch';
-      }
-
-      // if this addon doesn't have any tests, just move along. Nothing to see here.
-      if (!fs.existsSync(addonTestsFolder)) {
-        return;
-      }
-
-      // next up: see if this addon has anything blacklisted
-      if (_.has(testBlacklist, addon.name) && _.isArray(testBlacklist[addon.name]) && testBlacklist[addon.name].length > 0) {
-
-        // a '*' means the user wants to blacklist all tests in the addon
-        if (_.includes(testBlacklist[addon.name], '*')) {
-          return;
-        }
-
-        // add the folder to test. Any specific files will be blacklisted separately
-        addonFolders.push(addonTestsFolder);
-
-        _.each(fs.readdirSync(addonTestsFolder), function (file) {
-          if (_.includes(testBlacklist[addon.name], file)) {
-            // the relative path is added to work around an oddity with nightwatch. It evaluates all exclude paths
-            // relative to the current src_folder being examined, so we need to return to the root first
-            excludeTests.push('../../../../../' + addonTestsFolder + '/' + file);
-          }
-        });
-
-      } else {
-
-        // add the whole folder
-        addonFolders.push(addonTestsFolder);
-      }
-    });
-
-    var skipTags = process.env.NIGHTWATCH_SKIPTAGS || 'nonpartitioned';
-    var skipTagsJSON = JSON.stringify(skipTags.split(',').map(s => s.trim()));
-
-    return {
-      addonFolders: addonFolders,
-      excludeTests: excludeTests,
-      skipTags: skipTagsJSON
-    };
-  }
-
-};
diff --git a/tasks/helper.js b/tasks/helper.js
deleted file mode 100644
index d880ae5..0000000
--- a/tasks/helper.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed 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.
-
-var fs = require('fs'),
-    path = require('path');
-
-exports.devServerPort = 8000;
-exports.couch = 'http://couch:5984/';
-
-exports.init = function () {
-
-  return {
-    readSettingsFile: function () {
-      if (fs.existsSync(path.join(__dirname, "../settings.json"))) {
-        return require(path.join(__dirname, "../settings.json"));
-      } else if (fs.existsSync(path.join(__dirname, '../settings.json.default.json'))) {
-        return require(path.join(__dirname, '../settings.json.default.json'));
-      }
-
-      throw new Error('settings.json file missing');
-    },
-
-    readI18nFile: function () {
-      if (fs.existsSync(path.join(__dirname, '../i18n.json'))) {
-        return require(path.join(__dirname, '../i18n.json'));
-      }
-      if (fs.existsSync(path.join(__dirname, '../i18n.json.default.json'))) {
-        return require(path.join(__dirname, '../i18n.json.default.json'));
-      }
-
-      throw new Error('i18n file missing');
-    },
-
-    processAddons: function (callback) {
-      this.readSettingsFile().deps.forEach(callback);
-    },
-
-    getFileList: function (fileExtensions, defaults) {
-      return this.readSettingsFile().deps.reduce((files, dep) => {
-        if (dep.path) {
-          fileExtensions.forEach(fileExtension => {
-            files.push(path.join(dep.path, '**/*' + fileExtension));
-          });
-        }
-        return files;
-      }, defaults);
-    }
-  };
-};
diff --git a/test/animal-db.json b/test/animal-db.json
deleted file mode 100644
index a8d7ad7..0000000
--- a/test/animal-db.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
-{"_id":"aardvark","min_weight":40,"max_weight":65,"min_length":1,"max_length":2.2,"latin_name":"Orycteropus afer","wiki_page":"http://en.wikipedia.org/wiki/Aardvark","class":"mammal","diet":"omnivore"},
-{"_id":"badger","wiki_page":"http://en.wikipedia.org/wiki/Badger","min_weight":7,"max_weight":30,"min_length":0.6,"max_length":0.9,"latin_name":"Meles meles","class":"mammal","diet":"omnivore"},
-{"_id":"elephant","wiki_page":"http://en.wikipedia.org/wiki/African_elephant","min_weight":4700,"max_weight":6050,"min_length":3.2,"max_length":4,"class":"mammal","diet":"herbivore"},
-{"_id":"flamingo","min_weight":1,"min_length":1.2,"max_weight":2.8,"max_length":1.45,"wiki_page":"https://en.wikipedia.org/wiki/American_flamingo","class":"aves","diet":"omnivore"},
-{"_id":"giraffe","min_weight":830,"min_length":5,"max_weight":1600,"max_length":6,"wiki_page":"http://en.wikipedia.org/wiki/Giraffe","class":"mammal","diet":"herbivore"},
-{"_id":"kookaburra","min_length":0.28,"max_length":0.42,"wiki_page":"http://en.wikipedia.org/wiki/Kookaburra","class":"bird","diet":"carnivore","latin_name":"Dacelo novaeguineae"},
-{"_id":"lemur","wiki_page":"http://en.wikipedia.org/wiki/Ring-tailed_lemur","min_weight":2.2,"max_weight":2.2,"min_length":0.95,"max_length":1.1,"class":"mammal","diet":"omnivore"},
-{"_id":"llama","min_weight":130,"max_weight":200,"min_length":1.7,"max_length":1.8,"latin_name":"Lama glama","wiki_page":"http://en.wikipedia.org/wiki/Llama","class":"mammal","diet":"herbivore"},
-{"_id":"panda","wiki_page":"http://en.wikipedia.org/wiki/Panda","min_weight":75,"max_weight":115,"min_length":1.2,"max_length":1.8,"class":"mammal","diet":"carnivore"},
-{"_id":"snipe","min_weight":0.08,"max_weight":0.14,"min_length":0.25,"max_length":0.27,"latin_name":"Gallinago gallinago","wiki_page":"http://en.wikipedia.org/wiki/Common_Snipe","class":"bird","diet":"omnivore"},
-{"_id":"zebra","wiki_page":"http://en.wikipedia.org/wiki/Plains_zebra","min_length":2,"max_length":2.5,"min_weight":175,"max_weight":387,"class":"mammal","diet":"herbivore"},
-{"_id":"_design/animals", "language":"javascript","views":{"by-latin-name":{"map":"function(doc){if(doc.latin_name)emit(doc.latin_name);}"}}}
-]
diff --git a/test/create-animal-db.js b/test/create-animal-db.js
deleted file mode 100644
index 1e5205a..0000000
--- a/test/create-animal-db.js
+++ /dev/null
@@ -1,188 +0,0 @@
-const request = require('request');
-const async = require('async');
-
-const animals = require('../test/animal-db.json');
-
-module.exports = createAnimalDb;
-
-function createAnimalDb (url, cb) {
-
-  deleteDatabase('animaldb', () => {
-    createAnimalDb();
-  });
-
-
-  function deleteDatabase (db, cb) {
-    request({
-      uri: `${url}/${db}`,
-      method: 'DELETE',
-      json: true,
-      body: {}
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      cb();
-    });
-  }
-
-  function createAnimalDb () {
-    request({
-      uri: `${url}/animaldb/`,
-      method: 'PUT',
-      json: true,
-      body: {}
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      bulkLoadDocs();
-    });
-  }
-
-  function bulkLoadDocs () {
-    request({
-      uri: `${url}/animaldb/_bulk_docs`,
-      method: 'POST',
-      json: true,
-      body: {
-        docs: animals
-      }
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      async.waterfall([
-        (cb) => {
-          replicate(`${url}/animaldb`, `${url}/animaldb-copy`, true, cb);
-        },
-        (cb) => {
-          replicate(`${url}/animaldb`, `${url}/animaldb-copy-2`, true, cb);
-        },
-        (cb) => {
-          alterZebraDocs(cb);
-        },
-        (cb) => {
-            alterAnimalDesignDoc(cb)
-        },
-        (cb) => {
-          replicate(`${url}/animaldb-copy`, `${url}/animaldb`, false, cb);
-        },
-        (cb) => {
-          replicate(`${url}/animaldb-copy-2`, `${url}/animaldb`, false, cb);
-        },
-        (cb) => {
-          deleteDatabase('animaldb-copy', cb);
-        },
-        (cb) => {
-          deleteDatabase('animaldb-copy-2', cb);
-        },
-        (cb) => {
-
-          request({
-            uri: `${url}/animaldb/${encodeURIComponent('_design/conflicts')}`,
-            method: 'PUT',
-            json: true,
-            body: {
-              _id: "_design/conflicts",
-              language: "javascript",
-              "views":{"new-view":{"map":"function (doc) {\n  emit(doc._id, 1);\n}"}}
-            }
-          }, (err, res, body) => {
-            if (err) {
-              throw err;
-            }
-
-            cb();
-          });
-
-        }
-      ], (err, result) => {
-        cb();
-      });
-    });
-  }
-
-  function replicate (source, target, createTarget, cb) {
-    request({
-      uri: `${url}/_replicate`,
-      method: 'POST',
-      json: true,
-      body: {
-        source: source,
-        target: target,
-        create_target: createTarget
-      }
-    }, (err, res, body) => {
-      if (err) {
-        throw err;
-      }
-
-      cb(null);
-
-    });
-  }
-
-  function getRev (db, id, cb) {
-    request({
-      uri: `${url}/${db}/${id}`,
-      json: true
-    }, (err, res, body) => {
-      cb(null, body._rev);
-    });
-  }
-
-  function updateDoc (db, id, data, cb) {
-
-    getRev(db, id, (err, rev) => {
-      alterDoc(db,id, data, rev, cb);
-    });
-  }
-
-  function alterDoc (db, id, data, rev, cb) {
-    data._rev = rev;
-
-    request({
-      uri: `${url}/${db}/${id}`,
-      json: true,
-      method: 'PUT',
-      body: data
-    }, (err, res, body) => {
-      cb(null);
-    });
-  }
-
-  function alterZebraDocs (cb) {
-
-    updateDoc('animaldb','zebra', {
-      color: 'black & white'
-    }, () => {
-      updateDoc('animaldb-copy', 'zebra', {
-        color: 'white'
-      }, () => {
-        updateDoc('animaldb-copy-2', 'zebra', {
-          color: 'green'
-        }, cb);
-      });
-    });
-}
-
-    function alterAnimalDesignDoc (cb) {
-
-        updateDoc('animaldb','_design/animals', {
-            color: 'black & white'
-        }, () => {
-            updateDoc('animaldb-copy', '_design/animals', {
-                color: 'white'
-            }, () => {
-                updateDoc('animaldb-copy-2', '_design/animals', {
-                    color: 'green'
-                }, cb);
-            });
-        });
-    }
-
-}
diff --git a/test/mocha/testUtils.js b/test/mocha/testUtils.js
deleted file mode 100644
index 792d2dd..0000000
--- a/test/mocha/testUtils.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Licensed 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.
-
-import _ from 'lodash';
-
-var restore = function (fn) {
-  if (fn.restore) {
-    fn.restore();
-  }
-};
-
-export default {
-  restore: restore
-};
diff --git a/test/nightwatch_tests/custom-commands/auth/loginToGUI.js b/test/nightwatch_tests/custom-commands/auth/loginToGUI.js
deleted file mode 100644
index eb14595..0000000
--- a/test/nightwatch_tests/custom-commands/auth/loginToGUI.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed 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.
-
-exports.command = LoginToGui;
-
-function LoginToGui (user, pw) {
-
-  const client = this;
-  const waitTime = client.globals.maxWaitTime;
-  const baseUrl = client.options.launch_url;
-
-  const username = user || client.options.fauxton_username;
-  const password = pw || client.options.password;
-
-  client
-    .resizeWindow(1200, 1200)
-    .url(baseUrl + '/#/login')
-    .waitForElementPresent('a[href="#/login"]', 50000, false)
-    .click('a[href="#/login"]')
-    .waitForElementVisible('.couch-login-wrapper', waitTime, false)
-    .waitForElementVisible('#username', waitTime, false)
-    .setValue('.couch-login-wrapper #username', [username])
-
-    .waitForElementVisible('#password', waitTime, false)
-    .setValue('.couch-login-wrapper #password', [password])
-
-    .clickWhenVisible('#submit')
-
-    .closeNotification()
-    .waitForElementPresent('[data-name="jump-to-db"]', waitTime, false)
-
-    // important! wait for the db page to fully load. This was the cause of many bugs
-    .waitForElementVisible('#dashboard-content table.databases', waitTime, false);
-
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js b/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js
deleted file mode 100644
index 1de4abd..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDatabaseCreated.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-function CheckForDatabaseCreated () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDatabaseCreated, events.EventEmitter);
-
-CheckForDatabaseCreated.prototype.command = function (databaseName, timeout) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  checkForDatabaseCreated(couchUrl, databaseName, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDatabaseCreated;
diff --git a/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js b/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js
deleted file mode 100644
index a48362c..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDatabaseDeleted.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForDatabaseDeleted () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDatabaseDeleted, events.EventEmitter);
-
-CheckForDatabaseDeleted.prototype.command = function (databaseName, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for db to disappear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    request(couchUrl + '/_all_dbs', function (er, res, body) {
-      if (body) {
-        var reg = new RegExp('"' + databaseName + '"', 'g');
-        if (!reg.test(body)) {
-          clearTimeout(timeOutId);
-          console.log('database not there: ' + databaseName);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForDatabaseDeleted;
diff --git a/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js b/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js
deleted file mode 100644
index 87d6b4e..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDocumentCreated.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentCreated = commandHelper.checkForDocumentCreated;
-
-function CheckForDocumentCreated () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDocumentCreated, events.EventEmitter);
-
-CheckForDocumentCreated.prototype.command = function (doc, timeout, db) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!db) {
-    db = helpers.testDatabaseName;
-  }
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  const url = [couchUrl, db, doc].join('/');
-
-  console.log('checking this doc exists: ', url);
-  checkForDocumentCreated(url, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDocumentCreated;
diff --git a/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js b/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js
deleted file mode 100644
index 7b28821..0000000
--- a/test/nightwatch_tests/custom-commands/checkForDocumentDeleted.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentDeleted = commandHelper.checkForDocumentDeleted;
-
-function CheckForDocumentDeleted () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForDocumentDeleted, events.EventEmitter);
-
-CheckForDocumentDeleted.prototype.command = function (doc, timeout, db) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!db) {
-    db = helpers.testDatabaseName;
-  }
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  const url = [couchUrl, db, doc].join('/');
-
-  console.log('checking this doc is deleted: ', url);
-  checkForDocumentDeleted(url, timeout, () => {
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CheckForDocumentDeleted;
diff --git a/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js b/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js
deleted file mode 100644
index d02d95b..0000000
--- a/test/nightwatch_tests/custom-commands/checkForStringNotPresent.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForStringNotPresent () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForStringNotPresent, events.EventEmitter);
-
-CheckForStringNotPresent.prototype.command = function (path, string, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for string to disappear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    var url = [couchUrl, path].join('/');
-
-    request(url, function (er, res, body) {
-      if (body) {
-        if (body.indexOf(string) === -1) {
-          clearTimeout(timeOutId);
-          console.log('string disappeared: ' + string);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForStringNotPresent;
diff --git a/test/nightwatch_tests/custom-commands/checkForStringPresent.js b/test/nightwatch_tests/custom-commands/checkForStringPresent.js
deleted file mode 100644
index 78dfbb8..0000000
--- a/test/nightwatch_tests/custom-commands/checkForStringPresent.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-function CheckForStringPresent () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CheckForStringPresent, events.EventEmitter);
-
-CheckForStringPresent.prototype.command = function (path, string, timeout) {
-  var couchUrl = this.client.options.db_url;
-
-  if (!timeout) {
-    timeout = helpers.maxWaitTime;
-  }
-
-  var timeOutId = setTimeout(function () {
-    throw new Error('timeout waiting for string to appear');
-  }, timeout);
-
-  var intervalId = setInterval(function () {
-    var url = [couchUrl, path].join('/');
-
-    request(url, function (er, res, body) {
-      if (body) {
-        if (body.indexOf(string) !== -1) {
-          clearTimeout(timeOutId);
-          console.log('string found: ' + string);
-          clearInterval(intervalId);
-          this.emit('complete');
-        }
-      }
-    }.bind(this));
-  }.bind(this), 1000);
-
-  return this;
-};
-
-module.exports = CheckForStringPresent;
diff --git a/test/nightwatch_tests/custom-commands/clickWhenVisible.js b/test/nightwatch_tests/custom-commands/clickWhenVisible.js
deleted file mode 100644
index b7953e3..0000000
--- a/test/nightwatch_tests/custom-commands/clickWhenVisible.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed 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.
-
-const helpers = require('../helpers/helpers.js');
-
-exports.command = function(element, waitTime, scrollIntoView = true) {
-
-  if (waitTime === undefined) {
-    waitTime = helpers.maxWaitTime;
-  }
-
-  this.waitForElementVisible(element);
-
-  if (scrollIntoView) {
-    this.execute(function(selector) {
-      document.querySelector(selector).scrollIntoView();
-    }, [element]);
-  }
-
-  this.pause(200).click(element);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/closeNotification.js b/test/nightwatch_tests/custom-commands/closeNotification.js
deleted file mode 100644
index 7b3fc66..0000000
--- a/test/nightwatch_tests/custom-commands/closeNotification.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-
-var helpers = require('../helpers/helpers.js');
-
-exports.command = function () {
-  var client = this,
-      dismissSelector = '.Toastify__toast-container .Toastify__toast-body';
-
-  client
-    .waitForElementVisible(dismissSelector, helpers.maxWaitTime, false)
-    .click(dismissSelector)
-    .waitForElementNotPresent(dismissSelector, helpers.maxWaitTime, false);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/closeNotifications.js b/test/nightwatch_tests/custom-commands/closeNotifications.js
deleted file mode 100644
index 0116366..0000000
--- a/test/nightwatch_tests/custom-commands/closeNotifications.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Licensed 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.
-
-var helpers = require('../helpers/helpers.js');
-
-exports.command = function () {
-  var client = this,
-      dismissSelector = '.Toastify__toast-container .Toastify__toast-body';
-
-  client
-    .waitForElementVisible(dismissSelector, helpers.maxWaitTime, false)
-    .keys(client.Keys.ESCAPE)
-    .waitForElementNotPresent(dismissSelector, helpers.maxWaitTime, false);
-
-  return this;
-};
diff --git a/test/nightwatch_tests/custom-commands/createAnimalDb.js b/test/nightwatch_tests/custom-commands/createAnimalDb.js
deleted file mode 100644
index e897272..0000000
--- a/test/nightwatch_tests/custom-commands/createAnimalDb.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Licensed 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.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-const createAnimalDbHelper = require('../../create-animal-db.js');
-function CreateAnimalDb () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateAnimalDb, events.EventEmitter);
-
-CreateAnimalDb.prototype.command = function (databaseName) {
-
-  const couchUrl = this.client.options.db_url;
-
-  createAnimalDbHelper(couchUrl, () => {
-
-    checkForDatabaseCreated(couchUrl, 'animaldb', helpers.maxWaitTime, () => {
-      this.emit('complete');
-    });
-
-  });
-
-  return this;
-};
-
-module.exports = CreateAnimalDb;
diff --git a/test/nightwatch_tests/custom-commands/createDatabase.js b/test/nightwatch_tests/custom-commands/createDatabase.js
deleted file mode 100644
index 617a84a..0000000
--- a/test/nightwatch_tests/custom-commands/createDatabase.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-const commandHelper = require('./helper.js');
-const checkForDatabaseCreated = commandHelper.checkForDatabaseCreated;
-
-function CreateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateDatabase, events.EventEmitter);
-
-CreateDatabase.prototype.command = function (databaseName) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-
-
-  nano.db.create(databaseName).then(() => {
-    console.log('nano - created a database: ' + databaseName);
-    const timeout = helpers.maxWaitTime;
-    const couchUrl = this.client.options.db_url;
-
-    checkForDatabaseCreated(couchUrl, databaseName, timeout, () => {
-      this.emit('complete');
-    });
-  }).catch(err => {
-    console.log('Error in CreateDatabase custom command. Db: ' + databaseName, 'Reason:', err.message);
-    this.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CreateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/createDocument.js b/test/nightwatch_tests/custom-commands/createDocument.js
deleted file mode 100644
index bd39afb..0000000
--- a/test/nightwatch_tests/custom-commands/createDocument.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    request = require('request');
-
-const commandHelper = require('./helper.js');
-const checkForDocumentCreated = commandHelper.checkForDocumentCreated;
-
-function CreateDocument () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateDocument, events.EventEmitter);
-
-CreateDocument.prototype.command = function (documentName, databaseName, docContents) {
-  const couchUrl = this.client.options.db_url;
-
-  if (!docContents) {
-    docContents = { dummyKey: 'testingValue' };
-  }
-  docContents._id = documentName;
-
-  request({
-    method: 'POST',
-    uri: couchUrl + '/' + databaseName + '?w=3',
-    body: docContents,
-    json: true
-  }, (err, res, body) => {
-    if (err) {
-      console.log('Error in nano CreateDocument Function: ' + documentName + ', in database: ' + databaseName, err.message);
-    }
-    console.log('nano  - created a doc: ' + documentName + ', in database: ' + databaseName);
-
-    if (!databaseName) {
-      databaseName = helpers.testDatabaseName;
-    }
-    if (documentName.startsWith('_design/')) {
-      documentName = '_design/' + encodeURIComponent(documentName.substr(8));
-    } else {
-      documentName = encodeURIComponent(documentName);
-    }
-    const url = [couchUrl, databaseName, documentName].join('/');
-
-    checkForDocumentCreated(url, helpers.maxWaitTime, () => {
-      this.emit('complete');
-    });
-
-  });
-
-  return this;
-};
-
-module.exports = CreateDocument;
diff --git a/test/nightwatch_tests/custom-commands/createManyDocuments.js b/test/nightwatch_tests/custom-commands/createManyDocuments.js
deleted file mode 100644
index 4aa55da..0000000
--- a/test/nightwatch_tests/custom-commands/createManyDocuments.js
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function CreateManyDocuments () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(CreateManyDocuments, events.EventEmitter);
-
-CreateManyDocuments.prototype.command = function (amount, databaseName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      database = nano.use(databaseName),
-      docs = [];
-
-  for (var i = 0; i < 100; i++) {
-    docs.push({"_id": "" + i, "dummyKey": "testingValue"});
-  }
-
-  database.bulk({docs: docs}, function (err, body, header) {
-    if (err) {
-      throw err;
-    }
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = CreateManyDocuments;
diff --git a/test/nightwatch_tests/custom-commands/deleteDatabase.js b/test/nightwatch_tests/custom-commands/deleteDatabase.js
deleted file mode 100644
index 407b22c..0000000
--- a/test/nightwatch_tests/custom-commands/deleteDatabase.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function DeleteDatabase () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(DeleteDatabase, events.EventEmitter);
-
-DeleteDatabase.prototype.command = function (databaseName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url);
-
-  nano.db.destroy(databaseName, function (err, body, header) {
-    if (err) {
-      console.log('Error in nano DeleteDatabase Function: ' + databaseName, err.message);
-    }
-    console.log('nano - database: ' + databaseName + ' is deleted: ', body);
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = DeleteDatabase;
diff --git a/test/nightwatch_tests/custom-commands/deleteDocument.js b/test/nightwatch_tests/custom-commands/deleteDocument.js
deleted file mode 100644
index 3e39897..0000000
--- a/test/nightwatch_tests/custom-commands/deleteDocument.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function DeleteDocument () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(DeleteDocument, events.EventEmitter);
-
-//  !!!!!   documentName must be all lowercase for this to work
-
-DeleteDocument.prototype.command = function (databaseName, documentName) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      database = nano.use(databaseName),
-      documentRev;
-
-  database.get(documentName, function (err, body) {
-    if (!err) {
-      documentRev = body._rev;
-
-      database.destroy(documentName, documentRev, function (err, body, header) {
-        if (err) {
-          console.log('Error in nano DeleteDocument Function: (' + databaseName + ')', err.message);
-        }
-        console.log('nano - document: ' + documentName + ' in ' + databaseName + ' is deleted: ', body);
-      });
-
-    } else {
-      console.log("Error in nano- Get documentRev", err.message);
-    }
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = DeleteDocument;
diff --git a/test/nightwatch_tests/custom-commands/helper.js b/test/nightwatch_tests/custom-commands/helper.js
deleted file mode 100644
index 1c3c187..0000000
--- a/test/nightwatch_tests/custom-commands/helper.js
+++ /dev/null
@@ -1,56 +0,0 @@
-const request = require('request');
-
-exports.checkForDocumentCreated = function checkForDocumentCreated (url, timeout, cb) {
-
-  const timeOutId = setTimeout(() => {
-    throw new Error('timeout waiting for doc to appear (' + url + ')');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-
-    request(url, (er, res, body) => {
-      if (res && /^2..$/.test(res.statusCode)) {
-        clearTimeout(timeOutId);
-        clearInterval(intervalId);
-
-        cb(null);
-      }
-    });
-  }, 1000);
-};
-
-exports.checkForDatabaseCreated = function checkForDatabaseCreated (couchUrl, databaseName, timeout, cb) {
-  const timeOutId = setTimeout(() => {
-    throw new Error('Timeout ('+timeout+') waiting for db to appear');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-    request(couchUrl + '/_all_dbs', function (er, res, body) {
-      if (body) {
-        const reg = new RegExp('"' + databaseName + '"', 'g');
-        if (reg.test(body)) {
-          clearTimeout(timeOutId);
-          clearInterval(intervalId);
-          cb(null);
-        }
-      }
-    });
-  }, 1000);
-};
-
-exports.checkForDocumentDeleted = function checkForDocumentDeleted (couchUrl, timeout, cb) {
-  const timeOutId = setTimeout(() => {
-    throw new Error('timeout waiting for doc to be deleted');
-  }, timeout);
-
-  const intervalId = setInterval(() => {
-    request(couchUrl, function (er, res, body) {
-      if (res.statusCode === 404) {
-        clearTimeout(timeOutId);
-        clearInterval(intervalId);
-        cb(null);
-      }
-    });
-  }, 1000);
-
-};
diff --git a/test/nightwatch_tests/custom-commands/populateDatabase.js b/test/nightwatch_tests/custom-commands/populateDatabase.js
deleted file mode 100644
index 65a1cbf..0000000
--- a/test/nightwatch_tests/custom-commands/populateDatabase.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Licensed 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.
-'use strict';
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js'),
-    async = require('async'),
-    request = require('request');
-
-function PopulateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(PopulateDatabase, events.EventEmitter);
-
-PopulateDatabase.prototype.command = function (databaseName, count) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-  const database = nano.use(databaseName);
-  const db_url = this.client.options.db_url;
-  let i = 0;
-
-  async.whilst(
-    () => { return i < (count ? count : 20); },
-    (cb)  => {
-      i++;
-      var documentId = 'document_' + i;
-      database.insert({
-        number: i,
-        ente_ente_mango_ananas: i,
-        ente_ente_mango_ananas_res: 'foo'
-      }, documentId, cb);
-    },
-    (err) => {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          ' in database: ' + databaseName, err.message);
-      }
-
-      database.insert({
-        views: {
-          "stubview": {
-            "map": "function(doc) {\n  emit('stub', 2);\n}",
-            "reduce": "_count"
-          }
-        }
-      },
-      '_design/testdesigndoc', (er) => {
-        if (err) {
-          console.log('Error in nano populateDatabase Function: ' +
-            err.message);
-        }
-
-        createKeyView(null, () => {
-          createBrokenView(null, () => {
-            createMangoIndex(null, db_url, () => {
-              this.emit('complete');
-            });
-          });
-        });
-      });
-    }
-  );
-
-  function createKeyView (err, cb) {
-    database.insert({
-      views: {
-        "keyview": {
-          "map": "function(doc) {\n  emit(doc._id, 1);\n}"
-        }
-      }
-    },
-    '_design/keyview', function (er) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-      cb();
-    });
-  }
-
-  function createBrokenView (err, cb) {
-    database.insert({
-      views: {
-        'brokenview': {
-          'map': 'function (doc) {\n emit(doc._id, doc._id); \n}',
-          'reduce': '_sum'
-        }
-      }
-    },
-    '_design/brokenview', function (er) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-      cb();
-    });
-  }
-
-  function createConflictDesignDoc (err, db_url, cb) {
-    request({
-      uri: db_url + '/' + databaseName + '/_index',
-      method: 'PUT',
-      json: true,
-      body: {
-        _id: "_design/conflicts",
-        language: "javascript",
-        "views":{"new-view":{"map":"function (doc) {\n  emit(doc._id, 1);\n}"}}
-      }
-    }, (err, res, body) => {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-
-      cb(null);
-    });
-  }
-
-  function createMangoIndex (err, db_url, cb) {
-    request({
-      uri: db_url + '/' + databaseName + '/_index',
-      method: 'POST',
-      json: true,
-      body: {
-        index: {
-          fields: ['ente_ente_mango_ananas']
-        },
-        name: 'rocko-artischockbert',
-        type: 'json'
-      }
-    }, function (err, res, body) {
-      if (err) {
-        console.log('Error in nano populateDatabase Function: ' +
-          err.message);
-      }
-
-      cb && cb();
-    });
-  }
-
-  return this;
-};
-
-module.exports = PopulateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js b/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js
deleted file mode 100644
index 38efec8..0000000
--- a/test/nightwatch_tests/custom-commands/populateDatabaseWithConflicts.js
+++ /dev/null
@@ -1,75 +0,0 @@
-// Licensed 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.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-const request = require('request');
-
-function PopulateDatabaseWithConflicts () {
-  events.EventEmitter.call(this);
-}
-
-util.inherits(PopulateDatabaseWithConflicts, events.EventEmitter);
-
-PopulateDatabaseWithConflicts.prototype.command = function (databaseName) {
-  const nano = helpers.getNanoInstance(this.client.options.db_url);
-  const database = nano.use(databaseName);
-  const dbUrl = this.client.options.db_url;
-
-
-  database.insert({
-    hat: 'flamingo'
-  }, 'outfit1', function () {
-    createConflictingDoc(null, function () {
-      this.emit('complete');
-    }.bind(this));
-  }.bind(this));
-
-  function createConflictingDoc (err, cb) {
-    request({
-      uri: dbUrl + '/' + databaseName + '/conflictingdoc',
-      method: 'PUT',
-      json: true,
-      body: {
-        id: 'conflictingdoc',
-        rocko: 'dances'
-      }
-    }, function (err, res, body) {
-      if (err) {
-        console.log(
-          'Error in nano populateDatabase Function: ' + err.message
-        );
-      }
-      request({
-        uri: dbUrl + '/' + databaseName + '/conflictingdoc?new_edits=false',
-        method: 'PUT',
-        json: true,
-        body: {
-          _rev: '4-afae890a0310210db079b0f49fb2569d',
-          rocko: 'jumps'
-        }
-      }, function (err, res, body) {
-        if (err) {
-          console.log('Error in nano populateDatabase Function: ' +
-            err.message);
-        }
-
-        cb && cb();
-      });
-    });
-  }
-
-  return this;
-};
-
-module.exports = PopulateDatabaseWithConflicts;
diff --git a/test/nightwatch_tests/custom-commands/replicateDatabase.js b/test/nightwatch_tests/custom-commands/replicateDatabase.js
deleted file mode 100644
index 2662ebb..0000000
--- a/test/nightwatch_tests/custom-commands/replicateDatabase.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed 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.
-
-var util = require('util'),
-    events = require('events'),
-    helpers = require('../helpers/helpers.js');
-
-function ReplicateDatabase () {
-  events.EventEmitter.call(this);
-}
-
-// inherit from node's event emitter
-util.inherits(ReplicateDatabase, events.EventEmitter);
-
-ReplicateDatabase.prototype.command = function (source, target, options, callback) {
-  var that = this,
-      nano = helpers.getNanoInstance(this.client.options.db_url),
-      opts = options;
-
-
-  if (opts === undefined) {
-    opts = { create_target: false };
-  }
-
-  nano.db.replicate(source, target, { create_target: opts.create_target }, function (err, body) {
-    if (err) {
-      console.log('Nano Error in nano ReplicateDatabase Function: s:' + source + ', t:' + target, err.message);
-    }
-    console.log('Nano - replicated source: ' + source + " target:" + target);
-    // emit the complete event
-    that.emit('complete');
-  });
-
-  return this;
-};
-
-module.exports = ReplicateDatabase;
diff --git a/test/nightwatch_tests/custom-commands/waitForAttribute.js b/test/nightwatch_tests/custom-commands/waitForAttribute.js
deleted file mode 100644
index d4ec0dd..0000000
--- a/test/nightwatch_tests/custom-commands/waitForAttribute.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) 2014 Dave Koo
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-// SOFTWARE.
-
-const util = require('util');
-const events = require('events');
-const helpers = require('../helpers/helpers.js');
-const assert = require('assert');
-
-/*
- * This custom command allows us to locate an HTML element on the page and then wait until the value of a specified
- * attribute matches the provided expression (aka. the 'checker' function). It retries executing the checker function
- * every 100ms until either it evaluates to true or it reaches maxTimeInMilliseconds (which fails the test).
- * Nightwatch uses the Node.js EventEmitter pattern to handle asynchronous code so this command is also an EventEmitter.
- */
-
-function WaitForAttribute() {
-  events.EventEmitter.call(this);
-  this.startTimeInMilliseconds = null;
-}
-
-util.inherits(WaitForAttribute, events.EventEmitter);
-
-WaitForAttribute.prototype.command = function(
-  element, attribute, checker, timeoutInMilliseconds) {
-  this.startTimeInMilliseconds = new Date().getTime();
-  const self = this;
-  let message;
-
-  if (typeof timeoutInMilliseconds !== 'number') {
-    timeoutInMilliseconds = helpers.maxWaitTime;
-  }
-
-  this.check(element, attribute, checker,
-    function(result, loadedTimeInMilliseconds) {
-      if (result) {
-        message = 'waitForAttribute: ' + element + '@' + attribute +
-          '. Expression was true after ' +
-          (loadedTimeInMilliseconds - self.startTimeInMilliseconds) + ' ms.';
-      } else {
-        message = 'waitForAttribute: ' + element + '@' + attribute +
-          '. Expression wasn\'t true in ' + timeoutInMilliseconds + ' ms.';
-      }
-      assert.equal(result, true, message);
-      self.emit('complete');
-    }, timeoutInMilliseconds);
-
-  return this;
-};
-
-WaitForAttribute.prototype.check = function(
-  element, attribute, checker, callback, maxTimeInMilliseconds) {
-  const self = this;
-
-  this.api.getAttribute(element, attribute, function(result) {
-    const now = new Date().getTime();
-    if (result.status === 0 && checker(result.value)) {
-      callback(true, now);
-    } else if (now - self.startTimeInMilliseconds < maxTimeInMilliseconds) {
-      setTimeout(function() {
-        self.check(element, attribute, checker, callback,
-          maxTimeInMilliseconds);
-      }, 100);
-    } else {
-      callback(false);
-    }
-  });
-};
-
-module.exports = WaitForAttribute;
diff --git a/test/nightwatch_tests/helpers/helpers.js b/test/nightwatch_tests/helpers/helpers.js
deleted file mode 100644
index 817c22d..0000000
--- a/test/nightwatch_tests/helpers/helpers.js
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed 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.
-
-var nano = require('nano');
-var async = require('async');
-
-
-function getRandomInt(min, max) {
-  return Math.floor(Math.random() * (max - min)) + min;
-}
-
-const dbName = 'fauxton-selenium-tests-' + getRandomInt(1, 20000);
-
-function createDatabase(nano, database) {
-  return nano.db.create(database).catch(err => {
-    //Tolerate database already existing
-    if (err && err.statusCode !== 412) {
-      throw err;
-    }
-  });
-}
-
-module.exports = {
-  asyncHookTimeout: 20000,
-  maxWaitTime: 30000,
-  testDatabaseName: dbName,
-
-  getNanoInstance: function (dbURL) {
-    console.log('DBURL:', dbURL);
-    return nano(dbURL);
-  },
-
-  beforeEach: function (browser, done) {
-    var nano = module.exports.getNanoInstance(browser.options.db_url),
-      database = module.exports.testDatabaseName;
-
-    console.log('nano setting up database', database);
-    // clean up the database we created previously
-    nano.db.destroy(database).catch(err => {
-      if (err && err.message !== 'Database does not exist.' && err.message !== 'missing') {
-        console.log('Error in setting up ' + database, err.message);
-      }
-    }).then(() => {
-      // create a new database
-      nano.db.create(database).catch(err => {
-        console.log('Error in setting up ' + database, err.message);
-      }).then(() => {
-        // Create required dbs
-        const databaseToCreate = ["_users", "_replicator", "_global_changes"];
-        const promises = databaseToCreate.map(db => createDatabase(nano, db).catch(() => {}));
-
-        Promise.all(promises).then(function () {
-          done();
-        }).catch(function (err) {
-          console.log("Unable to create required databases:" + JSON.stringify(err));
-          done();
-        });
-      });
-    });
-  },
-
-  afterEach: function (browser, done) {
-    // Delete test database
-    var nano = module.exports.getNanoInstance(browser.options.db_url),
-      database = module.exports.testDatabaseName;
-
-    console.log('nano cleaning up', database);
-    var destroyDbProm = nano.db.destroy(database).catch(err => {
-      if (err && err.message !== 'Database does not exist.') {
-        console.warn('Error in cleaning up ' + database, err.message);
-      }
-    });
-
-    // Prints the browser's console logs in case it's a failure
-    var promGetLog = Promise.resolve();
-    if (browser && browser.sessionId && browser.currentTest && browser.currentTest.results) {
-      var res = browser.currentTest.results;
-      if (res.errors > 0 || res.failed > 0) {
-        promGetLog = new Promise((resolve, reject) => {
-          try {
-            browser.getLog('browser', (logEntriesArray) => {
-              // !! IMPORTANT: Ends the session since the Nightwatch settings have "end_session_on_fail: false"
-              try {
-                browser.end();
-              } catch (e) {}
-              resolve(logEntriesArray);
-            });
-          } catch (err) {
-            reject(err);
-          }
-        }).catch(err => {
-          console.warn('Failed to fetch browser logs', err);
-        }).then(logEntriesArray => {
-          if (logEntriesArray) {
-            console.warn('Browser logs for failed test:');
-            logEntriesArray.forEach(function(log) {
-              console.warn('   [' + log.level + '] ' + ' : ' + log.message);
-            });
-          }
-        });
-      }
-    }
-
-    Promise.all([promGetLog, destroyDbProm]).then(() => {
-      done();
-    });
-  }
-};
diff --git a/test/nightwatch_tests/nightwatch.json.underscore b/test/nightwatch_tests/nightwatch.json.underscore
deleted file mode 100644
index 8a9bb30..0000000
--- a/test/nightwatch_tests/nightwatch.json.underscore
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "src_folders": <%= src_folders %>,
-  "custom_commands_path": <%= custom_commands_path %>,
-  "globals_path": "<%- globals_path %>",
-
-  "output_folder" : "./test/nightwatch_tests/reports",
-  "custom_assertions_path" : "",
-  "live_output" : false,
-
-  "webdriver": {
-    "ssl": false,
-    "password": "<%- password %>"
-  },
-  "selenium" : {
-    "start_process" : false,
-    "server_path" : "",
-    "log_path" : "",
-    "host" : "127.0.0.1",
-    "port" : "<%- selenium_port %>",
-    "cli_args" : {
-      "webdriver.chrome.driver" : "",
-      "webdriver.ie.driver" : "",
-      "webdriver.firefox.profile" : ""
-    }
-  },
-
-  "test_settings" : {
-    "default" : {
-      "fauxton_username": "<%- fauxton_username %>",
-      "password": "<%- password %>",
-      "launch_url": "http://<%- fauxton_host %>:<%- fauxton_port %>",
-      "db_url": "<%- db_protocol %>://<%- fauxton_username %>:<%- password %>@<%- db_host %>:<%- db_port %>",
-      "end_session_on_fail": false,
-      "skip_testcases_on_fail": true,
-      "selenium_host" : "127.0.0.1",
-      "selenium_port" : "<%- selenium_port %>",
-      "silent" : true,
-      "disable_colors": false,
-      "screenshots" : {
-        "enabled" : true,
-        "path" : "./test/nightwatch_tests/reports"
-      },
-      "desiredCapabilities" : {
-        "browserName" : "chrome",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "chromeOptions": {
-          "w3c": false
-        }
-      },
-      "exclude": <%= exclude_tests %>,
-      "skiptags": <%= skiptags %>
-    },
-
-    "chrome" : {
-      "desiredCapabilities" : {
-        "browserName" : "chrome",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "chromeOptions" : {
-          "args" : ["window-size=1400,900", "--no-sandbox"]
-        }
-      }
-    },
-
-    "saucelabs" : {
-      "selenium_host" : "ondemand.saucelabs.com",
-      "selenium_port" : 80,
-      "username" : "${SAUCE_USERNAME}",
-      "access_key" : "${SAUCE_ACCESS_KEY}",
-      "silent" : true,
-      "output" : true,
-      "screenshots" : {
-        "enabled" : false,
-        "path" : ""
-      },
-      "desiredCapabilities": {
-        "name" : "test-example",
-        "browserName": "chrome",
-        "tunnel-identifier":"${TRAVIS_JOB_NUMBER}"
-      },
-      "globals" : {
-        "myGlobal" : "some_sauce_global"
-      },
-      "selenium" : {
-        "start_process" : false
-      }
-    },
-
-    "phantomjs" : {
-      "desiredCapabilities" : {
-        "browserName" : "phantomjs",
-        "javascriptEnabled" : true,
-        "acceptSslCerts" : true,
-        "phantomjs.binary.path" : "/path/to/phantomjs"
-      }
-    },
-
-    "browserstack" : {
-      "selenium" : {
-        "start_process" : false
-      },
-      "selenium_host" : "hub.browserstack.com",
-      "selenium_port" : 80,
-      "silent" : true,
-      "desiredCapabilities": {
-        "name" : "test-example",
-        "browserName": "firefox",
-        "browserstack.user" : "...",
-        "browserstack.key" : "..."
-      }
-    }
-  }
-}
diff --git a/test/nightwatch_tests/nightwatch_README.md b/test/nightwatch_tests/nightwatch_README.md
deleted file mode 100644
index a9482de..0000000
--- a/test/nightwatch_tests/nightwatch_README.md
+++ /dev/null
@@ -1,87 +0,0 @@
-## Nightwatch Functional Browser Test
-
-Hello.
-
-[Nightwatch Homepage](http://nightwatchjs.org/)   
-[Nightwatch GitHub Repo](https://github.com/beatfactor/nightwatch)
-
-There are several nightwatch tests already written for Fauxton.
-
-Before running the browser tests, you need to first set it up. Editing your `settings.json` file (or
-`settings.json.default` or whatever you're using) and find the following section near the bottom:  
-
-```javascript
-    "nightwatch": {
-      "username": "",
-      "password": "",
-      "launch_url": "",
-      "custom_commands_path": "test/nightwatch_tests/custom-commands",
-      "globals_path": "test/nightwatch_tests/helpers/helpers.js"
-    }
-```
-
-There, add the `username`, `password` and `launch_url` values. The username and password needs to be an admin
-account already setup on your CouchDB installation. The `launch_url` should be the base URL of your local installation,
-minus the "http://" prefix, e.g. `localhost:8000` or `thomas.dev:8000`.
-
-To run the test:
-
-    $ npm install
-    $ grunt nightwatch
-
-
-You can run individual single tests by running
-
-    $ grunt nightwatch --file="createsDatabase"
-
-if you want to run the testfile `createsDatabase.js`.
-
-## Writing Tests
-You can contribute by writing tests for Fauxton as well.  
-
-Please take a look at the existing examples in the `app/addons/documents/tests` or `app/addons/databases/tests` folders.
-
-Below are a few caveats to writing tests.
-
-1. When you write a new test, if the component you are testing doesn't have any nightwatch tests already, you will
-need to create a folder for it, and add its file path to the list of test folders in `tests/nightwatch_test/nightwatch.json`.
-1. Before each test is run, a database called'fauxton-selenium-test' is created, then deleted after each test.
-2. Use `.verify()` instead of `.assert()` in your tests. This will allow the tests to continue, even if the browser
-has failed, and will not exit or skip subsequent tests.
-3. `.waitForElementNotPresent()`, `.waitForElementNotVisible()`, `.waitForElementPresent()`, `.waitForElementVisible()`,
-will exit testing by default if the Element is not found. There is a third argument, 'abortOnFailure', if you set this
-to 'false', the rest of the tests will continue even if this assertion fails.
-> there is a custom function called clickWhenReady which will wait for an element to visible, then click on it
-
-4. Sometimes `.click()` doesn't work reliably (most likely if the element you are clicking on doesn't have an
-individual ID selector). You can use dom selectors to simulate a click by using `.execute('document.querySelector("#CSS Selector.HERE").click();')`.  
-5. The function `.pause(time)` is sometimes necessary, although we have tried to avoid excessive use of a hard coded 
-pausing. Instead try and make use of the `.waitForElement` functions instead of `.pause(time)`.
-
-## Nightwatch Files in Fauxton
-There are several Nightwatch related files spread out in the couchdb-fauxton folder.
-
-1. Individual browser tests are kept in
-
-        couchdb-fauxton/app/addons/[component]/test/nightwatch
-
-    where [component] is the area you are testing. For example, there is an individual test located in:
-
-        couchdb-fauxton/app/addons/documents/tests/nightwatch/createsDocument.js
-
-2. Custom Commands, Global helper functions, and the Configuration are kept in
-
-        couchdb-fauxton/tests/nightwatch_tests
-
-   The configuration file is `nightwatch.json`. Please note that this file is auto-generated by grunt every time you
-   run the nightwatch task. It examines the content of your `settings.json` file to figure out what tests to run.
-   Global helper functions are in `helpers/helpers.js`.  
-   Custom commands are `custom-commands/functionName.js`.
-   -  The custom command name is the name of the file itself, and it needs to follow either the `loginToGUI.js`
-   pattern, or the `createDatabase.js` pattern (for async commands).    
-
-   Selenium related files are kept in the `selenium` folder
-
-3. Node  
-
-   The folder `node_modules/nightwatch` contains the program files. You will not need to edit these files, but there are some provided examples in there to look at.
diff --git a/tests.md b/tests.md
deleted file mode 100644
index e9033f0..0000000
--- a/tests.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Tests
-
-Fauxton has both **unit tests**, implemented with [Jest](https://facebook.github.io/jest/), and **end-to-end tests** using [Nightwatch](http://nightwatchjs.org/) against Selenium.
-
-## Unit tests
-
-To run all tests:
-
-    npm run test
-    
-You can run only specific tests by providing a pattern or filename.
-
-E.g.: to run tests in the `filename.test.js` file:
-
-    npm run test -- filename.test.js
-
-E.g.: to run tests under the `addons/cors` path:
-
-    npm run test -- addons/cors
-
-## End-to-end tests
-
-To run selenium locally you need Docker installed. Selenium runs in a Docker container and connects to a CouchDB instance in another container. To start them run the command:
-
-    npm run docker:up
-
-You can run `npm run docker:logs` to see when the CouchDB instance is ready to go. You also need a Fauxton server instance runnning:
-
-    grunt debugDev && DIST=./dist/debug ./bin/fauxton
-
-Finally to run the tests:
-
-    grunt nightwatch
-
-Or to run only one file:
-
-    grunt nightwatch --file=viewEdit
-
-View the package.json `scripts` section for some other useful docker commands.
-
-### Debugging Selenium tests
-
-To debug and view a failing selenium test, you need to run the selenium container with vnc built into it:
-
-    npm run docker:debug-up
-
-Once it is up and running you can connect to it with any VNC client on `127.0.0.1:5900`. On MacOSX open safari
-and type `vnc://127.0.0.1:5900`. That will open screen sharing. It will then prompt for the password which is `secret`.
-
-After that run a Fauxton server instance and the nightwatch tests you want to debug.
-
-
-### Omitting Nightwatch tests
-
-If you need to omit particular tests from running you can add a `testBlacklist` option to the nightwatch section of
-your settings.json file. That defines an object of the following form:
-
-```javascript
-// ...
-"nightwatch": { 
-  // ...
-  "testBlacklist": {
-    "documents": ["*"],
-    "databases": [
-      "checkDatabaseTooltip.js",
-      "createsDatabase.js"
-    ]
-  }
-}
-// ...
-
-```
-
-The properties (`documents`, `databases`) map to a particular addon folder name (see `app/addons`). The values
-should be an array of tests that you don't want to run. `*` will flag all tests from being ran, otherwise you
-just enter the names of the files to omit.
-
-### Cleaning up old tests
-
-Each test run generates a new database. Sometimes these databases will not be removed. You can run `npm run remove-test-dbs` to clean up any left over databases.
diff --git a/version-check.js b/version-check.js
deleted file mode 100644
index c8f6c23..0000000
--- a/version-check.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var semver = require('semver');
-
-var version = process.version.replace(/^v/, '');
-
-if (!semver.satisfies(version, '>=4')) {
-  console.error('Error:');
-  console.error('Fauxton needs Node 4 or greater to work');
-  process.exit(1);
-}
diff --git a/webpack.config.dev.js b/webpack.config.dev.js
deleted file mode 100644
index bb8cb07..0000000
--- a/webpack.config.dev.js
+++ /dev/null
@@ -1,121 +0,0 @@
-// Licensed 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.
-const webpack = require('webpack');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const path = require('path');
-const settings = require('./tasks/helper')
-  .init()
-  .readSettingsFile()
-  .template
-  .development;
-
-module.exports = {
-
-  mode: 'development',
-
-  entry: {
-    bundle: ['core-js/fn/array', 'core-js/fn/string/ends-with', 'core-js/fn/string/starts-with', 'core-js/fn/object', 'core-js/fn/symbol', 'core-js/fn/promise', 'regenerator-runtime/runtime', './app/main.js'] //Our starting point for our development.
-  },
-
-  output: {
-    path: path.join(__dirname, '/dist/debug/'),
-    filename: 'dashboard.assets/js/[name].js'
-  },
-
-  plugins: [
-    new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}),
-    new HtmlWebpackPlugin(Object.assign({
-      template: settings.src,
-      title: 'Project Fauxton',
-      filename: 'index.html',
-      generationLabel: 'Fauxton Dev',
-      generationDate: new Date().toISOString()
-    }, settings.variables)),
-  ],
-  module: {
-    rules: [
-      {
-        test: /\.jsx?$/,
-        enforce: "pre",
-        use: ['eslint-loader'],
-        exclude: /node_modules/
-      },
-      {
-        test: /\.jsx?$/,
-        exclude: /node_modules/,
-        use: 'babel-loader'
-      },
-      {
-        test: require.resolve('jquery'),
-        use: [{
-          loader: 'expose-loader',
-          options: 'jQuery'
-        },
-        {
-          loader: 'expose-loader',
-          options: '$'
-        }]
-      },
-      {
-        test: require.resolve("backbone"),
-        use: [{
-          loader: 'expose-loader',
-          options: 'Backbone'
-        }]
-      },
-      {
-        test: /\.less$/,
-        use: [
-          "style-loader",
-          "css-loader",
-          {
-            loader: "less-loader",
-            options: {
-              modifyVars: {
-                largeLogoPath: "'" + settings.variables.largeLogoPath + "'",
-                smallLogoPath: "'" + settings.variables.smallLogoPath + "'"
-              }
-            }
-          }
-        ]
-      },
-      {
-        test: /\.css$/,
-        use: [
-          "style-loader",
-          "css-loader"
-        ]
-      },
-      {
-        test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
-        loader: 'url-loader?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      {
-        test: /\.woff2(\?\S*)?$/,   loader: 'url-loader?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      {
-        test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
-      },
-      { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/fonts/[name].[ext]' },
-      { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-      { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-      { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
-    ]
-  },
-  resolve: {
-    extensions: ['*', '.js', '.jsx'], //We can use .js and React's .jsx files using Babel
-    alias: {
-      "underscore": "lodash",
-    }
-  },
-  devtool: 'source-map'
-};
diff --git a/webpack.config.release.js b/webpack.config.release.js
deleted file mode 100644
index 6063a16..0000000
--- a/webpack.config.release.js
+++ /dev/null
@@ -1,152 +0,0 @@
-// Licensed 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.
-const webpack = require('webpack');
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const path = require('path');
-const settings = require('./tasks/helper')
-  .init()
-  .readSettingsFile()
-  .template
-  .release;
-
-module.exports = {
-
-  mode: 'production',
-
-  // Entry point for static analyzer:
-  entry: {
-    bundle: ['core-js/fn/array', 'core-js/fn/string/ends-with', 'core-js/fn/string/starts-with',  'core-js/fn/object', 'core-js/fn/symbol', 'core-js/fn/promise', 'regenerator-runtime/runtime', './app/main.js']
-  },
-
-  output: {
-    path: path.join(__dirname, '/dist/release/'),
-    filename: 'dashboard.assets/js/[name].[chunkhash].js',
-    chunkFilename: 'dashboard.assets/js/[name].[chunkhash].js'
-  },
-
-  plugins: [
-    // moment doesn't offer a modular API, so manually remove locale
-    // see https://github.com/moment/moment/issues/2373
-    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
-    new HtmlWebpackPlugin(Object.assign({
-      template: settings.src,
-      title: 'Project Fauxton',
-      filename: 'index.html',
-      generationLabel: 'Fauxton Release',
-      generationDate: new Date().toISOString()
-    }, settings.variables)),
-    new MiniCssExtractPlugin({
-      filename: 'dashboard.assets/css/styles.[chunkhash].css',
-      chunkFilename: 'dashboard.assets/css/styles.[chunkhash].css'
-    })
-  ],
-
-  optimization: {
-    splitChunks: {
-      cacheGroups: {
-        vendor: {
-          test: /[\\/]node_modules[\\/]/,
-          chunks: 'initial',
-          name: 'vendor',
-          priority: 10,
-          enforce: true
-        },
-      }
-    },
-    runtimeChunk: {
-      name: "manifest",
-    }
-  },
-
-  resolve: {
-    extensions: ['*', '.js', '.jsx'],
-    alias: {
-      "underscore": "lodash"
-    }
-  },
-
-  module: {
-    rules: [{
-      test: /\.jsx?$/,
-      enforce: "pre",
-      use: ['eslint-loader'],
-      exclude: /node_modules/
-    },
-    {
-      test: /\.jsx?$/,
-      exclude: /node_modules/,
-      use: 'babel-loader'
-    },
-    {
-      test: require.resolve('jquery'),
-      use: [{
-        loader: 'expose-loader',
-        options: 'jQuery'
-      },
-      {
-        loader: 'expose-loader',
-        options: '$'
-      }]
-    },
-    {
-      test: require.resolve("backbone"),
-      use: [{
-        loader: 'expose-loader',
-        options: 'Backbone'
-      }]
-    },
-    {
-      test: /\.less/,
-      use: [
-        {
-          loader: MiniCssExtractPlugin.loader,
-          options: {
-            publicPath: '../../',
-            hmr: false,
-          },
-        },
-        "css-loader",
-        {
-          loader: "less-loader",
-          options: {
-            modifyVars: {
-              largeLogoPath: "'" + settings.variables.largeLogoPath + "'",
-              smallLogoPath: "'" + settings.variables.smallLogoPath + "'"
-            }
-          }
-        }
-      ]
-    },
-    {
-      test: /\.css$/, use: [
-        'style-loader',
-        'css-loader'
-      ]
-    },
-    {
-      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
-      loader: 'url-loader?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    {
-      test: /\.woff2(\?\S*)?$/,   loader: 'url-loader?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    {
-      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
-    },
-    { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/fonts/[name].[ext]' },
-    { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-    { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file-loader?name=dashboard.assets/img/[name].[ext]' },
-    { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url-loader?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
-    ]
-  }
-};
