diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c09987e --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +.idea/ +*.log +craftbeerpi.db +**/node_modules/* +*.pyc +*.templog + +modules/plugins/* +!modules/plugins/my_plugin/__init__.py +!modules/plugins/cbpi**/__init__.py +*.pyc + + diff --git a/README.md b/README.md index 8b938f5..bb2207a 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ -# craftbeerpi3 +#CraftBeerPi V3.0 + +This is CraftBeerPi version 3.0. It's currently in beta status. + +## Installation + +Open a terminal window on Raspberry Pi and type: + + git clone http://github.com/craftbeerpi/craftbeerpi + +This will download (clone) the software to your local Raspberry Pi. + +Type cd craftbeerpi to navigate into the craftbeerpi folder. + +Type sudo ./install.sh + +## ATTENTION + +CraftBeerPi 3.0 is a complete rewrite. Server as well as user interface. I recommend to use a second SD card for testing. + + diff --git a/config/craftbeerpiboot b/config/craftbeerpiboot new file mode 100644 index 0000000..ede236f --- /dev/null +++ b/config/craftbeerpiboot @@ -0,0 +1,62 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: craftbeerpi +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Put a short description of the service here +# Description: Put a long description of the service here +### END INIT INFO + +# Change the next 3 lines to suit where you install your script and what you want to call it +DIR=#DIR# +DAEMON=$DIR/run.py +DAEMON_NAME=CraftBeerPI + +# Add any command line options for your daemon here +DAEMON_OPTS="" + +# This next line determines what user the script runs as. +# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python. +DAEMON_USER=root + +# The process ID of the script when it runs is stored here: +PIDFILE=/var/run/$DAEMON_NAME.pid + +. /lib/lsb/init-functions + +do_start () { + log_daemon_msg "Starting system $DAEMON_NAME daemon" + start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --chdir $DIR --startas $DAEMON -- $DAEMON_OPTS + log_end_msg $? +} +do_stop () { + log_daemon_msg "Stopping system $DAEMON_NAME daemon" + start-stop-daemon --stop --pidfile $PIDFILE --retry 10 + log_end_msg $? +} + +case "$1" in + + start|stop) + do_${1} + ;; + + restart|reload|force-reload) + do_stop + do_start + ;; + + status) + status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $? + ;; + + *) + echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}" + exit 1 + ;; + +esac +exit 0 \ No newline at end of file diff --git a/config/schema.sql b/config/schema.sql new file mode 100644 index 0000000..06c2d25 --- /dev/null +++ b/config/schema.sql @@ -0,0 +1,97 @@ +CREATE TABLE kettle +( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(80), + sensor VARCHAR(80), + heater VARCHAR(10), + automatic VARCHAR(255), + logic VARCHAR(50), + config VARCHAR(1000), + agitator VARCHAR(10), + target_temp INTEGER, + height INTEGER, + diameter INTEGER +); + +CREATE TABLE step +( + id INTEGER PRIMARY KEY NOT NULL, + "order" INTEGER, + name VARCHAR(80), + type VARCHAR(100), + stepstate VARCHAR(255), + state VARCHAR(1), + start INTEGER, + end INTEGER, + config VARCHAR(255), + kettleid INTEGER +); + +CREATE TABLE sensor +( + id INTEGER PRIMARY KEY NOT NULL, + type VARCHAR(100), + name VARCHAR(80), + config VARCHAR(500), + hide BOOLEAN +); + +CREATE TABLE fermenter_step +( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(80), + hours INTEGER, + minutes INTEGER, + days INTEGER, + temp INTEGER, + direction VARCHAR(1), + "order" INTEGER, + state VARCHAR(1), + start INTEGER, + timer_start INTEGER, + end INTEGER, + fermenter_id INTEGER, + FOREIGN KEY (fermenter_id) REFERENCES fermenter (id) +); + +CREATE TABLE fermenter +( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(80), + brewname VARCHAR(80), + sensor VARCHAR(80), + sensor2 VARCHAR(80), + sensor3 VARCHAR(80), + heater VARCHAR(10), + logic VARCHAR(50), + config VARCHAR(1000), + cooler VARCHAR(10), + target_temp INTEGER +); + +CREATE TABLE config +( + name VARCHAR(50) PRIMARY KEY NOT NULL, + value VARCHAR(255), + type VARCHAR(50), + description VARCHAR(255), + options VARCHAR(255) +); + + +INSERT INTO config VALUES ('kettle_cols', 4, 'select', 'Adjust the width of a kettle widget on the brewing dashboard', '[1,2,3, 4, 5, 6, 7, 8, 9, 10, 11, 12]'); +INSERT INTO config VALUES ('actor_cols', 4, 'select', 'Adjust the width of a actor widget on the brewing dashboard', '[1,2,3, 4, 5, 6, 7, 8, 9, 10, 11, 12]'); +INSERT INTO config VALUES ('sensor_cols', 4, 'select', 'Adjust the width of a sensor widget on the brewing dashboard', '[1,2,3, 4, 5, 6, 7, 8, 9, 10, 11, 12]'); +INSERT INTO config VALUES ('unit', 'C', 'select', 'Temperature Unit', '["C","F"]'); +INSERT INTO config VALUES ('brewery_name', 'My Home Brewery', 'text', 'Your brewery name', NULL ); +INSERT INTO config VALUES ('buzzer', 16, 'select', 'Buzzer GPIO', '[16,17,18,19,20]'); +INSERT INTO config VALUES ('setup', 'YES', 'select', 'Show the Setup dialog', '["YES","NO"]'); + +CREATE TABLE actor +( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(50), + type VARCHAR(100), + config VARCHAR(500), + hide BOOLEAN +); \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..decce5b --- /dev/null +++ b/install.sh @@ -0,0 +1,149 @@ +#!/bin/bash +#CraftBeerPi Installer +# Copy 2017 Manuel Fritsch + +confirmAnswer () { +whiptail --title "Confirmation" --yes-button "Yes" --no-button "No" --defaultno --yesno "$1" 10 56 +return $? +} + +show_menu () { + # We show the host name right in the menu title so we know which Pi we are connected to + OPTION=$(whiptail --title "CraftBeerPi 3.0" --menu "Choose your option:" 15 56 7 \ + "1" "Install CraftBeerPi" \ + "2" "Clear Database" \ + "3" "Add To Autostart" \ + "4" "Remove From Autostart" \ + "5" "Start CraftBeerPi" \ + "6" "Stop CraftBeerPi" \ + "7" "Software Update (git pull)" \ + "8" "Reset File Changes (git reset --hard)" \ + "9" "Clear all logs" \ + "10" "Reboot Raspberry Pi" 3>&1 1>&2 2>&3) + + BUTTON=$? + # Exit if user pressed cancel or escape + if [[ ($BUTTON -eq 1) || ($BUTTON -eq 255) ]]; then + exit 1 + fi + if [ $BUTTON -eq 0 ]; then + case $OPTION in + 1) + confirmAnswer "Would you like run apt-get update & apt-get upgrade?" + if [ $? = 0 ]; then + apt-get -y update; apt-get -y upgrade; + fi + + confirmAnswer "Would you like to install wiringPI? This is required to control the GPIO" + if [ $? = 0 ]; then + git clone git://git.drogon.net/wiringPi; + cd wiringPi; + ./build; cd ..; + rm -rf wiringPi; + fi + + apt-get -y install python-setuptools + easy_install pip + apt-get -y install python-dev + apt-get -y install libpcre3-dev + pip install -r requirements.txt + + confirmAnswer "Would you like to add active 1-wire support at your Raspberry PI now? IMPORTANT: The 1-wire thermometer must be conneted to GPIO 4!" + if [ $? = 0 ]; then + #apt-get -y update; apt-get -y upgrade; + echo '# CraftBeerPi 1-wire support' >> "/boot/config.txt" + echo 'dtoverlay=w1-gpio,gpiopin=4,pullup=on' >> "/boot/config.txt" + + fi + + whiptail --title "Installition Finished" --msgbox "CraftBeerPi installation finished! You must hit OK to continue." 8 78 + show_menu + ;; + 2) + confirmAnswer "Are you sure you want to clear the CraftBeerPi. All hardware setting will be deleted" + if [ $? = 0 ]; then + sudo rm -f craftbeerpi.db + whiptail --title "Database Delted" --msgbox "The CraftBeerPi database was succesfully deleted. You must hit OK to continue." 8 78 + show_menu + else + show_menu + fi + ;; + 3) + confirmAnswer "Are you sure you want to add CraftBeerPi to autostart" + if [ $? = 0 ]; then + sed "s@#DIR#@${PWD}@g" config/craftbeerpiboot > /etc/init.d/craftbeerpiboot + chmod 755 /etc/init.d/craftbeerpiboot; + update-rc.d craftbeerpiboot defaults; + whiptail --title "Added succesfull to autostart" --msgbox "The CraftBeerPi was added to autostart succesfully. You must hit OK to continue." 8 78 + show_menu + else + show_menu + fi + ;; + 4) + confirmAnswer "Are you sure you want to remove CraftBeerPi from autostart" + if [ $? = 0 ]; then + sudo rm -f /etc/init.d/craftbeerpiboot + show_menu + else + show_menu + fi + ;; + 5) + sudo /etc/init.d/craftbeerpiboot start + whiptail --title "CraftBeerPi started" --msgbox "Please connect via Browser: http://:5000" 8 78 + show_menu + ;; + 6) + sudo /etc/init.d/craftbeerpiboot stop + whiptail --title "CraftBeerPi stoped" --msgbox "The software is stoped" 8 78 + show_menu + ;; + 7) + confirmAnswer "Are you sure you want to pull a software update?" + if [ $? = 0 ]; then + + whiptail --textbox /dev/stdin 20 50 <<<"$(git pull)" + show_menu + else + show_menu + fi + ;; + 8) + confirmAnswer "Are you sure you want to reset all file changes for this git respository (git reset --hard)?" + if [ $? = 0 ]; then + whiptail --textbox /dev/stdin 20 50 <<<"$(git reset --hard)" + show_menu + else + show_menu + fi + ;; + 9) + confirmAnswer "Are you sure you want to delete all CraftBeerPi log files" + if [ $? = 0 ]; then + sudo rm -rf logs/*.log + whiptail --title "Log files deleted" --msgbox "All CraftBeerPi Files are deleted. You must hit OK to continue." 8 78 + show_menu + else + show_menu + fi + ;; + 10) + confirmAnswer "Are you sure you want to reboo the Raspberry Pi?" + if [ $? = 0 ]; then + sudo reboot + else + show_menu + fi + ;; + esac + fi +} + +if [ "$EUID" -ne 0 ] + then whiptail --title "Please run as super user (sudo)" --msgbox "Please run the install file -> sudo install.sh " 8 78 + exit +fi + +show_menu diff --git a/logs/empty b/logs/empty new file mode 100755 index 0000000..e69de29 diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100755 index 0000000..fdd644a --- /dev/null +++ b/modules/__init__.py @@ -0,0 +1,65 @@ +import json +import pprint +import sys, os +from flask import Flask, render_template, redirect +from flask_socketio import SocketIO, emit +from flask_sqlalchemy import SQLAlchemy +import logging +# Define the WSGI application object + +from app_config import * +import pprint + +from modules.core.db import get_db + + +@app.route('/') +def index(): + return redirect('ui') + + +# Define the database object which is imported +# by modules and controllers + + +import modules.steps +import modules.config +import modules.logs +import modules.sensors +import modules.actor +import modules.notification +import modules.fermenter +import modules.addon +import modules.ui +import modules.system +import modules.buzzer +import modules.stats +import modules.kettle +from app_config import cbpi +# Build the database: +# This will create the database file using SQLAlchemy + + +pp = pprint.PrettyPrinter(indent=6) + + +def init_db(): + print "INIT DB" + with app.app_context(): + db = get_db() + + try: + with app.open_resource('../config/schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + + db.commit() + except Exception as e: + pass + +init_db() +cbpi.run_init() + +cbpi.run_background_processes() + + + diff --git a/modules/actor/__init__.py b/modules/actor/__init__.py new file mode 100644 index 0000000..f395f58 --- /dev/null +++ b/modules/actor/__init__.py @@ -0,0 +1,69 @@ +import time +from flask_classy import route +from modules import DBModel, cbpi +from modules.core.baseview import BaseView + +class Actor(DBModel): + __fields__ = ["name","type", "config", "hide"] + __table_name__ = "actor" + __json_fields__ = ["config"] + +class ActorView(BaseView): + model = Actor + cache_key = "actors" + + @classmethod + def post_init_callback(self, obj): + obj.state = 0 + obj.power = 100 + + def post_post_callback(self, m): + self.api.init_actor(m.id) + + def post_put_callback(self, m): + + self.api.init_actor(m.id) + + @route("/switch/on", methods=["POST"]) + def on(self, id): + self.api.switch_actor_on(id) + return ('', 204) + + @route("/switch/off", methods=["POST"]) + def off(self, id): + self.api.switch_actor_off(id) + return ('', 204) + + @route("/power/", methods=["POST"]) + def power(self, id, power): + self.api.actor_power(id, power) + return ('', 204) + + @route("/toggle", methods=["POST"]) + def toggle(self, id): + + if self.api.cache.get("actors").get(id).state == 0: + self.on(id) + else: + self.off(id) + return ('', 204) + + def toggleTimeJob(self, id, t): + self.api.cache.get("actors").get(int(id)).timer = int(time.time()) + int(t) + self.toggle(int(id)) + self.api.socketio.sleep(t) + self.api.cache.get("actors").get(int(id)).timer = None + self.toggle(int(id)) + + @route("//toggle/", methods=["POST"]) + def toggleTime(self, id, t): + t = self.api.socketio.start_background_task(target=self.toggleTimeJob, id=id, t=t) + return ('', 204) + +@cbpi.initalizer(order=1000) +def init(cbpi): + print "INITIALIZE ACTOR MODULE" + cbpi.app.logger.info("INITIALIZE ACTOR MODULE") + ActorView.register(cbpi.app, route_base='/api/actor') + ActorView.init_cache() + cbpi.init_actors() \ No newline at end of file diff --git a/modules/addon/__init__.py b/modules/addon/__init__.py new file mode 100644 index 0000000..b89697f --- /dev/null +++ b/modules/addon/__init__.py @@ -0,0 +1 @@ +import endpoints \ No newline at end of file diff --git a/modules/addon/endpoints.py b/modules/addon/endpoints.py new file mode 100644 index 0000000..89d62ae --- /dev/null +++ b/modules/addon/endpoints.py @@ -0,0 +1,202 @@ +import json + +import sys +from flask import Blueprint, request, send_from_directory +from importlib import import_module +from modules import socketio, cbpi + + +from git import Repo +import os +import requests +import yaml +import shutil + +blueprint = Blueprint('addon', __name__) + + +modules = {} + +def merge(source, destination): + """ + Helper method to merge two dicts + :param source: + :param destination: + :return: + """ + for key, value in source.items(): + if isinstance(value, dict): + # get node or create one + node = destination.setdefault(key, {}) + merge(value, node) + else: + destination[key] = value + + return destination + +@blueprint.route('/', methods=['GET']) +def getPlugins(): + """ + Endpoint for all plugins + :return: + """ + result = [] + for filename in os.listdir("./modules/plugins"): + if filename.endswith(".DS_Store") or filename.endswith(".py") or filename.endswith(".pyc"): + continue + result.append(filename) + + return json.dumps(result) + +@blueprint.route('/', methods=['GET']) +def getFile(name): + """ + Returns plugin code + :param name: plugin name + :return: the plugin code from __init__.py + """ + return send_from_directory('./plugins/'+name, "__init__.py") + +@blueprint.route('/', methods=['PUT']) +def createPlugin(name): + + """ + Create a new plugin file + :param name: the plugin name + :return: empty http response 204 + """ + if not os.path.exists("./modules/plugins/"+name): + os.makedirs("./modules/plugins/"+name) + with open("./modules/plugins/" + name + "/__init__.py", "wb") as fo: + fo.write("") + cbpi.emit_message("PLUGIN %s CREATED" % (name)) + return ('', 204) + else: + cbpi.emit_message("Failed to create plugin %s. Name arlready in use" % (name)) + return ('', 500) + + + + +@blueprint.route('/', methods=['POST']) +def saveFile(name): + + """ + save plugin code. code is provides via http body + :param name: the plugin name + :return: empty http reponse + """ + with open("./modules/plugins/"+name+"/__init__.py", "wb") as fo: + fo.write(request.get_data()) + cbpi.emit_message("PLUGIN %s SAVED" % (name)) + + return ('', 204) + +@blueprint.route('/', methods=['DELETE']) +def deletePlugin(name): + + """ + Delete plugin + :param name: plugin name + :return: HTTP 204 if ok - HTTP 500 if plugin not exists + """ + if os.path.isdir("./modules/plugins/"+name) is False: + return ('Dir Not found', 500) + shutil.rmtree("./modules/plugins/"+name) + cbpi.notify("Plugin deleted", "Plugin %s deleted successfully" % name) + return ('', 204) + +@blueprint.route('//reload/', methods=['POST']) +def reload(name): + """ + hot reload plugnin + :param name: + :return: + """ + try: + if name in cache["modules"]: + reload(cache["modules"][name]) + cbpi.emit_message("REALOD OF PLUGIN %s SUCCESSFUL" % (name)) + return ('', 204) + else: + cache["modules"][name] = import_module("modules.plugins.%s" % (name)) + return ('', 204) + except Exception as e: + cbpi.emit_message("REALOD OF PLUGIN %s FAILED" % (name)) + return json.dumps(e.message) + + +@blueprint.route('/list', methods=['GET']) +def plugins(): + """ + Read the central plugin yaml to get a list of all official plugins + :return: + """ + response = requests.get("https://raw.githubusercontent.com/craftbeerpi/pluginlist/master/plugins.yaml") + cbpi.cache["plugins"] = merge(yaml.load(response.text), cbpi.cache["plugins"]) + for key, value in cbpi.cache["plugins"].iteritems(): + value["installed"] = os.path.isdir("./modules/plugins/%s/" % (key)) + + return json.dumps(cbpi.cache["plugins"]) + + +@blueprint.route('//download', methods=['POST']) +def download_addon(name): + + plugin = cbpi.cache["plugins"].get(name) + plugin["loading"] = True + if plugin is None: + return ('', 404) + try: + Repo.clone_from(plugin.get("repo_url"), "./modules/plugins/%s/" % (name)) + cbpi.notify("Download successful", "Plugin %s downloaded successfully" % name) + finally: + plugin["loading"] = False + + return ('', 204) + +@blueprint.route('//update', methods=['POST']) +def update_addon(name): + repo = Repo("./modules/plugins/%s/" % (name)) + o = repo.remotes.origin + info = o.pull() + cbpi.notify("Plugin Updated", "Plugin %s updated successfully. Please restart the system" % name) + return ('', 204) + + +def loadCorePlugins(): + for filename in os.listdir("./modules/base_plugins"): + if filename.endswith(".py") or filename.endswith(".pyc"): + continue + try: + modules[filename] = import_module("modules.base_plugins.%s" % (filename)) + except Exception as e: + + + cbpi.notify("Failed to load plugin %s " % filename, str(e), type="danger", timeout=None) + cbpi.app.logger.error(e) + +def loadPlugins(): + for filename in os.listdir("./modules/plugins"): + if filename.endswith(".py") or filename.endswith(".pyc"): + continue + try: + modules[filename] = import_module("modules.plugins.%s" % (filename)) + except Exception as e: + cbpi.notify("Failed to load plugin %s " % filename, str(e), type="danger", timeout=None) + cbpi.app.logger.error(e) + +@cbpi.initalizer(order=1) +def initPlugins(app): + print "INITIALIZE CUSTOM PLUGINS" + loadCorePlugins() + loadPlugins() + +@cbpi.initalizer(order=2) +def init(cbpi): + print "INITIALIZE ADDON MODULE" + cbpi.app.register_blueprint(blueprint, url_prefix='/api/editor') + + + + diff --git a/modules/app_config.py b/modules/app_config.py new file mode 100644 index 0000000..e6234c2 --- /dev/null +++ b/modules/app_config.py @@ -0,0 +1,57 @@ + +import json +import sys, os +from flask import Flask, render_template, redirect, json, g + + +from flask_socketio import SocketIO, emit +from flask_sqlalchemy import SQLAlchemy +import logging + +from sqlalchemy.ext.declarative import DeclarativeMeta + +from modules.core.core import CraftBeerPi, ActorBase, SensorBase +from modules.core.db import DBModel + +app = Flask(__name__) + +logging.basicConfig(filename='./logs/app.log',level=logging.INFO) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///../craftbeerpi.db' + +#app.config['SQLALCHEMY_ECHO'] = False +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +app.config['SECRET_KEY'] = 'craftbeerpi' +app.config['UPLOAD_FOLDER'] = './upload' +db = SQLAlchemy(app) + +@app.teardown_appcontext +def close_connection(exception): + db = getattr(g, '_database', None) + if db is not None: + db.close() + + +class ComplexEncoder(json.JSONEncoder): + def default(self, obj): + try: + if isinstance(obj, DBModel): + return obj.__dict__ + elif isinstance(obj, ActorBase): + return obj.state() + elif isinstance(obj, SensorBase): + return obj.get_value() + elif hasattr(obj, "callback"): + return obj() + else: + return None + except TypeError as e: + pass + return None + +app.json_encoder = ComplexEncoder +socketio = SocketIO(app, json=json) +cbpi = CraftBeerPi(app, socketio) + +app.logger.info("##########################################") +app.logger.info("### NEW STARTUP Version 3.0") +app.logger.info("##########################################") \ No newline at end of file diff --git a/modules/base_plugins/__init__.py b/modules/base_plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/modules/base_plugins/brew_steps/__init__.py b/modules/base_plugins/brew_steps/__init__.py new file mode 100644 index 0000000..84c03b2 --- /dev/null +++ b/modules/base_plugins/brew_steps/__init__.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +import time + + +from modules.core.props import Property, StepProperty +from modules.core.step import StepBase +from modules import cbpi + + +@cbpi.step +class MashStep(StepBase): + ''' + Just put the decorator @cbpi.step on top of a method + ''' + # Properties + temp = Property.Number("Temperature", configurable=True) + kettle = StepProperty.Kettle("Kettle") + timer = Property.Number("Timer in Minutes", configurable=True) + + def init(self): + ''' + Initialize Step. This method is called once at the beginning of the step + :return: + ''' + # set target tep + self.set_target_temp(self.temp, self.kettle) + + @cbpi.action("Start Timer Now") + def start(self): + ''' + Custom Action which can be execute form the brewing dashboard. + All method with decorator @cbpi.action("YOUR CUSTOM NAME") will be available in the user interface + :return: + ''' + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + def reset(self): + self.stop_timer() + self.set_target_temp(self.temp, self.kettle) + + def finish(self): + self.set_target_temp(0, self.kettle) + + def execute(self): + ''' + This method is execute in an interval + :return: + ''' + + # Check if Target Temp is reached + if self.get_kettle_temp(self.kettle) >= int(self.temp): + # Check if Timer is Running + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + # Check if timer finished and go to next step + if self.is_timer_finished() == True: + self.next() + + +@cbpi.step +class MashInStep(StepBase): + ''' + Just put the decorator @cbpi.step on top of a method + ''' + # Properties + temp = Property.Number("Temperature", configurable=True) + kettle = StepProperty.Kettle("Kettle") + s = False + + def init(self): + ''' + Initialize Step. This method is called once at the beginning of the step + :return: + ''' + # set target tep + self.s = False + self.set_target_temp(self.temp, self.kettle) + + + + def execute(self): + ''' + This method is execute in an interval + :return: + ''' + + # Check if Target Temp is reached + if self.get_kettle_temp(self.kettle) >= int(self.temp) and self.s is False: + self.s = True + self.notify("Step Temp Reached!", "Please press the next button to continue", timeout=None) + + + diff --git a/modules/base_plugins/dummy_temp/__init__.py b/modules/base_plugins/dummy_temp/__init__.py new file mode 100644 index 0000000..089406d --- /dev/null +++ b/modules/base_plugins/dummy_temp/__init__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import subprocess +import time + +from modules import cbpi, socketio +from modules.core.hardware import SensorActive +from modules import cbpi +from modules.core.props import Property + + +@cbpi.sensor +class DummyTempSensor(SensorActive): + temp = Property.Number("Temperature", configurable=True, default_value=5) + + def get_unit(self): + return "°C" if self.get_config_parameter("unit", "C") == "C" else "°F" + + def stop(self): + pass + + def execute(self): + while self.is_running(): + + self.data_received(self.temp) + socketio.sleep(5) + + + + + + + + + + + diff --git a/modules/base_plugins/fermenter_hysteresis/__init__.py b/modules/base_plugins/fermenter_hysteresis/__init__.py new file mode 100644 index 0000000..9c7e1b5 --- /dev/null +++ b/modules/base_plugins/fermenter_hysteresis/__init__.py @@ -0,0 +1,27 @@ +from modules import cbpi +from modules.core.controller import KettleController, FermenterController +from modules.core.props import Property + + +@cbpi.fermentation_controller +class Hysteresis(FermenterController): + + on = Property.Number("Offset On", True, 0) + off = Property.Number("Offset Off", True, 0) + + def stop(self): + + super(FermenterController, self).stop() + self.heater_off() + + def run(self): + while self.is_running(): + print "Temp %s" % self.get_temp() + if self.get_temp() < self.get_target_temp() - int(self.on): + self.heater_on(100) + elif self.get_temp() >= self.get_target_temp() - int(self.off): + self.heater_off() + else: + self.heater_off() + self.sleep(1) + diff --git a/modules/base_plugins/gpio_actor/__init__.py b/modules/base_plugins/gpio_actor/__init__.py new file mode 100644 index 0000000..40b17e2 --- /dev/null +++ b/modules/base_plugins/gpio_actor/__init__.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +import time + +from modules import cbpi +from modules.core.hardware import ActorBase, SensorPassive, SensorActive +from modules.core.props import Property + +try: + import RPi.GPIO as GPIO + + GPIO.setmode(GPIO.BCM) +except Exception as e: + print e + pass + + + +@cbpi.actor +class GPIOSimple(ActorBase): + + gpio = Property.Select("GPIO", options=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]) + + def init(self): + GPIO.setup(int(self.gpio), GPIO.OUT) + GPIO.output(int(self.gpio), 0) + + def on(self, power=0): + print "GPIO ON %s" % str(self.gpio) + GPIO.output(int(self.gpio), 1) + + def off(self): + print "GPIO OFF" + GPIO.output(int(self.gpio), 0) + +@cbpi.actor +class GPIOPWM(ActorBase): + + gpio = Property.Select("GPIO", options=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]) + duty_cylce = Property.Number("Duty Cycle", configurable=True) + + p = None + power = 100 + + def init(self): + GPIO.setup(int(self.gpio), GPIO.OUT) + GPIO.output(int(self.gpio), 0) + + + def on(self, power=None): + if power is not None: + self.power = int(power) + + if self.duty_cylce is None: + duty_cylce = 50 + + self.p = GPIO.PWM(int(self.gpio), int(self.duty_cylce)) + self.p.start(int(self.power)) + + def set_power(self, power): + if power is not None: + self.power = int(power) + self.p.ChangeDutyCycle(self.power) + + def off(self): + print "GPIO OFF" + self.p.stop() + + +@cbpi.actor +class RelayBoard(ActorBase): + + gpio = Property.Select("GPIO", options=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]) + + def init(self): + GPIO.setup(int(self.gpio), GPIO.OUT) + GPIO.output(int(self.gpio), 1) + + def on(self, power=0): + + GPIO.output(int(self.gpio), 0) + + def off(self): + + GPIO.output(int(self.gpio), 1) + +@cbpi.actor +class Dummy(ActorBase): + + def on(self, power=100): + print "ON" + + def off(self): + print "OFF" \ No newline at end of file diff --git a/modules/base_plugins/hysteresis/__init__.py b/modules/base_plugins/hysteresis/__init__.py new file mode 100644 index 0000000..55e06dc --- /dev/null +++ b/modules/base_plugins/hysteresis/__init__.py @@ -0,0 +1,39 @@ +from modules import cbpi +from modules.core.controller import KettleController +from modules.core.props import Property + + +@cbpi.controller +class Hysteresis(KettleController): + + # Custom Properties + + on = Property.Number("Offset On", True, 0) + off = Property.Number("Offset Off", True, 0) + + def stop(self): + ''' + Invoked when the automatic is stopped. + Normally you switch off the actors and clean up everything + :return: None + ''' + super(KettleController, self).stop() + self.heater_off() + + + + + def run(self): + ''' + Each controller is exectuted in its own thread. The run method is the entry point + :return: + ''' + while self.is_running(): + if self.get_temp() < self.get_target_temp() - int(self.on): + self.heater_on(100) + elif self.get_temp() >= self.get_target_temp() - int(self.off): + self.heater_off() + else: + self.heater_off() + self.sleep(1) + diff --git a/modules/base_plugins/one_wire/__init__.py b/modules/base_plugins/one_wire/__init__.py new file mode 100644 index 0000000..5385916 --- /dev/null +++ b/modules/base_plugins/one_wire/__init__.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +import os +from subprocess import Popen, PIPE, call + +from modules import cbpi, app +from modules.core.hardware import SensorPassive +import json +import os, re, threading, time +from flask import Blueprint, render_template, request +from modules.core.props import Property + +blueprint = Blueprint('one_wire', __name__) + +temp = 22 + +def getSensors(): + try: + arr = [] + for dirname in os.listdir('/sys/bus/w1/devices'): + if (dirname.startswith("28") or dirname.startswith("10")): + arr.append(dirname) + return arr + except: + return [] + + + + +class myThread (threading.Thread): + + value = 0 + + + def __init__(self, sensor_name): + threading.Thread.__init__(self) + self.value = 0 + self.sensor_name = sensor_name + self.runnig = True + + def shutdown(self): + pass + + def stop(self): + self.runnig = False + + def run(self): + + while self.runnig: + try: + app.logger.info("READ TEMP") + ## Test Mode + if self.sensor_name is None: + return + with open('/sys/bus/w1/devices/w1_bus_master1/%s/w1_slave' % self.sensor_name, 'r') as content_file: + content = content_file.read() + if (content.split('\n')[0].split(' ')[11] == "YES"): + temp = float(content.split("=")[-1]) / 1000 # temp in Celcius + self.value = temp + except: + pass + + time.sleep(4) + + + +@cbpi.sensor +class ONE_WIRE_SENSOR(SensorPassive): + + sensor_name = Property.Select("Sensor", getSensors()) + + def init(self): + + self.t = myThread(self.sensor_name) + + def shudown(): + shudown.cb.shutdown() + shudown.cb = self.t + + self.t.start() + + def stop(self): + try: + self.t.stop() + except: + pass + + def read(self): + if self.get_config_parameter("unit", "C") == "C": + self.data_received(self.t.value) + else: + self.data_received(format(9.0 / 5.0 * self.t.value + 32, '.2f')) + + @classmethod + def init_global(self): + try: + call(["modprobe", "w1-gpio"]) + call(["modprobe", "w1-therm"]) + except Exception as e: + pass + + +@blueprint.route('/', methods=['GET']) +def set_temp(t): + global temp + temp = t + return ('', 204) + + +@cbpi.initalizer() +def init(cbpi): + cbpi.app.logger.info("INITIALIZE ONE WIRE MODULE") + cbpi.app.register_blueprint(blueprint, url_prefix='/api/one_wire') \ No newline at end of file diff --git a/modules/buzzer/__init__.py b/modules/buzzer/__init__.py new file mode 100644 index 0000000..2eff869 --- /dev/null +++ b/modules/buzzer/__init__.py @@ -0,0 +1,51 @@ +import time +from thread import start_new_thread +from modules import cbpi + +try: + import RPi.GPIO as GPIO +except Exception as e: + pass + +class Buzzer(object): + + sound = ["H", 0.1, "L"] + def __init__(self, gpio): + try: + cbpi.app.logger.info("INIT BUZZER NOW GPIO%s" % gpio) + self.gpio = gpio + GPIO.setmode(GPIO.BCM) + GPIO.setup(gpio, GPIO.OUT) + self.state = True + cbpi.app.logger.info("BUZZER SETUP OK") + except Exception as e: + self.state = False + + def beep(self): + if self.state is False: + cbpi.app.logger.error("BUZZER not working") + return + + def play(sound): + try: + for i in sound: + if (isinstance(i, str)): + if i == "H": + GPIO.output(int(self.gpio), GPIO.HIGH) + else: + GPIO.output(int(self.gpio), GPIO.LOW) + else: + time.sleep(i) + except Exception as e: + pass + + start_new_thread(play, (self.sound,)) + +@cbpi.initalizer(order=0) +def init(cbpi): + print "INIT BUZZER" + cbpi.app.logger.info("INIT BUZZER") + gpio = cbpi.get_config_parameter("buzzer", 16) + cbpi.buzzer = Buzzer(gpio) + cbpi.beep() + cbpi.app.logger.info("INIT OK") diff --git a/modules/config/__init__.py b/modules/config/__init__.py new file mode 100644 index 0000000..14cc4b0 --- /dev/null +++ b/modules/config/__init__.py @@ -0,0 +1,59 @@ +import time + +from flask import json, request +from flask_classy import route +from modules import DBModel, cbpi, get_db +from modules.core.baseview import BaseView + +class Config(DBModel): + __fields__ = ["type", "value", "description", "options"] + __table_name__ = "config" + __json_fields__ = ["options"] + __priamry_key__ = "name" + + +class ConfigView(BaseView): + model = Config + cache_key = "config" + + @route('/', methods=["PUT"]) + def put(self, name): + + data = request.json + data["name"] = name + update_data = {"name": data["name"], "value": data["value"]} + + if self.api.cache.get(self.cache_key) is not None: + #self.pre_post_callback(self.api.cache.get(self.cache_key)[name]) + self.api.cache.get(self.cache_key)[name].__dict__.update(**update_data) + m = self.model.update(**self.api.cache.get(self.cache_key)[name].__dict__) + self.post_put_callback(self.api.cache.get(self.cache_key)[name]) + return json.dumps(self.api.cache.get(self.cache_key)[name].__dict__) + + @route('/', methods=["GET"]) + def getOne(self, id): + return ('NOT SUPPORTED', 400) + + @route('/', methods=["DELETE"]) + def delete(self, id): + return ('NOT SUPPORTED', 400) + + @route('/', methods=["POST"]) + def post(self): + return ('NOT SUPPORTED', 400) + + @classmethod + def init_cache(cls): + + with cls.api.app.app_context(): + cls.api.cache[cls.cache_key] = {} + for key, value in cls.model.get_all().iteritems(): + cls.post_init_callback(value) + cls.api.cache[cls.cache_key][value.name] = value + + +@cbpi.initalizer(order=1) +def init(cbpi): + print "INITIALIZE CONFIG MODULE" + ConfigView.register(cbpi.app, route_base='/api/config') + ConfigView.init_cache() diff --git a/modules/core/__init__.py b/modules/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/modules/core/baseview.py b/modules/core/baseview.py new file mode 100644 index 0000000..c5b98ab --- /dev/null +++ b/modules/core/baseview.py @@ -0,0 +1,109 @@ +from flask import request, json +from flask_classy import route, FlaskView +from modules import cbpi + + +class BaseView(FlaskView): + + as_array = False + cache_key = None + api = cbpi + + @route('/') + def getOne(self, id): + + if self.api.cache.get(self.cache_key) is not None: + return json.dumps(self.api.cache.get(self.cache_key).get(id)) + else: + return json.dumps(self.model.get_one(id)) + + @route('/') + def getAll(self): + if self.api.cache.get(self.cache_key) is not None: + return json.dumps(self.api.cache.get(self.cache_key)) + else: + return json.dumps(self.model.get_all()) + + def pre_post_callback(self, data): + pass + + + def post_post_callback(self, m): + pass + + @route('/', methods=["POST"]) + def post(self): + data = request.json + self.pre_post_callback(data) + m = self.model.insert(**data) + if self.api.cache.get(self.cache_key) is not None: + self.api.cache.get(self.cache_key)[m.id] = m + + self.post_post_callback(m) + + return json.dumps(m) + + def pre_put_callback(self, m): + pass + + def post_put_callback(self, m): + pass + + + @route('/', methods=["PUT"]) + def put(self, id): + data = request.json + data["id"] = id + try: + del data["instance"] + except: + pass + if self.api.cache.get(self.cache_key) is not None: + self.pre_put_callback(self.api.cache.get(self.cache_key)[id]) + self.api.cache.get(self.cache_key)[id].__dict__.update(**data) + m = self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__) + self.post_put_callback(self.api.cache.get(self.cache_key)[id]) + return json.dumps(self.api.cache.get(self.cache_key)[id]) + else: + m = self.model.update(**data) + + self.post_put_callback(m) + return json.dumps(m) + + + def pre_delete_callback(self, m): + pass + + def post_delete_callback(self, id): + pass + + @route('/', methods=["DELETE"]) + def delete(self, id): + if self.api.cache.get(self.cache_key) is not None: + self.pre_delete_callback(self.api.cache.get(self.cache_key)[id]) + del self.api.cache.get(self.cache_key)[id] + m = self.model.delete(id) + + def post_delete_callback(self, id): + pass + return ('',204) + + @classmethod + def post_init_callback(cls, obj): + pass + + @classmethod + def init_cache(cls): + with cls.api.app.app_context(): + + if cls.model.__as_array__ is True: + cls.api.cache[cls.cache_key] = [] + + for value in cls.model.get_all(): + cls.post_init_callback(value) + cls.api.cache[cls.cache_key].append(value) + else: + cls.api.cache[cls.cache_key] = {} + for key, value in cls.model.get_all().iteritems(): + cls.post_init_callback(value) + cls.api.cache[cls.cache_key][key] = value \ No newline at end of file diff --git a/modules/core/controller.py b/modules/core/controller.py new file mode 100644 index 0000000..504b931 --- /dev/null +++ b/modules/core/controller.py @@ -0,0 +1,134 @@ +from modules import cbpi + + +class ActorController(object): + + @cbpi.try_catch(None) + def actor_on(self, power=100, id=None): + + if id is None: + id = self.heater + self.api.switch_actor_on(int(id), power=power) + + @cbpi.try_catch(None) + def actor_off(self, id=None): + if id is None: + id = self.heater + + self.api.switch_actor_off(int(id)) + + +class SensorController(object): + + @cbpi.try_catch(None) + def get_sensor_value(self, id=None): + + if id is None: + id = self.sensor + + return cbpi.get_sensor_value(id) + + + +class ControllerBase(object): + __dirty = False + __running = False + + @staticmethod + def init_global(): + print "GLOBAL CONTROLLER INIT" + + def notify(self, headline, message, type="success", timeout=5000): + self.api.notify(headline, message, type, timeout) + + def is_running(self): + return self.__running + + def init(self): + self.__running = True + + + def sleep(self, seconds): + self.api.socketio.sleep(seconds) + + def stop(self): + self.__running = False + + + def __init__(self, *args, **kwds): + for a in kwds: + super(ControllerBase, self).__setattr__(a, kwds.get(a)) + self.api = kwds.get("api") + self.heater = kwds.get("heater") + self.sensor = kwds.get("sensor") + + + def run(self): + pass + +class KettleController(ControllerBase, ActorController, SensorController): + + def __init__(self, *args, **kwds): + ControllerBase.__init__(self, *args, **kwds) + self.kettle_id = kwds.get("kettle_id") + + @cbpi.try_catch(None) + def heater_on(self, power=100): + k = self.api.cache.get("kettle").get(self.kettle_id) + if k.heater is not None: + self.actor_on(power, int(k.heater)) + + + + + @cbpi.try_catch(None) + def heater_off(self): + k = self.api.cache.get("kettle").get(self.kettle_id) + if k.heater is not None: + self.actor_off(int(k.heater)) + + @cbpi.try_catch(None) + def get_temp(self, id=None): + if id is None: + id = self.kettle_id + return self.get_sensor_value(int(self.api.cache.get("kettle").get(id).sensor)) + + @cbpi.try_catch(None) + def get_target_temp(self, id=None): + if id is None: + id = self.kettle_id + return self.api.cache.get("kettle").get(id).target_temp + +class FermenterController(ControllerBase, ActorController, SensorController): + + def __init__(self, *args, **kwds): + ControllerBase.__init__(self, *args, **kwds) + self.fermenter_id = kwds.get("fermenter_id") + self.cooler = kwds.get("cooler") + + @cbpi.try_catch(None) + def get_target_temp(self, id=None): + + if id is None: + id = self.fermenter_id + return self.api.cache.get("fermenter").get(id).target_temp + + @cbpi.try_catch(None) + def heater_on(self, power=100): + f = self.api.cache.get("fermenter").get(self.fermenter_id) + if k.heater is not None: + self.actor_on(int(f.heater)) + + @cbpi.try_catch(None) + def heater_off(self): + f = self.api.cache.get("fermenter").get(self.fermenter_id) + if k.heater is not None: + self.actor_off(int(f.heater)) + + @cbpi.try_catch(None) + def get_temp(self, id=None): + + if id is None: + id = self.fermenter_id + return self.get_sensor_value(int(self.api.cache.get("fermenter").get(id).sensor)) + diff --git a/modules/core/core.py b/modules/core/core.py new file mode 100644 index 0000000..cc650d1 --- /dev/null +++ b/modules/core/core.py @@ -0,0 +1,452 @@ +import pprint + +import sqlite3 +from flask import make_response, g +import datetime +from datetime import datetime +from flask.views import MethodView +from flask_classy import FlaskView, route +from flask_sqlalchemy import SQLAlchemy +from time import localtime, strftime +from functools import wraps, update_wrapper +from props import * + +from hardware import * + +import time +import uuid + + +class NotificationAPI(object): + pass + +class ActorAPI(object): + + def init_actors(self): + self.app.logger.info("Init Actors") + t = self.cache.get("actor_types") + for key, value in t.iteritems(): + value.get("class").init_global() + + for key in self.cache.get("actors"): + self.init_actor(key) + + def init_actor(self, id): + try: + value = self.cache.get("actors").get(int(id)) + cfg = value.config.copy() + cfg.update(dict(api=self, id=id, name=value.name)) + cfg.update(dict(api=self, id=id, name=value.name)) + clazz = self.cache.get("actor_types").get(value.type).get("class") + value.instance = clazz(**cfg) + value.instance.init() + value.state = 0 + value.power = 100 + except Exception as e: + self.notify("Actor Error", "Failed to setup actor %s. Please check the configuraiton" % value.name, + type="danger", timeout=None) + self.app.logger.error("Initializing of Actor %s failed" % id) + + def switch_actor_on(self, id, power=None): + actor = self.cache.get("actors").get(id) + + if actor.state == 1: + return + + actor.instance.on(power=power) + actor.state = 1 + if power is not None: + + actor.power = power + self.emit("SWITCH_ACTOR", actor) + + def actor_power(self, id, power=100): + actor = self.cache.get("actors").get(id) + actor.instance.set_power(power=power) + actor.power = power + self.emit("SWITCH_ACTOR", actor) + + def switch_actor_off(self, id): + actor = self.cache.get("actors").get(id) + + if actor.state == 0: + return + + + actor.instance.off() + actor.state = 0 + + + self.emit("SWITCH_ACTOR", actor) + +class SensorAPI(object): + + def init_sensors(self): + ''' + Initialize all sensors + :return: + ''' + + self.app.logger.info("Init Sensors") + + t = self.cache.get("sensor_types") + for key, value in t.iteritems(): + value.get("class").init_global() + + for key in self.cache.get("sensors"): + self.init_sensor(key) + + def stop_sensor(self, id): + + try: + self.cache.get("sensors").get(id).instance.stop() + except Exception as e: + + self.app.logger.info("Stop Sensor Error") + pass + + + def init_sensor(self, id): + ''' + initialize sensor by id + :param id: + :return: + ''' + + def start_active_sensor(instance): + ''' + start active sensors as background job + :param instance: + :return: + ''' + instance.execute() + + try: + if id in self.cache.get("sensor_instances"): + self.cache.get("sensor_instances").get(id).stop() + value = self.cache.get("sensors").get(id) + + cfg = value.config.copy() + cfg.update(dict(api=self, id=id, name=value.name)) + clazz = self.cache.get("sensor_types").get(value.type).get("class") + value.instance = clazz(**cfg) + value.instance.init() + if isinstance(value.instance, SensorPassive): + # Passive Sensors + value.mode = "P" + else: + # Active Sensors + value.mode = "A" + t = self.socketio.start_background_task(target=start_active_sensor, instance=value.instance) + + except Exception as e: + + self.notify("Sensor Error", "Failed to setup Sensor %s. Please check the configuraiton" % value.name, type="danger", timeout=None) + self.app.logger.error("Initializing of Sensor %s failed" % id) + + def receive_sensor_value(self, id, value): + self.emit("SENSOR_UPDATE", self.cache.get("sensors")[id]) + self.save_to_file(id, value) + + def save_to_file(self, id, value, prefix="sensor"): + filename = "./logs/%s_%s.log" % (prefix, str(id)) + formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime()) + msg = str(formatted_time) + "," +str(value) + "\n" + + with open(filename, "a") as file: + file.write(msg) + + def log_action(self, text): + filename = "./logs/action.log" + formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime()) + + + with open(filename, "a") as file: + file.write("%s,%s\n" % (formatted_time, text)) + + def shutdown_sensor(self, id): + self.cache.get("sensors")[id].stop() + + + def get_sensor_value(self, id): + try: + id = int(id) + return int(self.cache.get("sensors")[id].instance.last_value) + except Exception as e: + + return None + +class CacheAPI(object): + + def get_sensor(self, id): + try: + return self.cache["sensors"][id] + except: + return None + + def get_actor(self, id): + try: + return self.cache["actors"][id] + except: + return None + +class CraftBeerPi(ActorAPI, SensorAPI): + + cache = { + "init": {}, + "config": {}, + "actor_types": {}, + "sensor_types": {}, + "sensors": {}, + "sensor_instances": {}, + "init": [], + "background":[], + "step_types": {}, + "controller_types": {}, + "messages": [], + "plugins": {}, + "fermentation_controller_types": {}, + "fermenter_task": {} + } + buzzer = None + eventbus = {} + + + # constructor + def __init__(self, app, socketio): + self.app = app + self.socketio = socketio + + + def emit(self, key, data): + self.socketio.emit(key, data, namespace='/brew') + + def notify(self, headline, message, type="success", timeout=5000): + self.beep() + msg = {"id": str(uuid.uuid1()), "type": type, "headline": headline, "message": message, "timeout": timeout} + if timeout is None: + self.cache["messages"].append(msg) + self.emit("NOTIFY", msg) + + def beep(self): + + if self.buzzer is not None: + self.buzzer.beep() + + + def add_cache_callback(self, key, method): + method.callback = True + self.cache[key] = method + + def get_config_parameter(self, key, default): + cfg = self.cache.get("config").get(key) + + if cfg is None: + return default + else: + return cfg.value + + def clear_cache(self, key, is_array=False): + if is_array: + self.cache[key] = [] + else: + self.cache[key] = {} + + # helper method for parsing props + def __parseProps(self, key, cls): + name = cls.__name__ + self.cache[key][name] = {"name": name, "class": cls, "properties": []} + tmpObj = cls() + members = [attr for attr in dir(tmpObj) if not callable(getattr(tmpObj, attr)) and not attr.startswith("__")] + for m in members: + if isinstance(tmpObj.__getattribute__(m), Property.Number): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append( + {"name": m, "label": t.label, "type": "number", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), Property.Text): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append( + {"name": m, "label": t.label, "type": "text", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), Property.Select): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append( + {"name": m, "label": t.label, "type": "select", "configurable": True, "options": t.options}) + return cls + + + def actor(self, cls): + return self.__parseProps("actor_types", cls) + + def sensor(self, cls): + return self.__parseProps("sensor_types", cls) + + def controller(self, cls): + return self.__parseProps("controller_types", cls) + + def fermentation_controller(self, cls): + return self.__parseProps("fermentation_controller_types", cls) + + def get_controller(self, name): + return self.cache["controller_types"].get(name) + + def get_fermentation_controller(self, name): + return self.cache["fermentation_controller_types"].get(name) + # Step action + def action(self,label): + def real_decorator(func): + func.action = True + func.label = label + return func + return real_decorator + + # step decorator + def step(self, cls): + + key = "step_types" + name = cls.__name__ + self.cache[key][name] = {"name": name, "class": cls, "properties": [], "actions": []} + + tmpObj = cls() + members = [attr for attr in dir(tmpObj) if not callable(getattr(tmpObj, attr)) and not attr.startswith("__")] + for m in members: + if isinstance(tmpObj.__getattribute__(m), StepProperty.Number): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "number", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), StepProperty.Text): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "text", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), StepProperty.Select): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "select", "options": t.options}) + elif isinstance(tmpObj.__getattribute__(m), StepProperty.Actor): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "actor", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), StepProperty.Sensor): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "sensor", "configurable": t.configurable}) + elif isinstance(tmpObj.__getattribute__(m), StepProperty.Kettle): + t = tmpObj.__getattribute__(m) + self.cache[key][name]["properties"].append({"name": m, "label": t.label, "type": "kettle", "configurable": t.configurable}) + + for name, method in cls.__dict__.iteritems(): + if hasattr(method, "action"): + label = method.__getattribute__("label") + self.cache[key][cls.__name__]["actions"].append({"method": name, "label": label}) + + return cls + + + # Event Bus + def event(self, name, async=False): + + def real_decorator(function): + if self.eventbus.get(name) is None: + self.eventbus[name] = [] + self.eventbus[name].append({"function": function, "async": async}) + def wrapper(*args, **kwargs): + return function(*args, **kwargs) + return wrapper + return real_decorator + + def emit_message(self, message): + self.emit_event(name="MESSAGE", message=message) + + def emit_event(self, name, **kwargs): + for i in self.eventbus.get(name, []): + if i["async"] is False: + i["function"](**kwargs) + else: + t = self.socketio.start_background_task(target=i["function"], **kwargs) + + # initializer decorator + def initalizer(self, order=0): + def real_decorator(function): + self.cache["init"].append({"function": function, "order": order}) + def wrapper(*args, **kwargs): + return function(*args, **kwargs) + return wrapper + return real_decorator + + + + def try_catch(self, errorResult="ERROR"): + def real_decorator(function): + def wrapper(*args, **kwargs): + try: + return function(*args, **kwargs) + except: + self.app.logger.error("Exception in function %s. Return default %s" % (function.__name__, errorResult)) + return errorResult + return wrapper + + return real_decorator + + def nocache(self, view): + @wraps(view) + def no_cache(*args, **kwargs): + response = make_response(view(*args, **kwargs)) + response.headers['Last-Modified'] = datetime.now() + response.headers[ + 'Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0' + response.headers['Pragma'] = 'no-cache' + response.headers['Expires'] = '-1' + return response + + return update_wrapper(no_cache, view) + + def init_kettle(self, id): + try: + value = self.cache.get("kettle").get(id) + value["state"] = False + except: + self.notify("Kettle Setup Faild", "Please check %s configuration" % value.name, type="danger", timeout=None) + self.app.logger.error("Initializing of Kettle %s failed" % id) + + + def run_init(self): + ''' + call all initialziers after startup + :return: + ''' + self.app.logger.info("Invoke Init") + self.cache["init"] = sorted(self.cache["init"], key=lambda k: k['order']) + for i in self.cache.get("init"): + self.app.logger.info("-> %s " % i.get("function").__name__) + i.get("function")(self) + + + + def backgroundtask(self, key, interval, config_parameter=None): + + ''' + Background Task Decorator + :param key: + :param interval: + :param config_parameter: + :return: + ''' + def real_decorator(function): + self.cache["background"].append({"function": function, "key": key, "interval": interval, "config_parameter": config_parameter}) + def wrapper(*args, **kwargs): + return function(*args, **kwargs) + return wrapper + return real_decorator + + def run_background_processes(self): + ''' + call all background task after startup + :return: + ''' + self.app.logger.info("Start Background") + + def job(interval, method): + while True: + try: + method() + except Exception as e: + self.app.logger.error("Exception" + method.__name__ + ": " + str(e)) + self.socketio.sleep(interval) + + + for value in self.cache.get("background"): + t = self.socketio.start_background_task(target=job, interval=value.get("interval"), method=value.get("function")) diff --git a/modules/core/db.py b/modules/core/db.py new file mode 100644 index 0000000..bde19cc --- /dev/null +++ b/modules/core/db.py @@ -0,0 +1,115 @@ +import sqlite3 + +from flask import json, g + + +def get_db(): + db = getattr(g, '_database', None) + if db is None: + def dict_factory(cursor, row): + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + db = g._database = sqlite3.connect('craftbeerpi.db') + db.row_factory = dict_factory + return db + +class DBModel(object): + + __priamry_key__ = "id" + __as_array__ = False + __order_by__ = None + __json_fields__ = [] + + def __init__(self, args): + + self.__setattr__(self.__priamry_key__, args.get(self.__priamry_key__)) + for f in self.__fields__: + if f in self.__json_fields__: + if args.get(f) is not None: + + if isinstance(args.get(f) , dict) or isinstance(args.get(f) , list) : + self.__setattr__(f, args.get(f)) + else: + self.__setattr__(f, json.loads(args.get(f))) + else: + self.__setattr__(f, None) + else: + self.__setattr__(f, args.get(f)) + + @classmethod + def get_all(cls): + cur = get_db().cursor() + if cls.__order_by__ is not None: + cur.execute("SELECT * FROM %s ORDER BY '%s'" % (cls.__table_name__,cls.__order_by__)) + else: + cur.execute("SELECT * FROM %s" % cls.__table_name__) + + if cls.__as_array__ is True: + result = [] + for r in cur.fetchall(): + result.append( cls(r)) + else: + result = {} + for r in cur.fetchall(): + result[r.get(cls.__priamry_key__)] = cls(r) + return result + + @classmethod + def get_one(cls, id): + cur = get_db().cursor() + cur.execute("SELECT * FROM %s WHERE %s = ?" % (cls.__table_name__, cls.__priamry_key__), (id,)) + r = cur.fetchone() + if r is not None: + return cls(r) + else: + return None + + @classmethod + def delete(cls, id): + cur = get_db().cursor() + cur.execute("DELETE FROM %s WHERE %s = ? " % (cls.__table_name__, cls.__priamry_key__), (id,)) + get_db().commit() + + @classmethod + def insert(cls, **kwargs): + cur = get_db().cursor() + + query = 'INSERT INTO %s (%s) VALUES (%s)' % ( + cls.__table_name__, + ', '.join("'%s'" % str(x) for x in cls.__fields__), + ', '.join(['?'] * len(cls.__fields__))) + + data = () + for f in cls.__fields__: + if f in cls.__json_fields__: + data = data + (json.dumps(kwargs.get(f)),) + else: + data = data + (kwargs.get(f),) + + cur.execute(query, data) + get_db().commit() + i = cur.lastrowid + kwargs["id"] = i + + return cls(kwargs) + + @classmethod + def update(cls, **kwargs): + cur = get_db().cursor() + query = 'UPDATE %s SET %s WHERE %s = ?' % ( + cls.__table_name__, + ', '.join("'%s' = ?" % str(x) for x in cls.__fields__),cls.__priamry_key__) + + data = () + for f in cls.__fields__: + if f in cls.__json_fields__: + data = data + (json.dumps(kwargs.get(f)),) + else: + data = data + (kwargs.get(f),) + + data = data + (kwargs.get(cls.__priamry_key__),) + cur.execute(query, data) + get_db().commit() + return cls(kwargs) \ No newline at end of file diff --git a/modules/core/hardware.py b/modules/core/hardware.py new file mode 100644 index 0000000..85f53e8 --- /dev/null +++ b/modules/core/hardware.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +class Base(object): + __dirty = False + + @classmethod + def init_global(cls): + print "GLOBAL ACTOR INIT" + + def get_config_parameter(self, key, default_value): + return self.api.get_config_parameter(key, default_value) + + def init(self): + print "INIT BASE" + + def stop(self): + print "STOP HARDWARE" + + def update(self, **kwds): + pass + + def __init__(self, *args, **kwds): + for a in kwds: + super(Base, self).__setattr__(a, kwds.get(a)) + self.api = kwds.get("api") + self.id = kwds.get("id") + self.value = None + self.__dirty = False + + def __setattr__(self, name, value): + + if name != "_Base__dirty": + self.__dirty = True + super(Base, self).__setattr__(name, value) + else: + super(Base, self).__setattr__(name, value) + + +class SensorBase(Base): + + last_value = 0 + + def init(self): + print "INIT Base SENSOR" + + def stop(self): + print "STOP SENSOR" + + def data_received(self, data): + + + self.last_value = data + self.api.receive_sensor_value(self.id, data) + + def get_unit(self): + if self.get_config_parameter("unit", "C") == "C": + return "°C" + else: + return "°F" + + def get_value(self): + + return {"value": self.last_value, "unit": self.get_unit()} + +class SensorActive(SensorBase): + + __running = False + + def is_running(self): + return self.__running + + def init(self): + self.__running = True + print "INIT ACTIVE SENSOR" + + def stop(self): + self.__running = False + + def execute(self): + pass + + +class SensorPassive(SensorBase): + def init(self): + print "INIT PASSIV SENSOR" + pass + + def read(self): + return 0 + + +class ActorBase(Base): + + def state(self): + return 1 + + def set_power(self, power): + print "SET POWER TO %s" % power + + def on(self, power=0): + print "ON" + + def off(self): + print "OFF" diff --git a/modules/core/props.py b/modules/core/props.py new file mode 100644 index 0000000..efef745 --- /dev/null +++ b/modules/core/props.py @@ -0,0 +1,38 @@ +class PropertyType(object): + pass + +class Property(object): + class Select(PropertyType): + def __init__(self, label, options): + PropertyType.__init__(self) + self.label = label + self.options = options + + class Number(PropertyType): + def __init__(self, label, configurable=False, default_value=0, unit=""): + PropertyType.__init__(self) + self.label = label + self.configurable = configurable + + class Text(PropertyType): + def __init__(self, label, configurable=False, default_value=""): + PropertyType.__init__(self) + self.label = label + self.configurable = configurable + +class StepProperty(Property): + class Actor(PropertyType): + def __init__(self, label): + PropertyType.__init__(self) + self.label = label + self.configurable = True + class Sensor(PropertyType): + def __init__(self, label): + PropertyType.__init__(self) + self.label = label + self.configurable = True + class Kettle(PropertyType): + def __init__(self, label): + PropertyType.__init__(self) + self.label = label + self.configurable = True \ No newline at end of file diff --git a/modules/core/step.py b/modules/core/step.py new file mode 100644 index 0000000..2d41255 --- /dev/null +++ b/modules/core/step.py @@ -0,0 +1,132 @@ +from modules import cbpi +from modules.core.props import StepProperty, Property +import time + + +class NotificationAPI(object): + def notify(self, headline, message, type="success", timeout=5000): + self.api.notify(headline, message, type, timeout) + +class ActorAPI(NotificationAPI): + + @cbpi.try_catch(None) + def actor_on(self, id, power=100): + self.api.switch_actor_on(int(id), power=power) + + @cbpi.try_catch(None) + def actor_off(self, id): + self.api.switch_actor_off(int(id)) + +class SensorAPI(NotificationAPI): + + @cbpi.try_catch(None) + def get_sensor_value(self, id): + return cbpi.get_sensor_value(id) + +class KettleAPI(NotificationAPI): + + @cbpi.try_catch(None) + def get_kettle_temp(self, id=None): + id = int(id) + if id is None: + id = self.kettle_id + return cbpi.get_sensor_value(int(self.api.cache.get("kettle").get(id).sensor)) + + @cbpi.try_catch(None) + def get_target_temp(self, id=None): + id = int(id) + if id is None: + id = self.kettle_id + return self.api.cache.get("kettle").get(id).target_temp + + def set_target_temp(self, temp, id=None): + temp = int(temp) + + try: + if id is None: + self.api.emit_event("SET_TARGET_TEMP", id=self.kettle_id, temp=temp) + else: + self.api.emit_event("SET_TARGET_TEMP", id=id, temp=temp) + except Exception as e: + + self.notify("Faild to set Target Temp", "", type="warning") + +class Timer(object): + timer_end = Property.Number("TIMER_END", configurable=False) + + def start_timer(self, timer): + if self.timer_end is not None: + return + self.timer_end = int(time.time()) + timer + + + def stop_timer(self): + if self.timer_end is not None: + self.timer_end = None + + def is_timer_running(self): + if self.timer_end is not None: + return True + else: + return False + + def is_timer_finished(self): + if self.timer_end is None: + return None + if self.timer_end <= int(time.time()): + return True + else: + return False + + +class StepBase(Timer, ActorAPI, SensorAPI, KettleAPI): + + __dirty = False + managed_fields = [] + n = False + + def next(self): + self.n = True + + def init(self): + print "INIT STEP" + + def finish(self): + print "FINSIH STEP" + + def reset(self): + print "REST STEP" + + def execute(self): + print "-------------" + print "Step Info" + print "Kettle ID: %s" % self.kettle_id + print "ID: %s" % self.id + + + def __init__(self, *args, **kwds): + for a in kwds: + super(StepBase, self).__setattr__(a, kwds.get(a)) + self.api = kwds.get("api") + self.id = kwds.get("id") + + self.name = kwds.get("name") + self.kettle_id = kwds.get("kettleid") + self.value = None + self.__dirty = False + + + def is_dirty(self): + return self.__dirty + + def reset_dirty(self): + self.__dirty = False + + def __setattr__(self, name, value): + + if name != "_StepBase__dirty" and name in self.managed_fields: + self.__dirty = True + super(StepBase, self).__setattr__(name, value) + else: + super(StepBase, self).__setattr__(name, value) + diff --git a/modules/fermenter/__init__.py b/modules/fermenter/__init__.py new file mode 100755 index 0000000..dd791a9 --- /dev/null +++ b/modules/fermenter/__init__.py @@ -0,0 +1,306 @@ +import time +from flask import request +from flask_classy import route + +from modules import DBModel, cbpi, get_db +from modules.core.baseview import BaseView + + +class Fermenter(DBModel): + __fields__ = ["name", "brewname", "sensor", "sensor2", "sensor3", "heater", "cooler", "logic", "config", "target_temp"] + __table_name__ = "fermenter" + __json_fields__ = ["config"] + +class FermenterStep(DBModel): + __fields__ = ["name", "days", "hours", "minutes", "temp", "direction", "order", "state", "start", "end", "timer_start", "fermenter_id"] + __table_name__ = "fermenter_step" + + @classmethod + def get_by_fermenter_id(cls, id): + cur = get_db().cursor() + cur.execute("SELECT * FROM %s WHERE fermenter_id = ?" % cls.__table_name__,(id,)) + result = [] + for r in cur.fetchall(): + result.append(cls(r)) + return result + + @classmethod + def get_max_order(cls,id): + cur = get_db().cursor() + cur.execute("SELECT max(fermenter_step.'order') as 'order' FROM %s WHERE fermenter_id = ?" % cls.__table_name__, (id,)) + r = cur.fetchone() + return r.get("order") + + @classmethod + def update_state(cls, id, state): + cur = get_db().cursor() + cur.execute("UPDATE %s SET state = ? WHERE id =?" % cls.__table_name__, (state, id)) + get_db().commit() + + @classmethod + def update_timer(cls, id, timer): + cur = get_db().cursor() + cur.execute("UPDATE %s SET timer_start = ? WHERE id =?" % cls.__table_name__, (timer, id)) + get_db().commit() + + @classmethod + def get_by_state(cls, state): + cur = get_db().cursor() + cur.execute("SELECT * FROM %s WHERE state = ?" % cls.__table_name__, state) + r = cur.fetchone() + if r is not None: + return cls(r) + else: + return None + + @classmethod + def reset_all_steps(cls,id): + cur = get_db().cursor() + cur.execute("UPDATE %s SET state = 'I', start = NULL, end = NULL, timer_start = NULL WHERE fermenter_id = ?" % cls.__table_name__, (id,)) + get_db().commit() + +class FermenterView(BaseView): + model = Fermenter + cache_key = "fermenter" + + def post_post_callback(self, m): + m.state = False + m.steps = [] + + + @route('//targettemp/', methods=['POST']) + def postTargetTemp(self, id, temp): + if temp is None or not temp: + return ('', 500) + id = int(id) + temp = float(temp) + cbpi.cache.get(self.cache_key)[id].target_temp = float(temp) + self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__) + cbpi.emit("UPDATE_FERMENTER_TARGET_TEMP", {"id": id, "target_temp": temp}) + return ('', 204) + + @route('//brewname', methods=['POST']) + def postBrewName(self, id): + data = request.json + brewname = data.get("brewname") + cbpi.cache.get(self.cache_key)[id].brewname = brewname + self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__) + cbpi.emit("UPDATE_FERMENTER_BREWNAME", {"id": id, "brewname": brewname}) + return ('', 204) + + @classmethod + def post_init_callback(cls, obj): + obj.steps = FermenterStep.get_by_fermenter_id(obj.id) + obj.state = False + + @route('//step', methods=['POST']) + def postStep(self, id): + data = request.json + order_max = FermenterStep.get_max_order(id) + order = order_max + 1 if order_max is not None else 1 + data["order"] = order + data["days"] = 0 if data["days"] == "" else data["days"] + data["hours"] = 0 if data["hours"] == "" else data["hours"] + data["minutes"] = 0 if data["minutes"] == "" else data["minutes"] + data["temp"] = 0 if data["temp"] == "" else data["temp"] + data["state"] = "I" + data["name"] = "NO NAME" if data["name"] == "" else data["name"] + f = FermenterStep.insert(**data) + + cbpi.cache.get(self.cache_key)[id].steps.append(f) + + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + + return ('', 204) + + @route('//step/', methods=["PUT"]) + def putStep(self, id, stepid): + data = request.json + # Select modal + + data["id"] = stepid + data["fermenter_id"] = id + + data["days"] = 0 if data["days"] == "" else data["days"] + data["hours"] = 0 if data["hours"] == "" else data["hours"] + data["minutes"] = 0 if data["minutes"] == "" else data["minutes"] + + for s in cbpi.cache.get(self.cache_key)[id].steps: + if s.id == stepid: + s.__dict__.update(**data) + + FermenterStep.update(**s.__dict__) + break + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + return ('', 204) + + @route('//step/', methods=["DELETE"]) + def deleteStep(self, id, stepid): + + for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps): + if s.id == stepid: + del cbpi.cache.get(self.cache_key)[id].steps[idx] + FermenterStep.delete(s.id) + break + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + return ('', 204) + + @route('//start', methods=['POST']) + def start_fermentation(self, id): + active = None + for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps): + if s.state == 'A': + active = s + break + + inactive = None + for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps): + if s.state == 'I': + inactive = s + break + + if active is not None: + + active.state = 'D' + active.end = time.time() + FermenterStep.update(**active.__dict__) + + del cbpi.cache["fermenter_task"][id] + + if inactive is not None: + fermenter = self.get_fermenter(inactive.fermenter_id) + current_temp = cbpi.get_sensor_value(int(fermenter.sensor)) + + inactive.state = 'A' + inactive.start = time.time() + inactive.direction = "C" if current_temp >= inactive.temp else "H" + FermenterStep.update(**inactive.__dict__) + + self.postTargetTemp(id, inactive.temp) + + cbpi.cache["fermenter_task"][id] = inactive + + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + return ('', 204) + + @route('//reset', methods=["POST"]) + def reset(self, id): + FermenterStep.reset_all_steps(id) + + cbpi.cache[self.cache_key][id].steps = FermenterStep.get_by_fermenter_id(id) + + if id in cbpi.cache["fermenter_task"]: + del cbpi.cache["fermenter_task"][id] + + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + return ('', 204) + + @route('//automatic', methods=['POST']) + def toggle(self, id): + fermenter = cbpi.cache.get(self.cache_key)[id] + try: + + if fermenter.state is False: + # Start controller + if fermenter.logic is not None: + cfg = fermenter.config.copy() + cfg.update( + dict(api=cbpi, fermenter_id=fermenter.id, heater=fermenter.heater, sensor=fermenter.sensor)) + instance = cbpi.get_fermentation_controller(fermenter.logic).get("class")(**cfg) + instance.init() + fermenter.controller_instance = instance + + def run(instance): + instance.run() + + t = cbpi.socketio.start_background_task(target=run, instance=instance) + fermenter.state = not fermenter.state + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key).get(id)) + else: + # Stop controller + fermenter.controller_instance.stop() + fermenter.state = not fermenter.state + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key).get(id)) + + except Exception as e: + + cbpi.notify("Toogle Fementer Controller failed", "Pleae check the %s configuration" % fermenter.name, + type="danger", timeout=None) + return ('', 500) + + return ('', 204) + + def get_fermenter(self, id): + return cbpi.cache["fermenter"].get(id) + + def target_temp_reached(self,id, step): + timestamp = time.time() + + days = step.days * 24 * 60 * 60 + hours = step.hours * 60 * 60 + minutes = step.minutes * 60 + target_time = days + hours + minutes + timestamp + + FermenterStep.update_timer(step.id, target_time) + + step.timer_start = target_time + + cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id]) + + def check_step(self): + for key, value in cbpi.cache["fermenter_task"].iteritems(): + + try: + fermenter = self.get_fermenter(key) + current_temp = current_temp = cbpi.get_sensor_value(int(fermenter.sensor)) + + if value.timer_start is None: + + if value.direction == "H" : + + if current_temp >= value.temp: + self.target_temp_reached(key,value) + else: + if current_temp <= value.temp: + self.target_temp_reached(key, value) + else: + if time.time() >= value.timer_start: + self.start_fermentation(key) + else: + pass + except Exception as e: + pass + + +@cbpi.backgroundtask(key="read_target_temps_fermenter", interval=5) +def read_target_temps(): + """ + background process that reads all passive sensors in interval of 1 second + :return: None + """ + result = {} + for key, value in cbpi.cache.get("fermenter").iteritems(): + cbpi.save_to_file(key, value.target_temp, prefix="fermenter") + + +instance = FermenterView() + +@cbpi.backgroundtask(key="fermentation_task", interval=1) +def execute_fermentation_step(): + with cbpi.app.app_context(): + instance.check_step() + + +def init_active_steps(): + ''' + active_steps = FermenterStep.query.filter_by(state='A') + for a in active_steps: + db.session.expunge(a) + cbpi.cache["fermenter_task"][a.fermenter_id] = a + ''' + +@cbpi.initalizer(order=1) +def init(cbpi): + print "INITIALIZE CONFIG MODULE" + FermenterView.register(cbpi.app, route_base='/api/fermenter') + FermenterView.init_cache() diff --git a/modules/kettle/__init__.py b/modules/kettle/__init__.py new file mode 100644 index 0000000..a8beee5 --- /dev/null +++ b/modules/kettle/__init__.py @@ -0,0 +1,88 @@ +from flask import request +from flask_classy import FlaskView, route +from modules import cbpi, socketio +from modules.core.baseview import BaseView +from modules.core.db import DBModel + +class Kettle(DBModel): + __fields__ = ["name","sensor", "heater", "automatic", "logic", "config", "agitator", "target_temp"] + __table_name__ = "kettle" + __json_fields__ = ["config"] + + +class Kettle2View(BaseView): + model = Kettle + cache_key = "kettle" + + @classmethod + def pre_post_callback(self, data): + data["target_temp"] = 0 + + @classmethod + def post_init_callback(cls, obj): + obj.state = False + + + def post_post_callback(self, m): + m.state = False + + + @route('//targettemp/', methods=['POST']) + def postTargetTemp(self, id, temp): + id = int(id) + temp = float(temp) + cbpi.cache.get("kettle")[id].target_temp = float(temp) + self.model.update(**self.api.cache.get(self.cache_key)[id].__dict__) + cbpi.emit("UPDATE_KETTLE_TARGET_TEMP", {"id": id, "target_temp": temp}) + return ('', 204) + + @route('//automatic', methods=['POST']) + def toggle(self, id): + kettle = cbpi.cache.get("kettle")[id] + + if kettle.state is False: + # Start controller + if kettle.logic is not None: + cfg = kettle.config.copy() + cfg.update(dict(api=cbpi, kettle_id=kettle.id, heater=kettle.heater, sensor=kettle.sensor)) + instance = cbpi.get_controller(kettle.logic).get("class")(**cfg) + instance.init() + kettle.controller_instance = instance + def run(instance): + instance.run() + t = self.api.socketio.start_background_task(target=run, instance=instance) + kettle.state = not kettle.state + cbpi.emit("UPDATE_KETTLE", cbpi.cache.get("kettle").get(id)) + else: + # Stop controller + kettle.controller_instance.stop() + kettle.state = not kettle.state + cbpi.emit("UPDATE_KETTLE", cbpi.cache.get("kettle").get(id)) + return ('', 204) + +@cbpi.event("SET_TARGET_TEMP") +def set_target_temp(id, temp): + ''' + Change Taget Temp Event + :param id: kettle id + :param temp: target temp to set + :return: None + ''' + print "GOT EVENT %s %s" % (id, temp) + Kettle2View().postTargetTemp(id,temp) + +@cbpi.backgroundtask(key="read_target_temps", interval=5) +def read_target_temps(): + """ + background process that reads all passive sensors in interval of 1 second + :return: None + """ + result = {} + for key, value in cbpi.cache.get("kettle").iteritems(): + cbpi.save_to_file(key, value.target_temp, prefix="kettle") + +@cbpi.initalizer() +def init(cbpi): + Kettle2View.api = cbpi + Kettle2View.register(cbpi.app,route_base='/api/kettle') + Kettle2View.init_cache() diff --git a/modules/logs/__init__.py b/modules/logs/__init__.py new file mode 100644 index 0000000..b89697f --- /dev/null +++ b/modules/logs/__init__.py @@ -0,0 +1 @@ +import endpoints \ No newline at end of file diff --git a/modules/logs/endpoints.py b/modules/logs/endpoints.py new file mode 100644 index 0000000..9bbce01 --- /dev/null +++ b/modules/logs/endpoints.py @@ -0,0 +1,109 @@ +import datetime +import os +from flask import Blueprint, request, send_from_directory, json +from flask_classy import FlaskView, route +from modules import cbpi + + +class LogView(FlaskView): + + @route('/', methods=['GET']) + def get_all_logfiles(self): + result = [] + for filename in os.listdir("./logs"): + if filename.endswith(".log"): + result.append(filename) + return json.dumps(result) + + @route('/actions') + def actions(self): + filename = "./logs/action.log" + if os.path.isfile(filename) == False: + return + import csv + array = [] + with open(filename, 'rb') as f: + reader = csv.reader(f) + for row in reader: + try: + array.append([int((datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S") - datetime.datetime(1970, 1, 1)).total_seconds()) * 1000, row[1]]) + except: + pass + return json.dumps(array) + + @route('/', methods=["DELETE"]) + def clearlog(self, file): + """ + Overload delete method to shutdown sensor before delete + :param id: sensor id + :return: HTTP 204 + """ + if not self.check_filename(file): + return ('File Not Found', 404) + + filename = "./logs/%s" % file + if os.path.isfile(filename) == True: + os.remove(filename) + cbpi.notify("log deleted succesfully", "") + else: + cbpi.notify("Failed to delete log", "", type="danger") + return ('', 204) + + def read_log_as_json(self, type, id): + filename = "./logs/%s_%s.log" % (type, id) + if os.path.isfile(filename) == False: + return + + import csv + array = [] + with open(filename, 'rb') as f: + reader = csv.reader(f) + for row in reader: + try: + array.append([int((datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S") - datetime.datetime(1970, 1, 1)).total_seconds()) * 1000, float(row[1])]) + except: + pass + return array + + + @route('//', methods=["POST"]) + def get_logs_as_json(self, t, id): + data = request.json + result = [] + if t == "s": + name = cbpi.cache.get("sensors").get(id).name + result.append({"name": name, "data": self.read_log_as_json("sensor", id)}) + + if t == "k": + kettle = cbpi.cache.get("kettle").get(id) + result.append({"name": "Temp", "data": self.read_log_as_json("sensor", kettle.sensor)}) + result.append({"name": "Target Temp", "data": self.read_log_as_json("kettle", kettle.id)}) + + if t == "f": + fermenter = cbpi.cache.get("fermenter").get(id) + result.append({"name": "Temp", "data": self.read_log_as_json("sensor", fermenter.sensor)}) + result.append({"name": "Target Temp", "data": self.read_log_as_json("fermenter", fermenter.id)}) + return json.dumps(result) + + @route('/download/') + @cbpi.nocache + def download(self, file): + if not self.check_filename(file): + return ('File Not Found', 404) + return send_from_directory('../logs', file, as_attachment=True, attachment_filename=file) + + def check_filename(self, name): + import re + pattern = re.compile('^([A-Za-z0-9-_])+.log$') + + return True if pattern.match(name) else False + +@cbpi.initalizer() +def init(app): + """ + Initializer for the message module + :param app: the flask app + :return: None + """ + print "INITIALIZE LOG MODULE" + LogView.register(cbpi.app, route_base='/api/logs') diff --git a/modules/notification/__init__.py b/modules/notification/__init__.py new file mode 100644 index 0000000..4098749 --- /dev/null +++ b/modules/notification/__init__.py @@ -0,0 +1,52 @@ +import json +from flask_classy import FlaskView, route +from modules import cbpi +class NotificationView(FlaskView): + + @route('/', methods=['GET']) + def getMessages(self): + """ + Get all messages + :return: current messages + """ + + return json.dumps(cbpi.cache["messages"]) + + @route('/', methods=['DELETE']) + def dismiss(self, id): + """ + Delete message from cache by id + :param id: message id to be deleted + :return: empty response HTTP 204 + """ + for idx, m in enumerate(cbpi.cache.get("messages", [])): + if (m.get("id") == id): + cbpi.cache["messages"].pop(idx) + return ('', 204) + +@cbpi.event("MESSAGE", async=True) +def messageEvent(message, **kwargs): + """ + React on message event. add the message to the cache and push the message to the clients + :param message: the message + :param kwargs: other parameter + :return: None + """ + + msg = {"id": len(cbpi.cache["messages"]), "type": "info", "message": message, "read": False} + cbpi.cache["messages"].append(msg) + cbpi.emit('MESSAGE', msg,) + +@cbpi.initalizer(order=2) +def init(cbpi): + """ + Initializer for the message module + :param app: the flask app + :return: None + """ + print "INITIALIZE MESSAGE MODULE" + + msg = {"id": len(cbpi.cache["messages"]), "type": "info", "headline": "Support CraftBeerPi with your donation", "message": "You will find the PayPay Donation button in the system menu" , "read": False} + cbpi.cache["messages"].append(msg) + + NotificationView.register(cbpi.app, route_base='/api/notification') diff --git a/modules/sensors/__init__.py b/modules/sensors/__init__.py new file mode 100755 index 0000000..161868e --- /dev/null +++ b/modules/sensors/__init__.py @@ -0,0 +1,43 @@ +import time +from flask_classy import route +from modules import DBModel, cbpi +from modules.core.baseview import BaseView + +class Sensor(DBModel): + __fields__ = ["name","type", "config", "hide"] + __table_name__ = "sensor" + __json_fields__ = ["config"] + +class SensorView(BaseView): + model = Sensor + cache_key = "sensors" + + + def post_post_callback(self, m): + cbpi.init_sensor(m.id) + + def post_put_callback(self, m): + cbpi.stop_sensor(m.id) + cbpi.init_sensor(m.id) + + def pre_delete_callback(self, m): + cbpi.stop_sensor(m.id) + +@cbpi.initalizer(order=1000) +def init(cbpi): + print "INITIALIZE SENSOR MODULE" + SensorView.register(cbpi.app, route_base='/api/sensor') + SensorView.init_cache() + cbpi.init_sensors() + + +@cbpi.backgroundtask(key="read_passiv_sensor", interval=5) +def read_passive_sensor(): + """ + background process that reads all passive sensors in interval of 1 second + :return: None + + """ + for key, value in cbpi.cache.get("sensors").iteritems(): + if value.mode == "P": + value.instance.read() diff --git a/modules/stats/__init__.py b/modules/stats/__init__.py new file mode 100644 index 0000000..894f59f --- /dev/null +++ b/modules/stats/__init__.py @@ -0,0 +1,36 @@ +from modules import cbpi + + +def getserial(): + cpuserial = "0000000000000000" + try: + f = open('/proc/cpuinfo','r') + for line in f: + if line[0:6]=='Serial': + cpuserial = line[10:26] + f.close() + except: + cpuserial = "0000000000000000" + return cpuserial + + +@cbpi.initalizer(order=9999) +def sendStats(cbpi): + print "INITIALIZE STATS" + try: + serial = getserial() + + info = { + "id": serial, + "version": "3.0", + "kettle": len(cbpi.cache.get("kettle")), + "hardware": len(cbpi.cache.get("actors")), + "thermometer": "CBP3.0", + "hardware_control": "CBP3.0" + } + + import requests + r = requests.post('http://statistics.craftbeerpi.com', json=info) + + except Exception as e: + pass \ No newline at end of file diff --git a/modules/steps/__init__.py b/modules/steps/__init__.py new file mode 100755 index 0000000..5953ed9 --- /dev/null +++ b/modules/steps/__init__.py @@ -0,0 +1,230 @@ +import time +from flask import json +from flask_classy import route + +from modules import DBModel, cbpi, get_db +from modules.core.baseview import BaseView + + +class Step(DBModel): + __fields__ = ["name","type", "stepstate", "state", "start", "end", "order", "config"] + __table_name__ = "step" + __json_fields__ = ["config", "stepstate"] + __order_by__ = "order" + __as_array__ = True + + @classmethod + def get_max_order(cls): + cur = get_db().cursor() + cur.execute("SELECT max(step.'order') as 'order' FROM %s" % cls.__table_name__) + r = cur.fetchone() + return r.get("order") + + @classmethod + def get_by_state(cls, state): + cur = get_db().cursor() + cur.execute("SELECT * FROM %s WHERE state = ?" % cls.__table_name__, state) + r = cur.fetchone() + if r is not None: + return cls(r) + else: + return None + + @classmethod + def delete_all(cls): + cur = get_db().cursor() + cur.execute("DELETE FROM %s" % cls.__table_name__) + get_db().commit() + + @classmethod + def reset_all_steps(cls): + cur = get_db().cursor() + cur.execute("UPDATE %s SET state = 'I', stepstate = NULL , start = NULL, end = NULL " % cls.__table_name__) + get_db().commit() + + @classmethod + def update_state(cls, id, state): + cur = get_db().cursor() + cur.execute("UPDATE %s SET state = ? WHERE id =?" % cls.__table_name__, (state, id)) + get_db().commit() + + @classmethod + def update_step_state(cls, id, state): + cur = get_db().cursor() + cur.execute("UPDATE %s SET stepstate = ? WHERE id =?" % cls.__table_name__, (json.dumps(state),id)) + get_db().commit() + +class StepView(BaseView): + model = Step + def pre_post_callback(self, data): + order = self.model.get_max_order() + data["order"] = 1 if order is None else order + 1 + data["state"] = "I" + + @route('/', methods=["DELETE"]) + def deleteAll(self): + self.model.delete_all() + cbpi.emit("UPDATE_ALL_STEPS", self.model.get_all()) + return ('', 204) + + @route('/action/', methods=["POST"]) + def action(self, method): + + cbpi.cache["active_step"].__getattribute__(method)() + + return ('', 204) + + @route('/reset', methods=["POST"]) + def reset(self): + + self.model.reset_all_steps() + #db.session.commit() + self.stop_step() + cbpi.emit("UPDATE_ALL_STEPS", self.model.get_all()) + return ('', 204) + + def stop_step(self): + ''' + stop active step + :return: + ''' + step = cbpi.cache.get("active_step") + cbpi.cache["active_step"] = None + + if step is not None: + step.finish() + + @route('/reset/current', methods=['POST']) + def resetCurrentStep(self): + ''' + Reset current step + :return: + ''' + step = cbpi.cache.get("active_step") + + if step is not None: + step.reset() + if step.is_dirty(): + + state = {} + for field in step.managed_fields: + state[field] = step.__getattribute__(field) + Step.update_step_state(step.id, state) + step.reset_dirty() + cbpi.emit("UPDATE_ALL_STEPS", self.model.get_all()) + return ('', 204) + + def init_step(self, step): + + cbpi.log_action("Start Step %s" % step.name) + type_cfg = cbpi.cache.get("step_types").get(step.type) + if type_cfg is None: + # if type not found + return + + # copy config to stepstate + # init step + cfg = step.config.copy() + cfg.update(dict(name=step.name, api=cbpi, id=step.id, timer_end=None, managed_fields=get_manged_fields_as_array(type_cfg))) + instance = type_cfg.get("class")(**cfg) + instance.init() + + # set step instance to ache + cbpi.cache["active_step"] = instance + + @route('/next', methods=['POST']) + @route('/start', methods=['POST']) + def start(self): + active = Step.get_by_state("A") + inactive = Step.get_by_state('I') + + if (active is not None): + active.state = 'D' + active.end = int(time.time()) + self.stop_step() + Step.update(**active.__dict__) + + if (inactive is not None): + self.init_step(inactive) + inactive.state = 'A' + inactive.stepstate = inactive.config + inactive.start = int(time.time()) + Step.update(**inactive.__dict__) + else: + cbpi.log_action("Brewing Finished") + cbpi.notify("Brewing Finished", "You are done!", timeout=None) + + cbpi.emit("UPDATE_ALL_STEPS", Step.get_all()) + return ('', 204) + +def get_manged_fields_as_array(type_cfg): + + result = [] + for f in type_cfg.get("properties"): + + result.append(f.get("name")) + + return result + +@cbpi.try_catch(None) +def init_after_startup(): + ''' + Restart after startup. Check is a step is in state A and reinitialize + :return: None + ''' + + step = Step.get_by_state('A') + # We have an active step + if step is not None: + + # get the type + + + type_cfg = cbpi.cache.get("step_types").get(step.type) + + if type_cfg is None: + # step type not found. cant restart step + return + cfg = step.stepstate.copy() + cfg.update(dict(api=cbpi, id=step.id, timer_end=None, managed_fields=get_manged_fields_as_array(type_cfg))) + instance = type_cfg.get("class")(**cfg) + instance.init() + cbpi.cache["active_step"] = instance + +@cbpi.initalizer(order=2000) +def init(cbpi): + print "INITIALIZE STEPS MODULE" + StepView.register(cbpi.app, route_base='/api/step') + + def get_all(): + with cbpi.app.app_context(): + return Step.get_all() + + with cbpi.app.app_context(): + init_after_startup() + cbpi.add_cache_callback("steps", get_all) + +@cbpi.backgroundtask(key="step_task", interval=0.1) +def execute_step(): + ''' + Background job which executes the step + :return: + ''' + with cbpi.app.app_context(): + step = cbpi.cache.get("active_step") + if step is not None: + step.execute() + + if step.is_dirty(): + + state = {} + for field in step.managed_fields: + state[field] = step.__getattribute__(field) + Step.update_step_state(step.id, state) + step.reset_dirty() + cbpi.emit("UPDATE_ALL_STEPS", Step.get_all()) + + if step.n is True: + + StepView().start() + cbpi.emit("UPDATE_ALL_STEPS", Step.get_all()) diff --git a/modules/system/__init__.py b/modules/system/__init__.py new file mode 100755 index 0000000..b89697f --- /dev/null +++ b/modules/system/__init__.py @@ -0,0 +1 @@ +import endpoints \ No newline at end of file diff --git a/modules/system/endpoints.py b/modules/system/endpoints.py new file mode 100755 index 0000000..f354543 --- /dev/null +++ b/modules/system/endpoints.py @@ -0,0 +1,107 @@ +from flask import json +from flask_classy import FlaskView, route +from git import Repo, Git + +from modules.app_config import cbpi + +import pprint +import time + + +class SystemView(FlaskView): + def doShutdown(self): + time.sleep(5) + from subprocess import call + call("halt") + + @route('/shutdown', methods=['POST']) + def shutdown(self): + """ + Shutdown hook + :return: HTTP 204 + """ + self.doShutdown() + + return ('', 204) + + def doReboot(self): + time.sleep(5) + from subprocess import call + call("reboot") + + @route('/reboot', methods=['POST']) + def reboot(self): + """ + Reboot hook + :return: HTTP 204 + """ + self.doReboot() + + return ('', 204) + + @route('/tags/', methods=['GET']) + def checkout_tag(self,name): + repo = Repo('./') + repo.git.reset('--hard') + o = repo.remotes.origin + o.fetch() + g = Git('./') + g.checkout(name) + cbpi.notify("Checkout successful", "Please restart the system") + return ('', 204) + + @route('/git/status', methods=['GET']) + def git_status(self): + repo = Repo('./') + o = repo.remotes.origin + o.fetch() + # Tags + tags = [] + for t in repo.tags: + tags.append({"name": t.name, "commit": str(t.commit), "date": t.commit.committed_date, + "committer": t.commit.committer.name, "message": t.commit.message}) + try: + branch_name = repo.active_branch.name + # test1 + except: + branch_name = None + + changes = [] + commits_behind = repo.iter_commits('master..origin/master') + + for c in list(commits_behind): + changes.append({"committer": c.committer.name, "message": c.message}) + + return json.dumps({"tags": tags, "headcommit": str(repo.head.commit), "branchname": branch_name, + "master": {"changes": changes}}) + + @route('/check_update', methods=['GET']) + def check_update(self): + + repo = Repo('./') + o = repo.remotes.origin + o.fetch() + changes = [] + commits_behind = repo.iter_commits('master..origin/master') + + for c in list(commits_behind): + changes.append({"committer": c.committer.name, "message": c.message}) + + return json.dumps(changes) + + @route('/git/pull', methods=['POST']) + def update(self): + repo = Repo('./') + o = repo.remotes.origin + info = o.pull() + cbpi.notify("Pull successful", "The lasted updated was downloaded. Please restart the system") + return ('', 204) + + @route('/dump', methods=['GET']) + def dump(self): + return json.dumps(cbpi.cache) + +@cbpi.initalizer() +def init(cbpi): + print "INITIALIZE SYSTEM MODULE" + SystemView.register(cbpi.app, route_base='/api/system') diff --git a/modules/ui/__init__.py b/modules/ui/__init__.py new file mode 100755 index 0000000..b89697f --- /dev/null +++ b/modules/ui/__init__.py @@ -0,0 +1 @@ +import endpoints \ No newline at end of file diff --git a/modules/ui/endpoints.py b/modules/ui/endpoints.py new file mode 100644 index 0000000..cc1d2e2 --- /dev/null +++ b/modules/ui/endpoints.py @@ -0,0 +1,23 @@ +from flask import Blueprint, render_template, request +from modules import cbpi + +react = Blueprint('react', __name__, template_folder='templates', static_folder='static') + +@cbpi.initalizer(order=10) +def init(cbpi): + print "INITIALIZE UI" + cbpi.app.register_blueprint(react, url_prefix='/ui') + + +@react.route('/') +def index(): + return react.send_static_file("index.html") + + + + + + + + + diff --git a/modules/ui/static/bootstrap.dark.css b/modules/ui/static/bootstrap.dark.css new file mode 100644 index 0000000..5eb3a4c --- /dev/null +++ b/modules/ui/static/bootstrap.dark.css @@ -0,0 +1,11 @@ +/*! + * bootswatch v3.3.7 + * Homepage: http://bootswatch.com + * Copyright 2012-2016 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*//*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#c8c8c8;background-color:#272b30}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#ffffff;text-decoration:none}a:hover,a:focus{color:#ffffff;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #1c1e22}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#7a8288}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#f89406;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#7a8288}.text-primary{color:#7a8288}a.text-primary:hover,a.text-primary:focus{color:#62686d}.text-success{color:#ffffff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff;background-color:#7a8288}a.bg-primary:hover,a.bg-primary:focus{background-color:#62686d}.bg-success{background-color:#62c462}a.bg-success:hover,a.bg-success:focus{background-color:#42b142}.bg-info{background-color:#5bc0de}a.bg-info:hover,a.bg-info:focus{background-color:#31b0d5}.bg-warning{background-color:#f89406}a.bg-warning:hover,a.bg-warning:focus{background-color:#c67605}.bg-danger{background-color:#ee5f5b}a.bg-danger:hover,a.bg-danger:focus{background-color:#e9322d}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #1c1e22}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #7a8288}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #7a8288}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#7a8288}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #7a8288;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#3a3f44;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:#2e3338}caption{padding-top:8px;padding-bottom:8px;color:#7a8288;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #1c1e22}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #1c1e22}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #1c1e22}.table .table{background-color:#272b30}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #1c1e22}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #1c1e22}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#353a41}.table-hover>tbody>tr:hover{background-color:#49515a}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#49515a}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#3e444c}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#62c462}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#4fbd4f}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#5bc0de}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#46b8da}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#f89406}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#df8505}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#ee5f5b}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ec4844}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #1c1e22}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#c8c8c8;border:0;border-bottom:1px solid #1c1e22}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:14px;line-height:1.42857143;color:#272b30}.form-control{display:block;width:100%;height:38px;padding:8px 12px;font-size:14px;line-height:1.42857143;color:#272b30;background-color:#ffffff;background-image:none;border:1px solid #000000;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#7a8288;opacity:1}.form-control:-ms-input-placeholder{color:#7a8288}.form-control::-webkit-input-placeholder{color:#7a8288}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#999999;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:38px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:54px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:54px;line-height:54px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:54px;line-height:54px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:47.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#62c462}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#f89406}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#ee5f5b}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#ffffff}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:9px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:8px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ffffff;background-color:#3a3f44;border-color:#3a3f44}.btn-default:focus,.btn-default.focus{color:#ffffff;background-color:#232628;border-color:#000000}.btn-default:hover{color:#ffffff;background-color:#232628;border-color:#1e2023}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#232628;border-color:#1e2023}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ffffff;background-color:#121415;border-color:#000000}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#3a3f44;border-color:#3a3f44}.btn-default .badge{color:#3a3f44;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#7a8288;border-color:#7a8288}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#62686d;border-color:#3e4245}.btn-primary:hover{color:#ffffff;background-color:#62686d;border-color:#5d6368}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#62686d;border-color:#5d6368}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#51565a;border-color:#3e4245}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#7a8288;border-color:#7a8288}.btn-primary .badge{color:#7a8288;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#62c462;border-color:#62c462}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#42b142;border-color:#2d792d}.btn-success:hover{color:#ffffff;background-color:#42b142;border-color:#40a940}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#42b142;border-color:#40a940}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#399739;border-color:#2d792d}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#62c462;border-color:#62c462}.btn-success .badge{color:#62c462;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#31b0d5;border-color:#1f7e9a}.btn-info:hover{color:#ffffff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#269abc;border-color:#1f7e9a}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info .badge{color:#5bc0de;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#f89406;border-color:#f89406}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#c67605;border-color:#7c4a03}.btn-warning:hover{color:#ffffff;background-color:#c67605;border-color:#bc7005}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#c67605;border-color:#bc7005}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#a36104;border-color:#7c4a03}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f89406;border-color:#f89406}.btn-warning .badge{color:#f89406;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#e9322d;border-color:#b71713}.btn-danger:hover{color:#ffffff;background-color:#e9322d;border-color:#e82924}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#e9322d;border-color:#e82924}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#dc1c17;border-color:#b71713}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger .badge{color:#ee5f5b;background-color:#ffffff}.btn-link{color:#ffffff;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#ffffff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#7a8288;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;-o-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#3a3f44;border:1px solid #272b30;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#272b30}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#c8c8c8;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#ffffff;background-color:#272b30}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#272b30}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#7a8288}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#7a8288;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:54px;line-height:54px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:normal;line-height:1;color:#272b30;text-align:center;background-color:#3a3f44;border:1px solid rgba(0,0,0,0.6);border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:14px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#3e444c}.nav>li.disabled>a{color:#7a8288}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#7a8288;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#3e444c;border-color:#ffffff}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #1c1e22}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#1c1e22 #1c1e22 #1c1e22}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#ffffff;background-color:#3e444c;border:1px solid #1c1e22;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #1c1e22}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #1c1e22;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#272b30}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:transparent}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #1c1e22}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #1c1e22;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#272b30}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:6px;margin-bottom:6px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#3a3f44;border-color:#2b2e32}.navbar-default .navbar-brand{color:#c8c8c8}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-default .navbar-text{color:#c8c8c8}.navbar-default .navbar-nav>li>a{color:#c8c8c8}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#272b2e}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#272b2e}.navbar-default .navbar-toggle .icon-bar{background-color:#c8c8c8}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#2b2e32}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#272b2e;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#c8c8c8}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-link{color:#c8c8c8}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-default .btn-link{color:#c8c8c8}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#ffffff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#cccccc}.navbar-inverse{background-color:#7a8288;border-color:#62686d}.navbar-inverse .navbar-brand{color:#cccccc}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-inverse .navbar-text{color:#cccccc}.navbar-inverse .navbar-nav>li>a{color:#cccccc}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#5d6368}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#5d6368}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#697075}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#5d6368;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#62686d}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#62686d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cccccc}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-inverse .navbar-link{color:#cccccc}.navbar-inverse .navbar-link:hover{color:#ffffff}.navbar-inverse .btn-link{color:#cccccc}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#ffffff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#cccccc}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:transparent;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#cccccc}.breadcrumb>.active{color:#7a8288}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;line-height:1.42857143;text-decoration:none;color:#ffffff;background-color:#3a3f44;border:1px solid rgba(0,0,0,0.6);margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#ffffff;background-color:transparent;border-color:rgba(0,0,0,0.6)}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#ffffff;background-color:#232628;border-color:rgba(0,0,0,0.6);cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#7a8288;background-color:#ffffff;border-color:rgba(0,0,0,0.6);cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#3a3f44;border:1px solid rgba(0,0,0,0.6);border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:transparent}.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:#7a8288;background-color:#3a3f44;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#3a3f44}.label-default[href]:hover,.label-default[href]:focus{background-color:#232628}.label-primary{background-color:#7a8288}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#62686d}.label-success{background-color:#62c462}.label-success[href]:hover,.label-success[href]:focus{background-color:#42b142}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f89406}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c67605}.label-danger{background-color:#ee5f5b}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#e9322d}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#ffffff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#7a8288;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#ffffff;background-color:#7a8288}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#1c1e22}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#050506}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#ffffff}.thumbnail .caption{padding:9px;color:#c8c8c8}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#62c462;border-color:#62bd4f;color:#ffffff}.alert-success hr{border-top-color:#55b142}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#5bc0de;border-color:#3dced8;color:#ffffff}.alert-info hr{border-top-color:#2ac7d2}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#f89406;border-color:#e96506;color:#ffffff}.alert-warning hr{border-top-color:#d05a05}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#ee5f5b;border-color:#ed4d63;color:#ffffff}.alert-danger hr{border-top-color:#ea364f}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#1c1e22;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#7a8288;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{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:-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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#62c462}.progress-striped .progress-bar-success{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:-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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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:-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)}.progress-bar-warning{background-color:#f89406}.progress-striped .progress-bar-warning{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:-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)}.progress-bar-danger{background-color:#ee5f5b}.progress-striped .progress-bar-danger{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:-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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#32383e;border:1px solid rgba(0,0,0,0.6)}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#c8c8c8}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#ffffff}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#c8c8c8;background-color:#3e444c}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#999999;color:#7a8288;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#7a8288}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#3e444c;border-color:rgba(0,0,0,0.6)}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#a2aab4}.list-group-item-success{color:#ffffff;background-color:#62c462}a.list-group-item-success,button.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#ffffff;background-color:#4fbd4f}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#5bc0de}a.list-group-item-info,button.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#ffffff;background-color:#46b8da}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#f89406}a.list-group-item-warning,button.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#ffffff;background-color:#df8505}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#ee5f5b}a.list-group-item-danger,button.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#ffffff;background-color:#ec4844}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#2e3338;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#3e444c;border-top:1px solid rgba(0,0,0,0.6);border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #1c1e22}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid rgba(0,0,0,0.6)}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid rgba(0,0,0,0.6)}.panel-default{border-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading{color:#c8c8c8;background-color:#3e444c;border-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading .badge{color:#3e444c;background-color:#c8c8c8}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-primary{border-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading{color:#ffffff;background-color:#7a8288;border-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading .badge{color:#7a8288;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-success{border-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading{color:#ffffff;background-color:#62c462;border-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading .badge{color:#62c462;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-info{border-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading{color:#ffffff;background-color:#5bc0de;border-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading .badge{color:#5bc0de;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-warning{border-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading{color:#ffffff;background-color:#f89406;border-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading .badge{color:#f89406;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-danger{border-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading{color:#ffffff;background-color:#ee5f5b;border-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading .badge{color:#ee5f5b;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#2e3338;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #1c1e22}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #1c1e22}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#000000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#2e3338;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#2e3338;border-bottom:1px solid #22262a;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#666666;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#2e3338}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#666666;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#2e3338}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#666666;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#2e3338}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#666666;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#2e3338;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.navbar-default,.navbar-inverse{border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}@media (min-width:768px){.navbar-default .navbar-nav>li>a,.navbar-inverse .navbar-nav>li>a{border-right:1px solid rgba(0,0,0,0.2);border-left:1px solid rgba(255,255,255,0.1)}.navbar-default .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:hover{border-left-color:transparent}.navbar-default .nav .open>a,.navbar-inverse .nav .open>a{border-color:transparent}.navbar-default .navbar-nav>li.active>a,.navbar-inverse .navbar-nav>li.active>a{border-left-color:transparent}.navbar-default .navbar-form,.navbar-inverse .navbar-form{margin-left:5px;margin-right:5px}}.navbar-default{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.navbar-default .navbar-nav>li>a:hover{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none}.navbar-inverse{background-image:-webkit-linear-gradient(#8a9196, #7a8288 60%, #70787d);background-image:-o-linear-gradient(#8a9196, #7a8288 60%, #70787d);background-image:-webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7a8288), to(#70787d));background-image:linear-gradient(#8a9196, #7a8288 60%, #70787d);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);-webkit-filter:none;filter:none}.navbar-inverse .badge{background-color:#5d6368}.navbar-inverse .navbar-nav>li>a:hover{background-image:-webkit-linear-gradient(#404448, #4e5458 40%, #53595d);background-image:-o-linear-gradient(#404448, #4e5458 40%, #53595d);background-image:-webkit-gradient(linear, left top, left bottom, from(#404448), color-stop(40%, #4e5458), to(#53595d));background-image:linear-gradient(#404448, #4e5458 40%, #53595d);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404448', endColorstr='#ff53595d', GradientType=0);-webkit-filter:none;filter:none}.btn,.btn:hover{border-color:rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.btn-default{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.btn-default:hover{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none}.btn-primary{background-image:-webkit-linear-gradient(#8a9196, #7a8288 60%, #70787d);background-image:-o-linear-gradient(#8a9196, #7a8288 60%, #70787d);background-image:-webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7a8288), to(#70787d));background-image:linear-gradient(#8a9196, #7a8288 60%, #70787d);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);-webkit-filter:none;filter:none}.btn-primary:hover{background-image:-webkit-linear-gradient(#404448, #4e5458 40%, #53595d);background-image:-o-linear-gradient(#404448, #4e5458 40%, #53595d);background-image:-webkit-gradient(linear, left top, left bottom, from(#404448), color-stop(40%, #4e5458), to(#53595d));background-image:linear-gradient(#404448, #4e5458 40%, #53595d);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404448', endColorstr='#ff53595d', GradientType=0);-webkit-filter:none;filter:none}.btn-success{background-image:-webkit-linear-gradient(#78cc78, #62c462 60%, #53be53);background-image:-o-linear-gradient(#78cc78, #62c462 60%, #53be53);background-image:-webkit-gradient(linear, left top, left bottom, from(#78cc78), color-stop(60%, #62c462), to(#53be53));background-image:linear-gradient(#78cc78, #62c462 60%, #53be53);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff78cc78', endColorstr='#ff53be53', GradientType=0);-webkit-filter:none;filter:none}.btn-success:hover{background-image:-webkit-linear-gradient(#2f7d2f, #379337 40%, #3a9a3a);background-image:-o-linear-gradient(#2f7d2f, #379337 40%, #3a9a3a);background-image:-webkit-gradient(linear, left top, left bottom, from(#2f7d2f), color-stop(40%, #379337), to(#3a9a3a));background-image:linear-gradient(#2f7d2f, #379337 40%, #3a9a3a);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f7d2f', endColorstr='#ff3a9a3a', GradientType=0);-webkit-filter:none;filter:none}.btn-info{background-image:-webkit-linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);background-image:-o-linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);background-image:-webkit-gradient(linear, left top, left bottom, from(#74cae3), color-stop(60%, #5bc0de), to(#4ab9db));background-image:linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff74cae3', endColorstr='#ff4ab9db', GradientType=0);-webkit-filter:none;filter:none}.btn-info:hover{background-image:-webkit-linear-gradient(#20829f, #2596b8 40%, #279dc1);background-image:-o-linear-gradient(#20829f, #2596b8 40%, #279dc1);background-image:-webkit-gradient(linear, left top, left bottom, from(#20829f), color-stop(40%, #2596b8), to(#279dc1));background-image:linear-gradient(#20829f, #2596b8 40%, #279dc1);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20829f', endColorstr='#ff279dc1', GradientType=0);-webkit-filter:none;filter:none}.btn-warning{background-image:-webkit-linear-gradient(#faa123, #f89406 60%, #e48806);background-image:-o-linear-gradient(#faa123, #f89406 60%, #e48806);background-image:-webkit-gradient(linear, left top, left bottom, from(#faa123), color-stop(60%, #f89406), to(#e48806));background-image:linear-gradient(#faa123, #f89406 60%, #e48806);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffaa123', endColorstr='#ffe48806', GradientType=0);-webkit-filter:none;filter:none}.btn-warning:hover{background-image:-webkit-linear-gradient(#804d03, #9e5f04 40%, #a86404);background-image:-o-linear-gradient(#804d03, #9e5f04 40%, #a86404);background-image:-webkit-gradient(linear, left top, left bottom, from(#804d03), color-stop(40%, #9e5f04), to(#a86404));background-image:linear-gradient(#804d03, #9e5f04 40%, #a86404);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff804d03', endColorstr='#ffa86404', GradientType=0);-webkit-filter:none;filter:none}.btn-danger{background-image:-webkit-linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);background-image:-o-linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);background-image:-webkit-gradient(linear, left top, left bottom, from(#f17a77), color-stop(60%, #ee5f5b), to(#ec4d49));background-image:linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff17a77', endColorstr='#ffec4d49', GradientType=0);-webkit-filter:none;filter:none}.btn-danger:hover{background-image:-webkit-linear-gradient(#bb1813, #d71c16 40%, #e01d17);background-image:-o-linear-gradient(#bb1813, #d71c16 40%, #e01d17);background-image:-webkit-gradient(linear, left top, left bottom, from(#bb1813), color-stop(40%, #d71c16), to(#e01d17));background-image:linear-gradient(#bb1813, #d71c16 40%, #e01d17);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbb1813', endColorstr='#ffe01d17', GradientType=0);-webkit-filter:none;filter:none}.btn-link,.btn-link:hover{border-color:transparent}h1,h2,h3,h4,h5,h6{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.text-primary,.text-primary:hover{color:#7a8288}.text-success,.text-success:hover{color:#62c462}.text-danger,.text-danger:hover{color:#ee5f5b}.text-warning,.text-warning:hover{color:#f89406}.text-info,.text-info:hover{color:#5bc0de}.table .success,.table .warning,.table .danger,.table .info{color:#fff}.table-bordered tbody tr.success td,.table-bordered tbody tr.warning td,.table-bordered tbody tr.danger td,.table-bordered tbody tr.success:hover td,.table-bordered tbody tr.warning:hover td,.table-bordered tbody tr.danger:hover td{border-color:#1c1e22}.table-responsive>.table{background-color:#2e3338}input,textarea{color:#272b30}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .form-control-feedback{color:#f89406}.has-warning .form-control,.has-warning .form-control:focus{border-color:#f89406}.has-warning .input-group-addon{border-color:rgba(0,0,0,0.6)}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label,.has-error .form-control-feedback{color:#ee5f5b}.has-error .form-control,.has-error .form-control:focus{border-color:#ee5f5b}.has-error .input-group-addon{border-color:rgba(0,0,0,0.6)}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .form-control-feedback{color:#62c462}.has-success .form-control,.has-success .form-control:focus{border-color:#62c462}.has-success .input-group-addon{border-color:rgba(0,0,0,0.6)}legend{color:#fff}.input-group-addon{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none;text-shadow:1px 1px 1px rgba(0,0,0,0.3);color:#ffffff}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:rgba(0,0,0,0.6)}.nav-pills>li>a{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.nav-pills>li>a:hover{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills>li.active>a,.nav-pills>li.active>a:hover{background-color:none;background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills>li.disabled>a,.nav-pills>li.disabled>a:hover{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.pagination>li>a,.pagination>li>span{text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.pagination>li>a:hover,.pagination>li>span:hover{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none}.pagination>li.active>a,.pagination>li.active>span{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none}.pagination>li.disabled>a,.pagination>li.disabled>a:hover,.pagination>li.disabled>span,.pagination>li.disabled>span:hover{background-color:transparent;background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.pager>li>a{background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none;text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.pager>li>a:hover{background-image:-webkit-linear-gradient(#020202, #101112 40%, #141618);background-image:-o-linear-gradient(#020202, #101112 40%, #141618);background-image:-webkit-gradient(linear, left top, left bottom, from(#020202), color-stop(40%, #101112), to(#141618));background-image:linear-gradient(#020202, #101112 40%, #141618);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);-webkit-filter:none;filter:none}.pager>li.disabled>a,.pager>li.disabled>a:hover{background-color:transparent;background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.breadcrumb{border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-image:-webkit-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-o-linear-gradient(#484e55, #3a3f44 60%, #313539);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3a3f44), to(#313539));background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);-webkit-filter:none;filter:none}.alert .alert-link,.alert a{color:#fff;text-decoration:underline}.alert .close{color:#000000;text-decoration:none}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#0c0d0e}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:rgba(0,0,0,0.6)}a.list-group-item-success.active{background-color:#62c462}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#4fbd4f}a.list-group-item-warning.active{background-color:#f89406}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#df8505}a.list-group-item-danger.active{background-color:#ee5f5b}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#ec4844}.jumbotron{border:1px solid rgba(0,0,0,0.6)}.panel-primary .panel-heading,.panel-success .panel-heading,.panel-danger .panel-heading,.panel-warning .panel-heading,.panel-info .panel-heading{border-color:#000} \ No newline at end of file diff --git a/modules/ui/static/bootstrap.min.css b/modules/ui/static/bootstrap.min.css new file mode 100644 index 0000000..4cf729e --- /dev/null +++ b/modules/ui/static/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.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:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,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(45deg,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(45deg,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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,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(45deg,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(45deg,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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,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(45deg,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(45deg,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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,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(45deg,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(45deg,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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,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(45deg,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(45deg,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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/modules/ui/static/bundle.js b/modules/ui/static/bundle.js new file mode 100644 index 0000000..8e4f222 --- /dev/null +++ b/modules/ui/static/bundle.js @@ -0,0 +1,91 @@ +!function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return e[o].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var r=n(1),i=o(r),a=n(20),s=o(a),l=n(349),u=o(l);n(794),s.default.render(i.default.createElement(u.default,null),document.getElementById("root"))},function(e,t,n){"use strict";e.exports=n(34)},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function r(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(e){if(d===clearTimeout)return clearTimeout(e);if((d===o||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function a(){m&&p&&(m=!1,p.length?h=p.concat(h):v=-1,h.length&&s())}function s(){if(!m){var e=r(a);m=!0;for(var t=h.length;t;){for(p=h,h=[];++v1)for(var n=1;n=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}},function(e,t,n){var o,r;/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames + */ +!function(){"use strict";function n(){for(var e=[],t=0;t1?t-1:0),o=1;o1?t-1:0),o=1;o2?o-2:0),i=2;i2?o-2:0);for(var r=2;r0&&void 0!==arguments[0]?arguments[0]:u(),t=arguments[1];switch(t.type){case"UPDATE_CONFIG":return i({},e,{list:i({},e.list,r({},t.data.name,t.data))});case"LOAD_STATE":return i({},e,{list:t.payload.config});default:return e}});t.default=c},function(e,t){"use strict";function n(){for(var e=arguments.length,t=Array(e),n=0;n=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}Object.defineProperty(t,"__esModule",{value:!0}),t.CheckboxField=t.SelectField=t.SliderField=t.NumberField=t.TextField=void 0;var u=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e){var t=this.props.form;e={};for(var n in t)switch(t[n].type){case"checkbox":e[t[n].name]=!1;break;default:e[t[n].name]=""}}else this.props.configfield&&!e.hasOwnProperty("config")&&(e.config={});this.setState({showModal:!0,data:e})}},{key:"hide",value:function(){this.setState({showModal:!1})}},{key:"_clear_config",value:function(e){var t={};for(var n in e)t[e[n].name]="";return t}},{key:"_handle",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(n)this.setState({data:(0,m.default)(this.state.data,{config:r({},e.name,{$set:t.target.value})})});else if(e.clear_config){var o,i=""==t.target.value?{}:this._clear_config(this.props.types[t.target.value].properties);this.setState({data:(0,m.default)(this.state.data,(o={},r(o,e.name,{$set:t.target.value}),r(o,"config",{$set:i}),o))})}else this.setState({data:(0,m.default)(this.state.data,r({},e.name,{$set:t.target.value}))})}},{key:"_handleSlider",value:function(e,t){arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.setState({data:(0,m.default)(this.state.data,r({},e.name,{$set:t}))})}},{key:"_handleCheckBox",value:function(e,t){this.setState({data:(0,m.default)(this.state.data,r({},e.name,{$set:!this.state.data[e.name]}))})}},{key:"render_field",value:function(e,t){var n=this,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e.condition||e.condition(this.state.data))switch(e.type){case"text":return f.default.createElement(g,{key:t,onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],label:e.label});case"actor":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],key:t,label:e.label,options:this.props.actors});case"sensor":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],key:t,label:e.label,options:this.props.sensors});case"kettle":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],key:t,label:e.label,options:this.props.kettle});case"number":return f.default.createElement(b,{key:t,onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],label:e.label});case"select":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data[e.name],key:t,label:e.label,options:e.options});case"checkbox":return f.default.createElement(x,{checked:this.state.data[e.name]||!1,onChange:function(t){n._handleCheckBox(e,t)},value:this.state.data[e.name],key:t,label:e.label});case"slider":return f.default.createElement(E,{key:t,marks:e.marks,min:e.min,max:e.max,onChange:function(t){n._handleSlider(e,t)},value:this.state.data[e.name]});default:return}}},{key:"render_field_config",value:function(e,t){var n=this,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e.configurable)switch(e.type){case"text":return f.default.createElement(g,{key:t,onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],label:e.label});case"actor":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],key:t,label:e.label,options:this.props.actors});case"sensor":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],key:t,label:e.label,options:this.props.sensors});case"kettle":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],key:t,label:e.label,options:this.props.kettle});case"number":return f.default.createElement(b,{key:t,onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],label:e.label});case"select":return f.default.createElement(_,{onChange:function(t){n._handle(e,t,o)},value:this.state.data.config[e.name],key:t,label:e.label,options:e.options});default:return}}},{key:"render_config",value:function(){var e=this;if(void 0!==this.state.data[this.props.configfield]&&""!==this.state.data[this.props.configfield]){var t=this.state.data[this.props.configfield];if(this.props.types.hasOwnProperty(t)){var n=this.props.types[t].properties||[];return n.map(function(t,n){return e.render_field_config(t,n,!0)})}return f.default.createElement("div",null,'Configuration Error. Type "',t,'" configured but not found')}}},{key:"_add",value:function(){this.props.btn_add(this.state.data)===!0&&this.hide()}},{key:"_save",value:function(){this.props.btn_save(this.state.data)===!0&&this.hide()}},{key:"_delete",value:function(){this.props.btn_delete(this.state.data)===!0&&this.hide()}},{key:"render_body",value:function(){var e=this,t=this.props.form;return this.props.configfield?f.default.createElement(p.Row,{className:"show-grid"},f.default.createElement(p.Col,{xs:12,sm:6,md:6},t.map(function(t,n){return e.render_field(t,n)})),f.default.createElement(p.Col,{xs:12,sm:6,md:6},this.render_config())):t.map(function(t,n){return e.render_field(t,n)})}},{key:"render",value:function(){var e=this.props,t=e.add,n=e.save,o=e.remove,r=e.title,i=e.bsSize,a=e.btn_save_label,s=e.btn_add_label,l=e.btn_delete_label;return f.default.createElement(p.Modal,{bsSize:i,animation:!1,show:this.state.showModal,onHide:this.hide.bind(this)},f.default.createElement(p.Modal.Header,null,f.default.createElement(p.Modal.Title,null,r||"Modal")),f.default.createElement(p.Modal.Body,null,this.render_body()),f.default.createElement(p.Modal.Footer,null,f.default.createElement(p.Button,{onClick:this.hide.bind(this)},"Close"),o?f.default.createElement(p.Button,{className:"btn-danger",onClick:this._delete.bind(this)},l):void 0,t?f.default.createElement(p.Button,{className:"btn-success",onClick:this._add.bind(this)},s):void 0,n?f.default.createElement(p.Button,{className:"btn-success",onClick:this._save.bind(this)},a):void 0))}}]),t}(d.Component);w.defaultProps={sensors:{},kettle:{},actors:{},bsSize:"small",btn_save_label:"Update",btn_add_label:"Add",btn_delete_label:"Delete"},t.default=w},function(e,t,n){(function(t){"use strict";var o=null;if("production"!==t.env.NODE_ENV){var r=n(274);o=r}e.exports={debugTool:o}}).call(t,n(2))},function(e,t,n){(function(t){"use strict";function o(){k.ReactReconcileTransaction&&x?void 0:"production"!==t.env.NODE_ENV?y(!1,"ReactUpdates: must inject a reconcile transaction class and batching strategy"):c("123")}function r(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=f.getPooled(),this.reconcileTransaction=k.ReactReconcileTransaction.getPooled(!0)}function i(e,t,n,r,i,a){return o(),x.batchedUpdates(e,t,n,r,i,a)}function a(e,t){return e._mountOrder-t._mountOrder}function s(e){var n=e.dirtyComponentsLength;n!==g.length?"production"!==t.env.NODE_ENV?y(!1,"Expected flush transaction's stored dirty-components length (%s) to match dirty-components array length (%s).",n,g.length):c("124",n,g.length):void 0,g.sort(a),b++;for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:u(),t=arguments[1];switch(t.type){case"LOAD_STATE":return i({},e,{actors:t.payload.actors,config_type:t.payload.actor_types});case"UPDATE_ACTOR":case"ADD_ACTOR":return i({},e,{actors:i({},e.actors,r({},t.payload.id,t.payload))});case"DELETE_ACTOR":return delete e.actors[t.id],i({},e,{actors:i({},e.actors)});case"SWITCH_ACTOR":return i({},e,{actors:i({},e.actors,r({},t.payload.id,t.payload))});default:return e}});t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n1){for(var E=Array(b),_=0;_1){for(var b=Array(g),E=0;E0&&void 0!==arguments[0]?arguments[0]:d(),t=arguments[1];switch(t.type){case"LOAD_STATE":return a({},e,{list:t.payload.fermenter,config_type:t.payload.fermentation_controller_types});case"DELETE_FERMENTER":return delete e.list[t.id],a({},e,{list:a({},e.list)});case"UPDATE_FERMENTER_TARGET_TEMP":return a({},e,{list:a({},e.list,i({},t.payload.id,(0,c.default)(e.list[t.payload.id],{target_temp:{$set:t.payload.target_temp}})))});case"UPDATE_FERMENTER_BREWNAME":return a({},e,{list:a({},e.list,i({},t.payload.id,(0,c.default)(e.list[t.payload.id],{brewname:{$set:t.payload.brewname}})))});case"ADD_FERMENTER_STEP":return a({},e,{list:a({},e.list,i({},t.payload.fermenter_id,a({},e.list[t.payload.fermenter_id],{steps:[].concat(r(e.list[t.payload.fermenter_id].steps),[t.payload])})))});case"DELETE_FERMENTER_STEP":return a({},e,{list:a({},e.list,i({},t.payload.fermenter_id,a({},e.list[t.payload.fermenter_id],{steps:e.list[t.payload.fermenter_id].steps.filter(function(e,n){return e.id!==t.payload.id})})))});case"UPDATE_FERMENTER_STEP":return a({},e,{list:a({},e.list,i({},t.payload.fermenter_id,a({},e.list[t.payload.fermenter_id],{steps:e.list[t.payload.fermenter_id].steps.map(function(e,n){return e.id!==t.payload.id?e:a({},e,t.payload)})})))});case"UPDATE_FERMENTER_STEPS":return a({},e,{list:a({},e.list,i({},t.payload.fermenter_id,a({},e.list[t.payload.fermenter_id],{steps:e.list[t.payload.fermenter_id].steps.map(function(e,n){return e.id!==t.payload.id?e:a({},e,t.payload)})})))});case"ADD_FERMENTER":case"UPDATE_FERMENTER":return a({},e,{list:a({},e.list,i({},t.payload.id,t.payload))});default:return e}});t.default=f},function(e,t,n){e.exports={default:n(409),__esModule:!0}},function(e,t,n){var o=n(77);e.exports=function(e){if(!o(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var o=n(45),r=n(80);e.exports=n(50)?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(214),r=n(125);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t){"use strict";function n(e){return e&&e.ownerDocument||document}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(t)do if(t===e)return!0;while(t=t.parentNode);return!1}Object.defineProperty(t,"__esModule",{value:!0});var i=n(46),a=o(i);t.default=function(){return a.default?function(e,t){return e.contains?e.contains(t):e.compareDocumentPosition?e===t||!!(16&e.compareDocumentPosition(t)):r(e,t)}:r}(),e.exports=t.default},function(e,t,n){(function(e){function o(e,n){var o="b"+t.packets[e.type]+e.data.data;return n(o)}function r(e,n,o){if(!n)return t.encodeBase64Packet(e,o);var r=e.data,i=new Uint8Array(r),a=new Uint8Array(1+r.byteLength);a[0]=g[e.type];for(var s=0;s1?{type:b[r],data:e.substring(1)}:{type:b[r]}:E}var i=new Uint8Array(e),r=i[0],a=f(e,1);return _&&"blob"===n&&(a=new _([a])),{type:b[r],data:a}},t.decodeBase64Packet=function(e,t){var n=b[e.charAt(0)];if(!u)return{type:n,data:{base64:!0,data:e.substr(1)}};var o=u.decode(e.substr(1));return"blob"===t&&_&&(o=new _([o])),{type:n,data:o}},t.encodePayload=function(e,n,o){function r(e){return e.length+":"+e}function i(e,o){t.encodePacket(e,!!a&&n,!0,function(e){o(null,r(e))})}"function"==typeof n&&(o=n,n=null);var a=d(e);return n&&a?_&&!y?t.encodePayloadAsBlob(e,o):t.encodePayloadAsArrayBuffer(e,o):e.length?void l(e,i,function(e,t){return o(t.join(""))}):o("0:")},t.decodePayload=function(e,n,o){if("string"!=typeof e)return t.decodePayloadAsBinary(e,n,o);"function"==typeof n&&(o=n,n=null);var r;if(""==e)return o(E,0,1);for(var i,a,s="",l=0,u=e.length;l0;){for(var s=new Uint8Array(r),l=0===s[0],u="",c=1;255!=s[c];c++){if(u.length>310){a=!0;break}u+=s[c]}if(a)return o(E,0,1);r=f(r,2+u.length),u=parseInt(u);var d=f(r,0,u);if(l)try{d=String.fromCharCode.apply(null,new Uint8Array(d))}catch(e){var p=new Uint8Array(d);d="";for(var c=0;c0&&void 0!==arguments[0]?arguments[0]:"Question",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ARE YOU SURE?",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){return!0};this.setState({showModal:!0,title:e,message:t,confirm:n,cancel:o})}},{key:"hide",value:function(){this.setState({showModal:!1})}},{key:"_confirm",value:function(){this.props.confirm()===!0&&this.hide()}},{key:"_cancel",value:function(){this.props.cancel()===!0&&this.hide()}},{key:"render",value:function(){var e=this.props,t=e.cancel,n=e.confirm,o=e.message,r=e.title,i=e.bsSize,a=e.btn_confirm_label,s=e.btn_cancel_label;return u.default.createElement(c.Modal,{bsSize:i,animation:!1,show:this.state.showModal,onHide:this.hide.bind(this)},u.default.createElement(c.Modal.Header,null,u.default.createElement(c.Modal.Title,null,r||"Modal")),u.default.createElement(c.Modal.Body,null,o),u.default.createElement(c.Modal.Footer,null,n?u.default.createElement(c.Button,{className:"btn-success",onClick:this._confirm.bind(this)},a):void 0,t?u.default.createElement(c.Button,{className:"btn-danger",onClick:this._cancel.bind(this)},s):void 0))}}]),t}(l.Component);d.defaultProps={bsSize:"small",btn_confirm_label:"Confirm",btn_cancel_label:"Cancel"},t.default=d},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:u(),t=arguments[1];switch(t.type){case"LOAD_STATE":return i({},e,{sensors:t.payload.sensors,config_type:t.payload.sensor_types});case"SENSOR_UPDATE":return console.log("SENSOR_UPDATE",t.payload),i({},e,{sensors:i({},e.sensors,r({},t.payload.id,t.payload))});case"DELETE_SENSOR":return delete e.sensors[t.id],i({},e,{sensors:i({},e.sensors)});case"ADD_SENSOR":case"UPDATE_SENSOR":return i({},e,{sensors:i({},e.sensors,r({},t.payload.id,t.payload))});default:return e}});t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.checkout_tag=t.git_pull=t.get_git_status=t.reboot=t.shutdown=t.set_time=t.load_state=void 0;var r=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:s(),t=arguments[1];switch(t.type){case"UPDATE_GIT_STATUS":return r({},e,{head:t.payload.headcommit,tags:t.payload.tags,branchname:t.payload.branchname,loading:!1});case"GIT_LOADING_STARTED":return r({},e,{loading:!0});case"GIT_LOADING_FINISED":return r({},e,{loading:!1});case"LOAD_STATE":return r({},e,{ready:!0});default:return e}});t.default=u},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(203),i=o(r);t.default=function(){function e(e,t){for(var n=0;n-1?void 0:"production"!==t.env.NODE_ENV?s(!1,"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.",e):a("96",e),!c.plugins[o]){n.extractEvents?void 0:"production"!==t.env.NODE_ENV?s(!1,"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.",e):a("97",e),c.plugins[o]=n;var i=n.eventTypes;for(var d in i)r(i[d],n,d)?void 0:"production"!==t.env.NODE_ENV?s(!1,"EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.",d,e):a("98",d,e)}}}function r(e,n,o){c.eventNameDispatchConfigs.hasOwnProperty(o)?"production"!==t.env.NODE_ENV?s(!1,"EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.",o):a("99",o):void 0,c.eventNameDispatchConfigs[o]=e;var r=e.phasedRegistrationNames;if(r){for(var l in r)if(r.hasOwnProperty(l)){var u=r[l];i(u,n,o)}return!0}return!!e.registrationName&&(i(e.registrationName,n,o),!0)}function i(e,n,o){if(c.registrationNameModules[e]?"production"!==t.env.NODE_ENV?s(!1,"EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.",e):a("100",e):void 0,c.registrationNameModules[e]=n,c.registrationNameDependencies[e]=n.eventTypes[o].dependencies,"production"!==t.env.NODE_ENV){var r=e.toLowerCase();c.possibleRegistrationNames[r]=e,"onDoubleClick"===e&&(c.possibleRegistrationNames.ondblclick=e)}}var a=n(14),s=n(11),l=null,u={},c={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:"production"!==t.env.NODE_ENV?{}:null,injectEventPluginOrder:function(e){l?"production"!==t.env.NODE_ENV?s(!1,"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React."):a("101"):void 0,l=Array.prototype.slice.call(e),o()},injectEventPluginsByName:function(e){var n=!1;for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];u.hasOwnProperty(r)&&u[r]===i||(u[r]?"production"!==t.env.NODE_ENV?s(!1,"EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.",r):a("102",r):void 0,u[r]=i,n=!0)}n&&o()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return c.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var o in n)if(n.hasOwnProperty(o)){var r=c.registrationNameModules[n[o]];if(r)return r}}return null},_resetEventPlugins:function(){l=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];c.plugins.length=0;var n=c.eventNameDispatchConfigs;for(var o in n)n.hasOwnProperty(o)&&delete n[o];var r=c.registrationNameModules;for(var i in r)r.hasOwnProperty(i)&&delete r[i];if("production"!==t.env.NODE_ENV){var a=c.possibleRegistrationNames;for(var s in a)a.hasOwnProperty(s)&&delete a[s]}}};e.exports=c}).call(t,n(2))},function(e,t,n){"use strict";function o(e){return Object.prototype.hasOwnProperty.call(e,m)||(e[m]=p++,d[e[m]]={}),d[e[m]]}var r,i=n(16),a=n(86),s=n(680),l=n(284),u=n(290),c=n(175),d={},f=!1,p=0,h={topAbort:"abort",topAnimationEnd:u("animationend")||"animationend",topAnimationIteration:u("animationiteration")||"animationiteration",topAnimationStart:u("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:u("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},m="_reactListenersID"+String(Math.random()).slice(2),v=i({},s,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(v.handleTopLevel),v.ReactEventListener=e}},setEnabled:function(e){v.ReactEventListener&&v.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,r=o(n),i=a.registrationNameDependencies[e],s=0;s0&&void 0!==arguments[0]?arguments[0]:c(),t=arguments[1];switch(t.type){case"LOAD_STATE":return i({},e,{list:t.payload.kettle,config_type:t.payload.controller_types});case"DELETE_KETTLE":return delete e.list[t.id],i({},e,{list:i({},e.list)});case"UPDATE_KETTLE_TARGET_TEMP":return i({},e,{list:i({},e.list,r({},t.payload.id,(0,u.default)(e.list[t.payload.id],{target_temp:{$set:t.payload.target_temp}})))});case"ADD_KETTLE":case"UPDATE_KETTLE":return i({},e,{list:i({},e.list,r({},t.payload.id,t.payload))});default:return e}});t.default=d},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:u(),t=arguments[1];switch(t.type){case"LOAD_STATE":return i({},e,{list:t.payload.steps,type:t.payload.step_types});case"UPDATE_ALL_STEPS":return i({},e,{list:t.payload});case"ADD_STEP":return i({},e,{list:[].concat(r(e.list),[t.payload])});case"REMOVE_STEP":return i({},e,{list:e.list.filter(function(e,n){return e.id!==t.payload})});case"UPDATE_STEP":return i({},e,{list:e.list.map(function(e,n){return e.id!==t.payload.id?e:i({},e,t.payload)})});default:return e}});t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(392),i=o(r),a=n(391),s=o(a),l="function"==typeof s.default&&"symbol"==typeof i.default?function(e){return typeof e}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":typeof e};t.default="function"==typeof s.default&&"symbol"===l(i.default)?function(e){return"undefined"==typeof e?"undefined":l(e)}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":"undefined"==typeof e?"undefined":l(e)}},function(e,t){e.exports=function(e,t){var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){var o=n(124);e.exports=function(e){return Object(o(e))}},function(e,t){var n=0,o=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+o).toString(36))}},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(46),i=o(r),a=function(){};i.default&&(a=function(){return document.addEventListener?function(e,t,n,o){return e.addEventListener(t,n,o||!1)}:document.attachEvent?function(e,t,n){return e.attachEvent("on"+t,function(t){t=t||window.event,t.target=t.target||t.srcElement,t.currentTarget=e,n.call(e,t)})}:void 0}()),t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){return e===e.window?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n){var o="",r="",i=t;if("string"==typeof t){if(void 0===n)return e.style[(0,a.default)(t)]||(0,c.default)(e).getPropertyValue((0,l.default)(t));(i={})[t]=n}Object.keys(i).forEach(function(t){var n=i[t];n||0===n?(0,m.default)(t)?r+=t+"("+n+") ":o+=(0,l.default)(t)+": "+n+";":(0,f.default)(e,(0,l.default)(t))}),r&&(o+=p.transform+": "+r+";"),e.style.cssText+=";"+o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(227),a=o(i),s=n(482),l=o(s),u=n(477),c=o(u),d=n(478),f=o(d),p=n(226),h=n(479),m=o(h);e.exports=t.default},function(e,t,n){(function(o){function r(){return"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function i(){var e=arguments,n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return e;var o="color: "+this.color;e=[e[0],o,"color: inherit"].concat(Array.prototype.slice.call(e,1));var r=0,i=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(r++,"%c"===e&&(i=r))}),e.splice(i,0,o),e}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}}function l(){try{return t.storage.debug}catch(e){}if("undefined"!=typeof o&&"env"in o)return o.env.DEBUG}function u(){try{return window.localStorage}catch(e){}}t=e.exports=n(489),t.log=a,t.formatArgs=i,t.save=s,t.load=l,t.useColors=r,t.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(l())}).call(t,n(2))},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=t.isBrowser="object"===("undefined"==typeof window?"undefined":n(window))&&"object"===("undefined"==typeof document?"undefined":n(document))&&9===document.nodeType;t.default=o},function(e,t,n){(function(o){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(8),a=r(i),s=n(3),l=r(s),u=n(4),c=r(u),d=n(6),f=r(d),p=n(5),h=r(p),m=n(9),v=r(m),y=n(222),g=r(y),b=n(64),E=r(b),_=n(150),x=r(_),w=n(1),C=r(w),O=n(7),N=r(O),T=n(20),k=r(T),P=n(109),S=r(P),M=n(17),A=r(M),D=n(110),R=r(D),I=n(114),j=r(I),L=n(18),B=r(L),V=n(249),F=r(V),U=n(594),H=r(U),W=n(251),z=r(W),Y=n(10),G=n(23),q=r(G),X=n(641),K=n(28),$=r(K),J=z.default.defaultProps.bsRole,Z=H.default.defaultProps.bsRole,Q={dropup:N.default.bool,id:(0,R.default)(N.default.oneOfType([N.default.string,N.default.number])),componentClass:A.default,children:(0,S.default)((0,X.requiredRoles)(J,Z),(0,X.exclusiveRoles)(Z)),disabled:N.default.bool,pullRight:N.default.bool,open:N.default.bool,onClose:N.default.func,onToggle:N.default.func,onSelect:N.default.func,role:N.default.string,rootCloseEvent:N.default.oneOf(["click","mousedown"]),onMouseEnter:N.default.func,onMouseLeave:N.default.func},ee={componentClass:F.default},te=function(e){function t(n,o){(0,c.default)(this,t);var r=(0,f.default)(this,e.call(this,n,o));return r.handleClick=r.handleClick.bind(r),r.handleKeyDown=r.handleKeyDown.bind(r),r.handleClose=r.handleClose.bind(r),r._focusInDropdown=!1,r.lastOpenEventType=null,r}return(0,h.default)(t,e),t.prototype.componentDidMount=function(){this.focusNextOnOpen()},t.prototype.componentWillUpdate=function(e){!e.open&&this.props.open&&(this._focusInDropdown=(0,E.default)(k.default.findDOMNode(this.menu),(0,g.default)(document)))},t.prototype.componentDidUpdate=function(e){var t=this.props.open,n=e.open;t&&!n&&this.focusNextOnOpen(),!t&&n&&this._focusInDropdown&&(this._focusInDropdown=!1,this.focus())},t.prototype.handleClick=function(e){this.props.disabled||this.toggleOpen(e,{source:"click"})},t.prototype.handleKeyDown=function(e){if(!this.props.disabled)switch(e.keyCode){case x.default.codes.down:this.props.open?this.menu.focusNext&&this.menu.focusNext():this.toggleOpen(e,{source:"keydown"}),e.preventDefault();break;case x.default.codes.esc:case x.default.codes.tab:this.handleClose(e,{source:"keydown"})}},t.prototype.toggleOpen=function(e,t){var n=!this.props.open;n&&(this.lastOpenEventType=t.source),this.props.onToggle&&this.props.onToggle(n,e,t)},t.prototype.handleClose=function(e,t){this.props.open&&this.toggleOpen(e,t)},t.prototype.focusNextOnOpen=function(){var e=this.menu;e.focusNext&&("keydown"!==this.lastOpenEventType&&"menuitem"!==this.props.role||e.focusNext())},t.prototype.focus=function(){var e=k.default.findDOMNode(this.toggle);e&&e.focus&&e.focus()},t.prototype.renderToggle=function(e,t){var n=this,r=function(e){n.toggle=e};return"string"==typeof e.ref?"production"!==o.env.NODE_ENV?(0,B.default)(!1,"String refs are not supported on `` components. To apply a ref to the component use the callback signature:\n\n https://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute"):void 0:r=(0,q.default)(e.ref,r),(0,w.cloneElement)(e,(0,l.default)({},t,{ref:r,bsClass:(0,Y.prefix)(t,"toggle"),onClick:(0,q.default)(e.props.onClick,this.handleClick),onKeyDown:(0,q.default)(e.props.onKeyDown,this.handleKeyDown)}))},t.prototype.renderMenu=function(e,t){var n=this,r=t.id,i=t.onClose,s=t.onSelect,u=t.rootCloseEvent,c=(0,a.default)(t,["id","onClose","onSelect","rootCloseEvent"]),d=function(e){n.menu=e};return"string"==typeof e.ref?"production"!==o.env.NODE_ENV?(0,B.default)(!1,"String refs are not supported on `` components. To apply a ref to the component use the callback signature:\n\n https://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute"):void 0:d=(0,q.default)(e.ref,d),(0,w.cloneElement)(e,(0,l.default)({},c,{ref:d,labelledBy:r,bsClass:(0,Y.prefix)(c,"menu"),onClose:(0,q.default)(e.props.onClose,i,this.handleClose),onSelect:(0,q.default)(e.props.onSelect,s,function(e,t){return n.handleClose(t,{source:"select"})}),rootCloseEvent:u}))},t.prototype.render=function(){var e,t=this,n=this.props,o=n.componentClass,r=n.id,i=n.dropup,s=n.disabled,u=n.pullRight,c=n.open,d=n.onClose,f=n.onSelect,p=n.role,h=n.bsClass,m=n.className,y=n.rootCloseEvent,g=n.children,b=(0,a.default)(n,["componentClass","id","dropup","disabled","pullRight","open","onClose","onSelect","role","bsClass","className","rootCloseEvent","children"]);delete b.onToggle;var E=(e={},e[h]=!0,e.open=c,e.disabled=s,e);return i&&(E[h]=!1,E.dropup=!0),C.default.createElement(o,(0,l.default)({},b,{className:(0,v.default)(m,E)}),$.default.map(g,function(e){switch(e.props.bsRole){case J:return t.renderToggle(e,{id:r,disabled:s,open:c,role:p,bsClass:h});case Z:return t.renderMenu(e,{id:r,open:c,pullRight:u,bsClass:h,onClose:d,onSelect:f,rootCloseEvent:y});default:return e}}))},t}(C.default.Component);te.propTypes=Q,te.defaultProps=ee,(0,Y.bsClass)("dropdown",te);var ne=(0,j.default)(te,{open:"onToggle"});ne.Toggle=z.default,ne.Menu=H.default,t.default=ne,e.exports=t.default}).call(t,n(2))},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(4),s=o(a),l=n(6),u=o(l),c=n(5),d=o(c),f=n(9),p=o(f),h=n(1),m=o(h),v=n(7),y=o(v),g=n(299),b=o(g),E={in:y.default.bool,mountOnEnter:y.default.bool,unmountOnExit:y.default.bool,transitionAppear:y.default.bool,timeout:y.default.number,onEnter:y.default.func,onEntering:y.default.func,onEntered:y.default.func,onExit:y.default.func,onExiting:y.default.func,onExited:y.default.func},_={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,transitionAppear:!1},x=function(e){function t(){return(0,s.default)(this,t),(0,u.default)(this,e.apply(this,arguments))}return(0,d.default)(t,e),t.prototype.render=function(){return m.default.createElement(b.default,(0,i.default)({},this.props,{className:(0,p.default)(this.props.className,"fade"),enteredClassName:"in",enteringClassName:"in"}))},t}(m.default.Component);x.propTypes=E,x.defaultProps=_,t.default=x,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var n=t.propTypes,o={},r={};return(0,a.default)(e).forEach(function(e){var t=e[0],i=e[1];n[t]?o[t]=i:r[t]=i}),[o,r]}t.__esModule=!0;var i=n(204),a=o(i);t.default=r,e.exports=t.default},function(e,t,n){"use strict";function o(e,t,n,o){return r.call(this,e,t,n,o)}var r=n(88),i=n(284),a=n(173),s={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:a,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+i.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+i.currentScrollTop}};r.augmentClass(o,s),e.exports=o},function(e,t,n){(function(t){"use strict";var o=n(14),r=n(11),i={},a={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,n,i,a,s,l,u,c){this.isInTransaction()?"production"!==t.env.NODE_ENV?r(!1,"Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction."):o("27"):void 0;var d,f;try{this._isInTransaction=!0,d=!0,this.initializeAll(0),f=e.call(n,i,a,s,l,u,c),d=!1}finally{try{if(d)try{this.closeAll(0)}catch(e){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return f},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n]/;e.exports=o},function(e,t,n){"use strict";var o,r=n(21),i=n(163),a=/^[ \r\n\t\f]/,s=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,l=n(171),u=l(function(e,t){if(e.namespaceURI!==i.svg||"innerHTML"in e)e.innerHTML=t;else{o=o||document.createElement("div"),o.innerHTML=""+t+"";for(var n=o.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(r.canUseDOM){var c=document.createElement("div");c.innerHTML=" ",""===c.innerHTML&&(u=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||"<"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),c=null}e.exports=u},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(){function e(){for(var e=arguments.length,t=Array(e),o=0;o>",s=i||n;if(null==t[n])return new Error("The "+r+" `"+s+"` is required to make "+("`"+a+"` accessible for users of assistive ")+"technologies such as screen readers.");for(var l=arguments.length,u=Array(l>5?l-5:0),c=5;c>",l=a||o;if(null==n[o])return t?new Error("Required "+i+" `"+l+"` was not specified "+("in `"+s+"`.")):null;for(var u=arguments.length,c=Array(u>6?u-6:0),d=6;d=31}function i(){var e=arguments,n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return e;var o="color: "+this.color;e=[e[0],o,"color: inherit"].concat(Array.prototype.slice.call(e,1));var r=0,i=0;return e[0].replace(/%[a-z%]/g,function(e){"%%"!==e&&(r++,"%c"===e&&(i=r))}),e.splice(i,0,o),e}function a(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}}function l(){try{return t.storage.debug}catch(e){}if("undefined"!=typeof o&&"env"in o)return o.env.DEBUG}function u(){try{return window.localStorage}catch(e){}}t=e.exports=n(786),t.log=a,t.formatArgs=i,t.save=s,t.load=l,t.useColors=r,t.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(l())}).call(t,n(2))},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n,o,r){n&&(e._notifying=!0,n.call.apply(n,[e,o].concat(r)),e._notifying=!1),e._values[t]=o,e.unmounted||e.forceUpdate()}t.__esModule=!0;var i=n(799),a=o(i),s={shouldComponentUpdate:function(){return!this._notifying}};t.default=(0,a.default)(s,r),e.exports=t.default},function(e,t,n){(function(t){"use strict";function o(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function r(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(188):"undefined"!=typeof t&&(e=n(188)),e}var i=n(29),a=n(346),s={"Content-Type":"application/x-www-form-urlencoded"},l={adapter:r(),transformRequest:[function(e,t){ +return a(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(o(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(o(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};l.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){l.headers[e]={}}),i.forEach(["post","put","patch"],function(e){l.headers[e]=i.merge(s)}),e.exports=l}).call(t,n(2))},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(13),i=n(30),a=o(i),s=n(48),l=function(e,t){return{title:"Actor Modal",bsSize:"large",form:[{label:"Name",name:"name",type:"text"},{label:"Hide on Dashboard",name:"hide",type:"checkbox"},{label:"Type",clear_config:!0,name:"type",type:"select",options:Object.keys(e.actor.config_type)}],types:e.actor.config_type,configfield:"type"}},u=function(e,t){return{btn_save:function(t){return e((0,s.save)(t)),!0},btn_add:function(t){return e((0,s.add)(t)),!0},btn_delete:function(t){return e((0,s.remove)(t)),!0}}},c=(0,r.connect)(l,u,null,{withRef:!0})(a.default);t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),i=o(r),a=n(13),s=n(30),l=o(s),u=n(48),c=(n(22),{0:i.default.createElement("strong",null,"0%"),25:"25%",50:"50%",75:"75%",100:{style:{color:"red"},label:i.default.createElement("strong",null,"100%")}}),d=function(e,t){return{title:t.actor_name?"Power for "+t.actor_name:"Power for Actor",form:[{label:"Power",name:"power",type:"slider",min:0,max:100,marks:c}]}},f=function(e,t){return{btn_save:function(n){return e((0,u.set_power)(t.actor_id,n.power)),!0},btn_add:function(e){return!0},btn_delete:function(e){return!0}}};t.default=(0,a.connect)(d,f,null,{withRef:!0})(l.default)},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:s(),t=arguments[1];switch(t.type){case"UPDATE_FILES":return r({},e,{files:t.payload});case"SENSOR_DATA_LOADED":return r({},e,{chart_config:r({},e.chart_config,{series:t.payload})});case"UPDATE_ACTIONS":return r({},e,{chart_config:r({},e.chart_config,{xAxis:r({},e.chart_config.xAxis,{plotLines:t.payload})})});default:return e}});t.default=u},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(13),i=n(30),a=o(i),s=n(72),l=function(e,t){return{title:"Sensor Modal",bsSize:"large",form:[{label:"Name",name:"name",type:"text"},{label:"Hide on Dashboard",name:"hide",type:"checkbox"},{label:"Type",clear_config:!0,name:"type",type:"select",options:Object.keys(e.sensor.config_type)}],types:e.sensor.config_type,configfield:"type"}},u=function(e,t,n){return{btn_save:function(t){return e((0,s.save)(t)),!0},btn_add:function(t){return e((0,s.add)(t)),!0},btn_delete:function(t){return e((0,s.remove)(t)),!0}}},c=(0,r.connect)(l,u,null,{withRef:!0})(a.default);t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(13),i=n(30),a=o(i),s=n(92),l=function(e,t){return{title:"Step Modal",bsSize:"large",form:[{label:"Name",name:"name",type:"text"},{label:"Type",clear_config:!0,name:"type",type:"select",options:Object.keys(e.steps.type)}],types:e.steps.type,configfield:"type",actors:e.actor.actors,sensors:e.sensor.sensors,kettle:e.kettle.list}},u=function(e,t,n){return{btn_save:function(t){return e((0,s.save)(t)),!0},btn_add:function(t){return e((0,s.add)(t)),!0},btn_delete:function(t){return e((0,s.remove)(t)),!0}}},c=(0,r.connect)(l,u,null,{withRef:!0})(a.default);t.default=c},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var o=n(412);e.exports=function(e,t,n){if(o(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){e.exports=!0},function(e,t,n){var o=n(59),r=n(428),i=n(125),a=n(131)("IE_PROTO"),s=function(){},l="prototype",u=function(){var e,t=n(208)("iframe"),o=i.length,r="<",a=">";for(t.style.display="none",n(418).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+a+"document.F=Object"+r+"/script"+a),e.close(),u=e.F;o--;)delete u[l][i[o]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=o(e),n=new s,s[l]=null,n[a]=e):n=u(),void 0===t?n:r(n,t)}},function(e,t,n){var o=n(79),r=n(80),i=n(41),a=n(134),s=n(51),l=n(209),u=Object.getOwnPropertyDescriptor;t.f=n(50)?u:function(e,t){if(e=i(e),t=a(t,!0),l)try{return u(e,t)}catch(e){}if(s(e,t))return r(!o.f.call(e,t),e[t])}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var o=n(45).f,r=n(51),i=n(37)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,i)&&o(e,i,{configurable:!0,value:t})}},function(e,t,n){var o=n(132)("keys"),r=n(96);e.exports=function(e){return o[e]||(o[e]=r(e))}},function(e,t,n){var o=n(44),r="__core-js_shared__",i=o[r]||(o[r]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t){var n=Math.ceil,o=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?o:n)(e)}},function(e,t,n){var o=n(77);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var o=n(44),r=n(26),i=n(126),a=n(136),s=n(45).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=i?{}:o.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},function(e,t,n){t.f=n(37)},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(101),i=o(r),a="",s="";if(i.default){var l={Moz:"-moz-",ms:"-ms-",O:"-o-",Webkit:"-webkit-"},u=document.createElement("p").style,c="Transform";for(var d in l)if(d+c in u){a=d,s=l[d];break}}t.default={js:a,css:s}},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(46),i=o(r),a=function(){};i.default&&(a=function(){return document.addEventListener?function(e,t,n,o){return e.removeEventListener(t,n,o||!1)}:document.attachEvent?function(e,t,n){return e.detachEvent("on"+t,n)}:void 0}()),t.default=a,e.exports=t.default},function(e,t,n){function o(e){this.path=e.path,this.hostname=e.hostname,this.port=e.port,this.secure=e.secure,this.query=e.query,this.timestampParam=e.timestampParam,this.timestampRequests=e.timestampRequests,this.readyState="",this.agent=e.agent||!1,this.socket=e.socket,this.enablesXDR=e.enablesXDR,this.pfx=e.pfx,this.key=e.key,this.passphrase=e.passphrase,this.cert=e.cert,this.ca=e.ca,this.ciphers=e.ciphers,this.rejectUnauthorized=e.rejectUnauthorized,this.forceNode=e.forceNode,this.extraHeaders=e.extraHeaders,this.localAddress=e.localAddress}var r=n(65),i=n(76);e.exports=o,i(o.prototype),o.prototype.onError=function(e,t){var n=new Error(e);return n.type="TransportError",n.description=t,this.emit("error",n),this},o.prototype.open=function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this},o.prototype.close=function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this},o.prototype.send=function(e){if("open"!==this.readyState)throw new Error("Transport not open");this.write(e)},o.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},o.prototype.onData=function(e){var t=r.decodePacket(e,this.socket.binaryType);this.onPacket(t)},o.prototype.onPacket=function(e){this.emit("packet",e)},o.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},function(e,t,n){(function(t){var o=n(507);e.exports=function(e){var n=e.xdomain,r=e.xscheme,i=e.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!n||o))return new XMLHttpRequest}catch(e){}try{if("undefined"!=typeof XDomainRequest&&!r&&i)return new XDomainRequest}catch(e){}if(!n)try{return new(t[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}}}).call(t,function(){return this}())},function(e,t){"use strict";function n(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function o(e,t){if(n(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var a=0;a2&&void 0!==arguments[2]?arguments[2]:{},o=n.indent,i=void 0===o?0:o,a=t.fallbacks,l="";if(i++,a)if(Array.isArray(a))for(var u=0;uo}function a(e){return e.touches.length>1||"touchend"===e.type.toLowerCase()&&e.touches.length>0}function s(e,t){var n=t.marks,o=t.step,r=t.min,i=Object.keys(n).map(parseFloat);if(null!==o){var a=Math.round((e-r)/o)*o+r;i.push(a)}var s=i.map(function(t){return Math.abs(e-t)});return i[s.indexOf(Math.min.apply(Math,(0,v.default)(s)))]}function l(e){var t=e.toString(),n=0;return t.indexOf(".")>=0&&(n=t.length-t.indexOf(".")-1),n}function u(e,t){return e?t.clientY:t.pageX}function c(e,t){return e?t.touches[0].clientY:t.touches[0].pageX}function d(e,t){var n=t.getBoundingClientRect();return e?n.top+.5*n.height:n.left+.5*n.width}function f(e,t){var n=t.max,o=t.min;return e<=o?o:e>=n?n:e}function p(e,t){var n=t.step,o=s(e,t);return null===n?o:parseFloat(o.toFixed(l(n)))}function h(e){e.stopPropagation(),e.preventDefault()}Object.defineProperty(t,"__esModule",{value:!0});var m=n(205),v=o(m);t.isEventFromHandle=r,t.isValueOutOfRange=i,t.isNotTouchEvent=a,t.getClosestPoint=s,t.getPrecision=l,t.getMousePosition=u,t.getTouchPosition=c,t.getHandleCenterPosition=d,t.ensureValueInRange=f,t.ensureValuePrecision=p,t.pauseEvent=h;var y=n(20)},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n){var o=l.default.unstable_batchedUpdates?function(e){l.default.unstable_batchedUpdates(n,e)}:n;return(0,a.default)(e,t,o)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(329),a=o(i),s=n(20),l=o(s);e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e){e.offsetHeight}function i(e,t){var n=t["offset"+(0,T.default)(e)],o=S[e];return n+parseInt((0,b.default)(t,o[0]),10)+parseInt((0,b.default)(t,o[1]),10)}t.__esModule=!0;var a=n(3),s=o(a),l=n(8),u=o(l),c=n(4),d=o(c),f=n(6),p=o(f),h=n(5),m=o(h),v=n(9),y=o(v),g=n(99),b=o(g),E=n(1),_=o(E),x=n(7),w=o(x),C=n(299),O=o(C),N=n(266),T=o(N),k=n(23),P=o(k),S={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]},M={in:w.default.bool,mountOnEnter:w.default.bool,unmountOnExit:w.default.bool,transitionAppear:w.default.bool,timeout:w.default.number,onEnter:w.default.func,onEntering:w.default.func,onEntered:w.default.func,onExit:w.default.func,onExiting:w.default.func,onExited:w.default.func,dimension:w.default.oneOfType([w.default.oneOf(["height","width"]),w.default.func]),getDimensionValue:w.default.func,role:w.default.string},A={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,transitionAppear:!1,dimension:"height",getDimensionValue:i},D=function(e){function t(n,o){(0,d.default)(this,t);var r=(0,p.default)(this,e.call(this,n,o));return r.handleEnter=r.handleEnter.bind(r),r.handleEntering=r.handleEntering.bind(r),r.handleEntered=r.handleEntered.bind(r),r.handleExit=r.handleExit.bind(r),r.handleExiting=r.handleExiting.bind(r),r}return(0,m.default)(t,e),t.prototype.handleEnter=function(e){var t=this._dimension();e.style[t]="0"},t.prototype.handleEntering=function(e){var t=this._dimension();e.style[t]=this._getScrollDimensionValue(e,t)},t.prototype.handleEntered=function(e){var t=this._dimension();e.style[t]=null},t.prototype.handleExit=function(e){var t=this._dimension();e.style[t]=this.props.getDimensionValue(t,e)+"px",r(e)},t.prototype.handleExiting=function(e){var t=this._dimension();e.style[t]="0"},t.prototype._dimension=function(){return"function"==typeof this.props.dimension?this.props.dimension():this.props.dimension},t.prototype._getScrollDimensionValue=function(e,t){return e["scroll"+(0,T.default)(t)]+"px"},t.prototype.render=function(){var e=this.props,t=e.onEnter,n=e.onEntering,o=e.onEntered,r=e.onExit,i=e.onExiting,a=e.className,l=(0,u.default)(e,["onEnter","onEntering","onEntered","onExit","onExiting","className"]);delete l.dimension,delete l.getDimensionValue;var c=(0,P.default)(this.handleEnter,t),d=(0,P.default)(this.handleEntering,n),f=(0,P.default)(this.handleEntered,o),p=(0,P.default)(this.handleExit,r),h=(0,P.default)(this.handleExiting,i),m={width:"width"===this._dimension()};return _.default.createElement(O.default,(0,s.default)({},l,{"aria-expanded":l.role?l.in:null,className:(0,y.default)(a,m),exitedClassName:"collapse",exitingClassName:"collapsing",enteredClassName:"collapse in",enteringClassName:"collapsing",onEnter:c,onEntering:d,onEntered:f,onExit:p,onExiting:h}))},t}(_.default.Component);D.propTypes=M,D.defaultProps=A,t.default=D,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(10),_={glyph:b.default.string.isRequired},x=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.glyph,o=t.className,r=(0,s.default)(t,["glyph","className"]),a=(0,E.splitBsProps)(r),l=a[0],u=a[1],c=(0,i.default)({},(0,E.getClassSet)(l),(e={},e[(0,E.prefix)(l,n)]=!0,e));return y.default.createElement("span",(0,i.default)({},u,{className:(0,m.default)(o,c)}))},t}(y.default.Component);x.propTypes=_,t.default=(0,E.bsClass)("glyphicon",x),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(17),b=o(g),E=n(608),_=o(E),x=n(609),w=o(x),C=n(610),O=o(C),N=n(611),T=o(N),k=n(612),P=o(k),S=n(613),M=o(S),A=n(10),D={componentClass:b.default},R={componentClass:"div"},I=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.componentClass,n=e.className,o=(0,s.default)(e,["componentClass","className"]),r=(0,A.splitBsProps)(o),a=r[0],l=r[1],u=(0,A.getClassSet)(a);return y.default.createElement(t,(0,i.default)({},l,{className:(0,m.default)(n,u)}))},t}(y.default.Component);I.propTypes=D,I.defaultProps=R,I.Heading=w.default,I.Body=_.default,I.Left=O.default,I.Right=M.default,I.List=T.default,I.ListItem=P.default,t.default=(0,A.bsClass)("media",I),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(8),i=o(r),a=n(4),s=o(a),l=n(6),u=o(l),c=n(5),d=o(c),f=n(1),p=o(f),h=n(7),m=o(h),v=n(114),y=o(v),g="tab",b="pane",E=m.default.oneOfType([m.default.string,m.default.number]),_={id:function(e){var t=null;if(!e.generateChildId){for(var n=arguments.length,o=Array(n>1?n-1:0),r=1;r-1&&navigator.userAgent.indexOf("Edge")===-1||navigator.userAgent.indexOf("Firefox")>-1)){var m=window.location.protocol.indexOf("http")===-1&&navigator.userAgent.indexOf("Firefox")===-1;console.debug("Download the React DevTools "+(m?"and use an HTTP server (instead of a file: URL) ":"")+"for a better development experience: https://fb.me/react-devtools")}var v=function(){};"production"!==t.env.NODE_ENV?f((v.name||v.toString()).indexOf("testFn")!==-1,"It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See https://fb.me/react-minification for more details."):void 0;var y=document.documentMode&&document.documentMode<8;"production"!==t.env.NODE_ENV?f(!y,'Internet Explorer is running in compatibility mode; please add the following tag to your HTML to prevent this from happening: '):void 0;for(var g=[Array.isArray,Array.prototype.every,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.map,Date.now,Function.prototype.bind,Object.keys,String.prototype.trim],b=0;b0&&o.length<20?n+" (keys: "+o.join(", ")+")":n}function i(e,n){var o=l.get(e);if(!o){if("production"!==t.env.NODE_ENV){var r=e.constructor;"production"!==t.env.NODE_ENV?f(!n,"%s(...): Can only update a mounted or mounting component. This usually means you called %s() on an unmounted component. This is a no-op. Please check the code for the %s component.",n,n,r&&(r.displayName||r.name)||"ReactClass"):void 0}return null}return"production"!==t.env.NODE_ENV&&("production"!==t.env.NODE_ENV?f(null==s.current,"%s(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.",n):void 0),o}var a=n(14),s=n(40),l=n(69),u=n(31),c=n(32),d=n(11),f=n(12),p={isMounted:function(e){if("production"!==t.env.NODE_ENV){var n=s.current;null!==n&&("production"!==t.env.NODE_ENV?f(n._warnedAboutRefsInRender,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",n.getName()||"A component"):void 0,n._warnedAboutRefsInRender=!0)}var o=l.get(e);return!!o&&!!o._renderedComponent},enqueueCallback:function(e,t,n){p.validateCallback(t,n);var r=i(e);return r?(r._pendingCallbacks?r._pendingCallbacks.push(t):r._pendingCallbacks=[t],void o(r)):null},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],o(e)},enqueueForceUpdate:function(e){var t=i(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,o(t))},enqueueReplaceState:function(e,t,n){var r=i(e,"replaceState");r&&(r._pendingStateQueue=[t],r._pendingReplaceState=!0,void 0!==n&&null!==n&&(p.validateCallback(n,"replaceState"),r._pendingCallbacks?r._pendingCallbacks.push(n):r._pendingCallbacks=[n]),o(r))},enqueueSetState:function(e,n){"production"!==t.env.NODE_ENV&&(u.debugTool.onSetState(),"production"!==t.env.NODE_ENV?f(null!=n,"setState(...): You passed an undefined or null state object; instead, use forceUpdate()."):void 0);var r=i(e,"setState");if(r){var a=r._pendingStateQueue||(r._pendingStateQueue=[]);a.push(n),o(r)}},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,o(e)},validateCallback:function(e,n){e&&"function"!=typeof e?"production"!==t.env.NODE_ENV?d(!1,"%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",n,r(e)):a("122",n,r(e)):void 0}};e.exports=p}).call(t,n(2))},function(e,t){"use strict";var n=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,o,r){MSApp.execUnsafeLocalFunction(function(){return e(t,n,o,r)})}:e};e.exports=n},function(e,t){"use strict";function n(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}e.exports=n},function(e,t){"use strict";function n(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var o=r[e];return!!o&&!!n[o]}function o(e){return n}var r={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};e.exports=o},function(e,t){"use strict";function n(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}e.exports=n},function(e,t,n){"use strict";/** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +function o(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"==typeof a[n]}return!o&&r&&"wheel"===e&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}var r,i=n(21);i.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),e.exports=o},function(e,t){"use strict";function n(e,t){var n=null===e||e===!1,o=null===t||t===!1;if(n||o)return n===o;var r=typeof e,i=typeof t;return"string"===r||"number"===r?"string"===i||"number"===i:"object"===i&&e.type===t.type&&e.key===t.key}e.exports=n},function(e,t,n){(function(t){"use strict";var o=n(16),r=n(27),i=n(12),a=r;if("production"!==t.env.NODE_ENV){var s=["address","applet","area","article","aside","base","basefont","bgsound","blockquote","body","br","button","caption","center","col","colgroup","dd","details","dir","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","iframe","img","input","isindex","li","link","listing","main","marquee","menu","menuitem","meta","nav","noembed","noframes","noscript","object","ol","p","param","plaintext","pre","script","section","select","source","style","summary","table","tbody","td","template","textarea","tfoot","th","thead","title","tr","track","ul","wbr","xmp"],l=["applet","caption","html","table","td","th","marquee","object","template","foreignObject","desc","title"],u=l.concat(["button"]),c=["dd","dt","li","option","optgroup","p","rp","rt"],d={current:null,formTag:null,aTagInScope:null,buttonTagInScope:null,nobrTagInScope:null,pTagInButtonScope:null,listItemTagAutoclosing:null,dlItemTagAutoclosing:null},f=function(e,t,n){var r=o({},e||d),i={tag:t,instance:n};return l.indexOf(t)!==-1&&(r.aTagInScope=null,r.buttonTagInScope=null,r.nobrTagInScope=null),u.indexOf(t)!==-1&&(r.pTagInButtonScope=null),s.indexOf(t)!==-1&&"address"!==t&&"div"!==t&&"p"!==t&&(r.listItemTagAutoclosing=null,r.dlItemTagAutoclosing=null),r.current=i,"form"===t&&(r.formTag=i),"a"===t&&(r.aTagInScope=i),"button"===t&&(r.buttonTagInScope=i),"nobr"===t&&(r.nobrTagInScope=i),"p"===t&&(r.pTagInButtonScope=i),"li"===t&&(r.listItemTagAutoclosing=i),"dd"!==t&&"dt"!==t||(r.dlItemTagAutoclosing=i),r},p=function(e,t){switch(t){case"select":return"option"===e||"optgroup"===e||"#text"===e;case"optgroup":return"option"===e||"#text"===e;case"option":return"#text"===e;case"tr":return"th"===e||"td"===e||"style"===e||"script"===e||"template"===e;case"tbody":case"thead":case"tfoot":return"tr"===e||"style"===e||"script"===e||"template"===e;case"colgroup":return"col"===e||"template"===e;case"table":return"caption"===e||"colgroup"===e||"tbody"===e||"tfoot"===e||"thead"===e||"style"===e||"script"===e||"template"===e;case"head":return"base"===e||"basefont"===e||"bgsound"===e||"link"===e||"meta"===e||"title"===e||"noscript"===e||"noframes"===e||"style"===e||"script"===e||"template"===e;case"html":return"head"===e||"body"===e;case"#document":return"html"===e}switch(e){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"h1"!==t&&"h2"!==t&&"h3"!==t&&"h4"!==t&&"h5"!==t&&"h6"!==t;case"rp":case"rt":return c.indexOf(t)===-1;case"body":case"caption":case"col":case"colgroup":case"frame":case"head":case"html":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":return null==t}return!0},h=function(e,t){switch(e){case"address":case"article":case"aside":case"blockquote":case"center":case"details":case"dialog":case"dir":case"div":case"dl":case"fieldset":case"figcaption":case"figure":case"footer":case"header":case"hgroup":case"main":case"menu":case"nav":case"ol":case"p":case"section":case"summary":case"ul":case"pre":case"listing":case"table":case"hr":case"xmp":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return t.pTagInButtonScope;case"form":return t.formTag||t.pTagInButtonScope;case"li":return t.listItemTagAutoclosing;case"dd":case"dt":return t.dlItemTagAutoclosing;case"button":return t.buttonTagInScope;case"a":return t.aTagInScope;case"nobr":return t.nobrTagInScope}return null},m=function(e){if(!e)return[];var t=[];do t.push(e);while(e=e._currentElement._owner);return t.reverse(),t},v={};a=function(e,n,o,r){r=r||d;var a=r.current,s=a&&a.tag;null!=n&&("production"!==t.env.NODE_ENV?i(null==e,"validateDOMNesting: when childText is passed, childTag should be null"):void 0,e="#text");var l=p(e,s)?null:a,u=l?null:h(e,r),c=l||u;if(c){var f,y=c.tag,g=c.instance,b=o&&o._currentElement._owner,E=g&&g._currentElement._owner,_=m(b),x=m(E),w=Math.min(_.length,x.length),C=-1;for(f=0;f "),P=!!l+"|"+e+"|"+y+"|"+k;if(v[P])return;v[P]=!0;var S=e,M="";if("#text"===e?/\S/.test(n)?S="Text nodes":(S="Whitespace text nodes",M=" Make sure you don't have any extra whitespace between tags on each line of your source code."):S="<"+e+">",l){var A="";"table"===y&&"tr"===e&&(A+=" Add a to your code to match the DOM tree generated by the browser."),"production"!==t.env.NODE_ENV?i(!1,"validateDOMNesting(...): %s cannot appear as a child of <%s>.%s See %s.%s",S,y,M,k,A):void 0}else"production"!==t.env.NODE_ENV?i(!1,"validateDOMNesting(...): %s cannot appear as a descendant of <%s>. See %s.",S,y,k):void 0}},a.updatedAncestorInfo=f,a.isTagValidInContext=function(e,t){t=t||d;var n=t.current,o=n&&n.tag;return p(e,o)&&!h(e,t)}}e.exports=a}).call(t,n(2))},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){return e="function"==typeof e?e():e,a.default.findDOMNode(e)||t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(20),a=o(i);e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n,o,r){var a=e[t],l="undefined"==typeof a?"undefined":i(a);return s.default.isValidElement(a)?new Error("Invalid "+o+" `"+r+"` of type ReactElement "+("supplied to `"+n+"`, expected a ReactComponent or a ")+"DOMElement. You can usually obtain a ReactComponent or DOMElement from a ReactElement by attaching a ref to it."):"object"===l&&"function"==typeof a.render||1===a.nodeType?null:new Error("Invalid "+o+" `"+r+"` of value `"+a+"` "+("supplied to `"+n+"`, expected a ReactComponent or a ")+"DOMElement.")}t.__esModule=!0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},a=n(1),s=o(a),l=n(111),u=o(l);t.default=(0,u.default)(r)},function(e,t){"use strict";function n(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e);try{throw new Error(e)}catch(e){}}t.__esModule=!0,t.default=n},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t may have only one child element"),this.unlisten=o.listen(function(){e.setState({match:e.computeMatch(o.location.pathname)})})},t.prototype.componentWillReceiveProps=function(e){(0,u.default)(this.props.history===e.history,"You cannot change ")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?p.default.Children.only(e):null},t}(p.default.Component);v.propTypes={history:m.default.object.isRequired,children:m.default.node},v.contextTypes={router:m.default.object},v.childContextTypes={router:m.default.object.isRequired},t.default=v},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(555),i=o(r),a={},s=1e4,l=0,u=function(e,t){var n=""+t.end+t.strict,o=a[n]||(a[n]={});if(o[e])return o[e];var r=[],u=(0,i.default)(e,r,t),c={re:u,keys:r};return l1&&void 0!==arguments[1]?arguments[1]:{};"string"==typeof t&&(t={path:t});var n=t,o=n.path,r=void 0===o?"/":o,i=n.exact,a=void 0!==i&&i,s=n.strict,l=void 0!==s&&s,c=u(r,{end:a,strict:l}),d=c.re,f=c.keys,p=d.exec(e);if(!p)return null;var h=p[0],m=p.slice(1),v=e===h;return a&&!v?null:{path:r,url:"/"===r&&""===h?"/":h,isExact:v,params:f.reduce(function(e,t,n){return e[t.name]=m[n],e},{})}};t.default=c},function(e,t,n){(function(t){"use strict";function o(e,t,n){this.props=e,this.context=t,this.refs=s,this.updater=n||i}var r=n(56),i=n(184),a=n(112),s=n(52),l=n(11),u=n(12);if(o.prototype.isReactComponent={},o.prototype.setState=function(e,n){"object"!=typeof e&&"function"!=typeof e&&null!=e?"production"!==t.env.NODE_ENV?l(!1,"setState(...): takes an object of state variables to update or a function which returns an object of state variables."):r("85"):void 0,this.updater.enqueueSetState(this,e),n&&this.updater.enqueueCallback(this,n,"setState")},o.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this),e&&this.updater.enqueueCallback(this,e,"forceUpdate")},"production"!==t.env.NODE_ENV){var c={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},d=function(e,n){a&&Object.defineProperty(o.prototype,e,{get:function(){"production"!==t.env.NODE_ENV?u(!1,"%s(...) is deprecated in plain JavaScript React classes. %s",n[0],n[1]):void 0}})};for(var f in c)c.hasOwnProperty(f)&&d(f,c[f])}e.exports=o}).call(t,n(2))},function(e,t,n){(function(t){"use strict";function o(e,n){if("production"!==t.env.NODE_ENV){var o=e.constructor;"production"!==t.env.NODE_ENV?r(!1,"%s(...): Can only update a mounted or mounting component. This usually means you called %s() on an unmounted component. This is a no-op. Please check the code for the %s component.",n,n,o&&(o.displayName||o.name)||"ReactClass"):void 0}}var r=n(12),i={isMounted:function(e){return!1},enqueueCallback:function(e,t){},enqueueForceUpdate:function(e){o(e,"forceUpdate")},enqueueReplaceState:function(e,t){o(e,"replaceState")},enqueueSetState:function(e,t){o(e,"setState")}};e.exports=i}).call(t,n(2))},function(e,t,n){(function(e){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(){}t.__esModule=!0,t.compose=t.applyMiddleware=t.bindActionCreators=t.combineReducers=t.createStore=void 0;var i=n(318),a=o(i),s=n(782),l=o(s),u=n(781),c=o(u),d=n(780),f=o(d),p=n(317),h=o(p),m=n(319),v=o(m);"production"!==e.env.NODE_ENV&&"string"==typeof r.name&&"isCrushed"!==r.name&&(0,v.default)("You are currently using minified code outside of NODE_ENV === 'production'. This means that you are running a slower development build of Redux. You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) to ensure you have the correct code for your production build."),t.createStore=a.default,t.combineReducers=l.default,t.bindActionCreators=c.default,t.applyMiddleware=f.default,t.compose=h.default}).call(t,n(2))},function(e,t,n){function o(){}function r(e){var n="",o=!1;return n+=e.type,t.BINARY_EVENT!=e.type&&t.BINARY_ACK!=e.type||(n+=e.attachments,n+="-"),e.nsp&&"/"!=e.nsp&&(o=!0,n+=e.nsp),null!=e.id&&(o&&(n+=",",o=!1),n+=e.id),null!=e.data&&(o&&(n+=","),n+=f.stringify(e.data)),d("encoded %j as %s",e,n),n}function i(e,t){function n(e){var n=h.deconstructPacket(e),o=r(n.packet),i=n.buffers;i.unshift(o),t(i)}h.removeBlobs(e,n)}function a(){this.reconstructor=null}function s(e){var n={},o=0;if(n.type=Number(e.charAt(0)),null==t.types[n.type])return c();if(t.BINARY_EVENT==n.type||t.BINARY_ACK==n.type){for(var r="";"-"!=e.charAt(++o)&&(r+=e.charAt(o),o!=e.length););if(r!=Number(r)||"-"!=e.charAt(o))throw new Error("Illegal attachments");n.attachments=Number(r)}if("/"==e.charAt(o+1))for(n.nsp="";++o;){var i=e.charAt(o);if(","==i)break;if(n.nsp+=i,o==e.length)break}else n.nsp="/";var a=e.charAt(o+1);if(""!==a&&Number(a)==a){for(n.id="";++o;){var i=e.charAt(o);if(null==i||Number(i)!=i){--o;break}if(n.id+=e.charAt(o),o==e.length)break}n.id=Number(n.id)}return e.charAt(++o)&&(n=l(n,e.substr(o))),d("decoded %s as %j",e,n),n}function l(e,t){try{e.data=f.parse(t)}catch(e){return c()}return e}function u(e){this.reconPack=e,this.buffers=[]}function c(e){return{type:t.ERROR,data:"parser error"}}var d=n(790)("socket.io-parser"),f=n(516),p=n(789),h=n(788),m=n(323);t.protocol=4,t.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],t.CONNECT=0,t.DISCONNECT=1,t.EVENT=2,t.ACK=3,t.ERROR=4,t.BINARY_EVENT=5,t.BINARY_ACK=6,t.Encoder=o,t.Decoder=a,o.prototype.encode=function(e,n){if(d("encoding packet %j",e),t.BINARY_EVENT==e.type||t.BINARY_ACK==e.type)i(e,n);else{var o=r(e);n([o])}},p(a.prototype),a.prototype.add=function(e){var n;if("string"==typeof e)n=s(e),t.BINARY_EVENT==n.type||t.BINARY_ACK==n.type?(this.reconstructor=new u(n),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",n)):this.emit("decoded",n);else{if(!m(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");n=this.reconstructor.takeBinaryData(e),n&&(this.reconstructor=null,this.emit("decoded",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},u.prototype.takeBinaryData=function(e){if(this.buffers.push(e),this.buffers.length==this.reconPack.attachments){var t=h.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),t}return null},u.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,n){(function(t){"use strict";var o=n(29),r=n(338),i=n(341),a=n(347),s=n(345),l=n(191),u="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(340);e.exports=function(e){return new Promise(function(c,d){var f=e.data,p=e.headers;o.isFormData(f)&&delete p["Content-Type"];var h=new XMLHttpRequest,m="onreadystatechange",v=!1;if("test"===t.env.NODE_ENV||"undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||s(e.url)||(h=new window.XDomainRequest,m="onload",v=!0,h.onprogress=function(){},h.ontimeout=function(){}),e.auth){var y=e.auth.username||"",g=e.auth.password||"";p.Authorization="Basic "+u(y+":"+g)}if(h.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h[m]=function(){if(h&&(4===h.readyState||v)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var t="getAllResponseHeaders"in h?a(h.getAllResponseHeaders()):null,n=e.responseType&&"text"!==e.responseType?h.response:h.responseText,o={data:n,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:t,config:e,request:h};r(c,d,o),h=null}},h.onerror=function(){d(l("Network Error",e)),h=null},h.ontimeout=function(){d(l("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED")),h=null},o.isStandardBrowserEnv()){var b=n(343),E=(e.withCredentials||s(e.url))&&e.xsrfCookieName?b.read(e.xsrfCookieName):void 0;E&&(p[e.xsrfHeaderName]=E)}if("setRequestHeader"in h&&o.forEach(p,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete p[t]:h.setRequestHeader(t,e)}),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){h&&(h.abort(),d(e),h=null)}),void 0===f&&(f=null),h.send(f)})}}).call(t,n(2))},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";var o=n(337);e.exports=function(e,t,n,r){var i=new Error(e);return o(i,t,n,r)}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),o=0;o0&&h==v?u.default.createElement(d.Button,{className:"btn btn-sm btn-success",onClick:function(){f(n.id)}},u.default.createElement("i",{className:"fa fa-play"})):void 0,g>0?u.default.createElement(d.Button,{className:"btn btn-sm btn-warning",onClick:function(){f(n.id)}},u.default.createElement("i",{className:"fa fa-forward"})):void 0,u.default.createElement(d.Button,{className:"btn btn-sm btn-success",onClick:function(){e.refs.step_modal_new.wrappedInstance.show({fermenter_id:n.id,name:"",temp:"",days:"",minutes:"",hours:""})}},u.default.createElement("i",{className:"fa fa-plus"}))),u.default.createElement("div",{className:"clearfix"})),u.default.createElement("div",{className:"list-group"},n.steps?n.steps.map(this.render_step.bind(this)):void 0,u.default.createElement(O.default,{ref:"step_modal",save:!0,remove:!0}),u.default.createElement(O.default,{ref:"step_modal_new",add:!0}))))}}]),t}(l.Component),S=function(e,t){var n=e.fermenter.list[t.id];return{data:n,cooler:n.cooler?e.actor.actors[n.cooler]||{}:{},heater:n.heater?e.actor.actors[n.heater]||{}:{},sensor:n.sensor?e.sensor.sensors[n.sensor]||{}:{},sensor2:n.sensor2?e.sensor.sensors[n.sensor2]||{}:{},sensor3:n.sensor3?e.sensor.sensors[n.sensor3]||{}:{},inactive_count:n.steps?n.steps.filter(function(e){return"I"===e.state}).length:0,active_count:n.steps?n.steps.filter(function(e){return"A"===e.state}).length:0,count:n.steps?n.steps.length:0,unit:(0,k.get_parameter)(e,"unit","C")}},M=function(e,t,n){return{start:function(t){ +e((0,p.start)(t))},stop:function(t){e((0,p.stop)(t))},toggle:function(t){e((0,f.toggle)(t))},toggle_automatic:function(t){e((0,p.toggle_automatic)(t))}}};P.contextTypes={router:u.default.PropTypes.shape({history:u.default.PropTypes.object.isRequired})},t.default=(0,c.connect)(S,M,null,{withRef:!0})(P)},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(13),i=n(30),a=o(i),s=n(91),l=function(e,t){return{title:"Kettle Modal ",bsSize:"large",form:[{label:"Name",name:"name",type:"text"},{label:"Logic",clear_config:!0,name:"logic",type:"select",options:Object.keys(e.kettle.config_type)},{label:"Actor",name:"heater",type:"actor"},{label:"Agitator",name:"agitator",type:"actor"},{label:"Sensor",name:"sensor",type:"sensor"}],types:e.kettle.config_type,configfield:"logic",actors:e.actor.actors,sensors:e.sensor.sensors}},u=function(e,t,n){return{btn_save:function(t){return e((0,s.save)(t)),!0},btn_add:function(t){return e((0,s.add)(t)),!0},btn_delete:function(t){return e((0,s.remove)(t)),!0}}},c=(0,r.connect)(l,u,null,{withRef:!0})(a.default);t.default=c},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:c(),t=arguments[1];switch(t.type){case"ADDON_UPDATE_FINISHED":return i({},e,r({},t.payload,(0,u.default)(e[t.payload],{loading:{$set:!1}})));case"ADDON_UPDATE_STARTED":case"ADDON_DOWNLOAD_STARTED":return i({},e,r({},t.payload,(0,u.default)(e[t.payload],{loading:{$set:!0}})));case"ADDON_DOWNLOADED":return i({},e,r({},t.payload,(0,u.default)(e[t.payload],{installed:{$set:!0},loading:{$set:!1}})));case"DELETE_ADDON":return i({},e,r({},t.payload,(0,u.default)(e[t.payload],{installed:{$set:!1}})));case"SET_ADDON_LIST":return i({},t.payload);default:return e}});t.default=d},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:s(),t=arguments[1];switch(t.type){case"LOAD_STATE":return[].concat(r(t.payload.messages));case"NOTIFY":return[].concat(r(e),[t.payload]);case"DISMISS_NOTIFICATION":return e.filter(function(e,n){return e.id!==t.id});default:return e}});t.default=l},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(13),i=n(30),a=o(i),s=n(73),l=function(e,t){return{title:"Set Date and Time",form:[{label:"Date",name:"date",type:"text"},{label:"Time",name:"time",type:"text"}]}},u=function(e,t){return{btn_save:function(t){return e((0,s.set_time)(t.date,t.time)),!0},btn_add:function(e){return!0},btn_delete:function(e){return!0}}};t.default=(0,r.connect)(l,u,null,{withRef:!0})(a.default)},function(e,t,n){e.exports={default:n(401),__esModule:!0}},function(e,t,n){e.exports={default:n(402),__esModule:!0}},function(e,t,n){e.exports={default:n(404),__esModule:!0}},function(e,t,n){e.exports={default:n(405),__esModule:!0}},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(201),i=o(r);t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tl;)o(s,n=t[l++])&&(~i(u,n)||u.push(n));return u}},function(e,t,n){var o=n(36),r=n(26),i=n(60);e.exports=function(e,t){var n=(r.Object||{})[e]||Object[e],a={};a[e]=t(n),o(o.S+o.F*i(function(){n(1)}),"Object",a)}},function(e,t,n){var o=n(62),r=n(41),i=n(79).f;e.exports=function(e){return function(t){for(var n,a=r(t),s=o(a),l=s.length,u=0,c=[];l>u;)i.call(a,n=s[u++])&&c.push(e?[n,a[n]]:a[n]);return c}}},function(e,t,n){e.exports=n(61)},function(e,t,n){var o=n(133),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){"use strict";var o=n(431)(!0);n(211)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=o(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t0&&void 0!==arguments[0]?arguments[0]:(0,a.default)();try{return e.activeElement}catch(e){}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(63),a=o(i);e.exports=t.default},function(e,t){"use strict";function n(e,t){return e.classList?!!t&&e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")!==-1}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e){var t=(0,c.default)(e),n=(0,l.default)(t),o=t&&t.documentElement,r={top:0,left:0,height:0,width:0};if(t)return(0,a.default)(o,e)?(void 0!==e.getBoundingClientRect&&(r=e.getBoundingClientRect()),r={top:r.top+(n.pageYOffset||o.scrollTop)-(o.clientTop||0),left:r.left+(n.pageXOffset||o.scrollLeft)-(o.clientLeft||0),width:(null==r.width?e.offsetWidth:r.width)||0,height:(null==r.height?e.offsetHeight:r.height)||0}):r}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(64),a=o(i),s=n(98),l=o(s),u=n(63),c=o(u);e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var n=(0,a.default)(e);return void 0===t?n?"pageYOffset"in n?n.pageYOffset:n.document.documentElement.scrollTop:e.scrollTop:void(n?n.scrollTo("pageXOffset"in n?n.pageXOffset:n.document.documentElement.scrollLeft,t):e.scrollTop=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(98),a=o(i);e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(){for(var e=document.createElement("div").style,t={O:function(e){return"o"+e.toLowerCase()},Moz:function(e){return e.toLowerCase()},Webkit:function(e){return"webkit"+e},ms:function(e){return"MS"+e}},n=Object.keys(t),o=void 0,r=void 0,i="",a=0;a=t[t.length-1].options.index)return void t.push(e);for(var o=0;on)return void t.splice(o,0,e)}}},{key:"reset",value:function(){this.registry=[]}},{key:"remove",value:function(e){var t=this.registry.indexOf(e);this.registry.splice(t,1)}},{key:"toString",value:function(e){return this.registry.filter(function(e){return e.attached}).map(function(t){return t.toString(e)}).join("\n")}}]),e}();t.default=r},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e.Renderer)return e.Renderer;var t=e.virtual||!a.default;return t?c.default:l.default}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(101),a=o(i),s=n(532),l=o(s),u=n(533),c=o(u)},function(e,t){"use strict";function n(e){return Array.isArray(e)?Array.isArray(e[0])?n(e.map(o)):e.join(", "):e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n;var o=function(e){return e.join(" ")}},function(e,t,n){var o=n(552),r=o.Symbol;e.exports=r},function(e,t){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,o=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];e.exports=function(e){var t=e,r=e.indexOf("["),i=e.indexOf("]");r!=-1&&i!=-1&&(e=e.substring(0,r)+e.substring(r,i).replace(/:/g,";")+e.substring(i,e.length));for(var a=n.exec(e||""),s={},l=14;l--;)s[o[l]]=a[l]||"";return r!=-1&&i!=-1&&(s.source=t,s.host=s.host.substring(1,s.host.length-1).replace(/;/g,":"),s.authority=s.authority.replace("[","").replace("]","").replace(/;/g,":"),s.ipv6uri=!0),s}},function(e,t,n){(function(t){"use strict";var o=n(27),r=n(11),i=n(12),a=n(243),s=n(556);e.exports=function(e,n){function l(e){var t=e&&(T&&e[T]||e[k]);if("function"==typeof t)return t}function u(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function c(e){this.message=e,this.stack=""}function d(e){function o(o,u,d,f,p,h,m){if(f=f||P,h=h||d,m!==a)if(n)r(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if("production"!==t.env.NODE_ENV&&"undefined"!=typeof console){var v=f+":"+d;!s[v]&&l<3&&(i(!1,"You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.",h,f),s[v]=!0,l++)}return null==u[d]?o?new c(null===u[d]?"The "+p+" `"+h+"` is marked as required "+("in `"+f+"`, but its value is `null`."):"The "+p+" `"+h+"` is marked as required in "+("`"+f+"`, but its value is `undefined`.")):null:e(u,d,f,p,h)}if("production"!==t.env.NODE_ENV)var s={},l=0;var u=o.bind(null,!1);return u.isRequired=o.bind(null,!0),u}function f(e){function t(t,n,o,r,i,a){var s=t[n],l=C(s);if(l!==e){var u=O(s);return new c("Invalid "+r+" `"+i+"` of type "+("`"+u+"` supplied to `"+o+"`, expected ")+("`"+e+"`."))}return null}return d(t)}function p(){return d(o.thatReturnsNull)}function h(e){function t(t,n,o,r,i){if("function"!=typeof e)return new c("Property `"+i+"` of component `"+o+"` has invalid PropType notation inside arrayOf.");var s=t[n];if(!Array.isArray(s)){var l=C(s);return new c("Invalid "+r+" `"+i+"` of type "+("`"+l+"` supplied to `"+o+"`, expected an array."))}for(var u=0;u1?(!n&&t&&(o.className+=" "+t),p.default.createElement("div",o)):p.default.Children.only(o.children)},t}(f.Component);v.propTypes={children:m.default.any,className:m.default.string,visible:m.default.bool,hiddenClassName:m.default.string},t.default=v,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(38),_=o(E),x={active:b.default.bool,href:b.default.string,title:b.default.node,target:b.default.string},w={active:!1},C=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.active,n=e.href,o=e.title,r=e.target,a=e.className,l=(0,s.default)(e,["active","href","title","target","className"]),u={href:n,title:o,target:r};return y.default.createElement("li",{className:(0,m.default)(a,{active:t})},t?y.default.createElement("span",l):y.default.createElement(_.default,(0,i.default)({},l,u)))},t}(y.default.Component);C.propTypes=x,C.defaultProps=w,t.default=C,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(109),_=o(E),x=n(85),w=o(x),C=n(10),O={vertical:b.default.bool,justified:b.default.bool,block:(0,_.default)(b.default.bool,function(e){var t=e.block,n=e.vertical;return t&&!n?new Error("`block` requires `vertical` to be set to have any effect"):null})},N={block:!1,justified:!1,vertical:!1},T=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.block,o=t.justified,r=t.vertical,a=t.className,l=(0,s.default)(t,["block","justified","vertical","className"]),u=(0,C.splitBsProps)(l),c=u[0],d=u[1],f=(0,i.default)({},(0,C.getClassSet)(c),(e={},e[(0,C.prefix)(c)]=!r,e[(0,C.prefix)(c,"vertical")]=r,e[(0,C.prefix)(c,"justified")]=o,e[(0,C.prefix)(w.default.defaultProps,"block")]=n,e));return y.default.createElement("div",(0,i.default)({},d,{className:(0,m.default)(a,f)}))},t}(y.default.Component);T.propTypes=O,T.defaultProps=N,t.default=(0,C.bsClass)("btn-group",T),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(20),_=o(E),x=n(642),w=o(x),C={direction:b.default.oneOf(["prev","next"]),onAnimateOutEnd:b.default.func,active:b.default.bool,animateIn:b.default.bool,animateOut:b.default.bool,index:b.default.number},O={active:!1,animateIn:!1,animateOut:!1},N=function(e){function t(n,o){(0,u.default)(this,t);var r=(0,d.default)(this,e.call(this,n,o));return r.handleAnimateOutEnd=r.handleAnimateOutEnd.bind(r),r.state={direction:null},r.isUnmounted=!1,r}return(0,p.default)(t,e),t.prototype.componentWillReceiveProps=function(e){this.props.active!==e.active&&this.setState({direction:null})},t.prototype.componentDidUpdate=function(e){var t=this,n=this.props.active,o=e.active;!n&&o&&w.default.addEndEventListener(_.default.findDOMNode(this),this.handleAnimateOutEnd),n!==o&&setTimeout(function(){return t.startAnimation()},20)},t.prototype.componentWillUnmount=function(){this.isUnmounted=!0},t.prototype.handleAnimateOutEnd=function(){this.isUnmounted||this.props.onAnimateOutEnd&&this.props.onAnimateOutEnd(this.props.index)},t.prototype.startAnimation=function(){this.isUnmounted||this.setState({direction:"prev"===this.props.direction?"right":"left"})},t.prototype.render=function(){var e=this.props,t=e.direction,n=e.active,o=e.animateIn,r=e.animateOut,a=e.className,l=(0,s.default)(e,["direction","active","animateIn","animateOut","className"]);delete l.onAnimateOutEnd,delete l.index;var u={item:!0,active:n&&!o||r};return t&&n&&o&&(u[t]=!0),this.state.direction&&(o||r)&&(u[this.state.direction]=!0),y.default.createElement("div",(0,i.default)({},l,{className:(0,m.default)(a,u)}))},t}(y.default.Component);N.propTypes=C,N.defaultProps=O,t.default=N,e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(1),m=o(h),v=n(7),y=o(v),g=n(9),b=o(g),E=n(85),_=o(E),x=n(38),w=o(x),C=n(10),O={noCaret:y.default.bool,open:y.default.bool,title:y.default.string,useAnchor:y.default.bool},N={open:!1,useAnchor:!1,bsRole:"toggle"},T=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.noCaret,n=e.open,o=e.useAnchor,r=e.bsClass,a=e.className,l=e.children,u=(0,s.default)(e,["noCaret","open","useAnchor","bsClass","className","children"]);delete u.bsRole;var c=o?w.default:_.default,d=!t;return m.default.createElement(c,(0,i.default)({},u,{role:"button",className:(0,b.default)(a,r),"aria-haspopup":!0,"aria-expanded":n}),l||u.title,d&&" ",d&&m.default.createElement("span",{className:"caret"}))},t}(m.default.Component);T.propTypes=O,T.defaultProps=N,t.default=(0,C.bsClass)("dropdown-toggle",T),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(17),_=o(E),x=n(10),w={fluid:b.default.bool,componentClass:_.default},C={componentClass:"div",fluid:!1},O=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.fluid,n=e.componentClass,o=e.className,r=(0,s.default)(e,["fluid","componentClass","className"]),a=(0,x.splitBsProps)(r),l=a[0],u=a[1],c=(0,x.prefix)(l,t&&"fluid");return y.default.createElement(n,(0,i.default)({},u,{className:(0,m.default)(o,c)}))},t}(y.default.Component);O.propTypes=w,O.defaultProps=C,t.default=(0,x.bsClass)("container",O),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(58),i=o(r),a=n(3),s=o(a),l=n(8),u=o(l),c=n(4),d=o(c),f=n(6),p=o(f),h=n(5),m=o(h),v=n(9),y=o(v),g=n(1),b=o(g),E=n(7),_=o(E),x=n(10),w=n(24),C={active:_.default.any,disabled:_.default.any,header:_.default.node,listItem:_.default.bool,onClick:_.default.func,href:_.default.string,type:_.default.string},O={listItem:!1},N=function(e){function t(){return(0,d.default)(this,t),(0,p.default)(this,e.apply(this,arguments))}return(0,m.default)(t,e),t.prototype.renderHeader=function(e,t){return b.default.isValidElement(e)?(0,g.cloneElement)(e,{className:(0,y.default)(e.props.className,t)}):b.default.createElement("h4",{className:t},e)},t.prototype.render=function(){var e=this.props,t=e.active,n=e.disabled,o=e.className,r=e.header,i=e.listItem,a=e.children,l=(0,u.default)(e,["active","disabled","className","header","listItem","children"]),c=(0,x.splitBsProps)(l),d=c[0],f=c[1],p=(0,s.default)({},(0,x.getClassSet)(d),{active:t,disabled:n}),h=void 0;return f.href?h="a":f.onClick?(h="button",f.type=f.type||"button"):h=i?"li":"span",f.className=(0,y.default)(o,p),r?b.default.createElement(h,f,this.renderHeader(r,(0,x.prefix)(d,"heading")),b.default.createElement("p",{className:(0,x.prefix)(d,"text")},a)):b.default.createElement(h,f,a)},t}(b.default.Component);N.propTypes=C,N.defaultProps=O,t.default=(0,x.bsClass)("list-group-item",(0,x.bsStyles)((0,i.default)(w.State),N)),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(17),b=o(g),E=n(10),_={componentClass:b.default},x={componentClass:"div"},w=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.componentClass,n=e.className,o=(0,s.default)(e,["componentClass","className"]),r=(0,E.splitBsProps)(o),a=r[0],l=r[1],u=(0,E.getClassSet)(a);return y.default.createElement(t,(0,i.default)({},l,{className:(0,m.default)(n,u)}))},t}(y.default.Component);w.propTypes=_,w.defaultProps=x,t.default=(0,E.bsClass)("modal-body",w),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(17),b=o(g),E=n(10),_={componentClass:b.default},x={componentClass:"div"},w=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.componentClass,n=e.className,o=(0,s.default)(e,["componentClass","className"]),r=(0,E.splitBsProps)(o),a=r[0],l=r[1],u=(0,E.getClassSet)(a);return y.default.createElement(t,(0,i.default)({},l,{className:(0,m.default)(n,u)}))},t}(y.default.Component);w.propTypes=_,w.defaultProps=x,t.default=(0,E.bsClass)("modal-footer",w),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(7),b=o(g),E=n(10),_=n(23),x=o(_),w={"aria-label":b.default.string,closeButton:b.default.bool,onHide:b.default.func},C={"aria-label":"Close",closeButton:!1},O={$bs_modal:b.default.shape({onHide:b.default.func})},N=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e["aria-label"],n=e.closeButton,o=e.onHide,r=e.className,a=e.children,l=(0,s.default)(e,["aria-label","closeButton","onHide","className","children"]),u=this.context.$bs_modal,c=(0,E.splitBsProps)(l),d=c[0],f=c[1],p=(0,E.getClassSet)(d);return y.default.createElement("div",(0,i.default)({},f,{className:(0,m.default)(r,p)}),n&&y.default.createElement("button",{type:"button",className:"close","aria-label":t,onClick:(0,x.default)(u&&u.onHide,o)},y.default.createElement("span",{"aria-hidden":"true"},"×")),a)},t}(y.default.Component);N.propTypes=w,N.defaultProps=C,N.contextTypes=O,t.default=(0,E.bsClass)("modal-header",N),e.exports=t.default},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=n(3),i=o(r),a=n(8),s=o(a),l=n(4),u=o(l),c=n(6),d=o(c),f=n(5),p=o(f),h=n(9),m=o(h),v=n(1),y=o(v),g=n(17),b=o(g),E=n(10),_={componentClass:b.default},x={componentClass:"h4"},w=function(e){function t(){return(0,u.default)(this,t),(0,d.default)(this,e.apply(this,arguments))}return(0,p.default)(t,e),t.prototype.render=function(){var e=this.props,t=e.componentClass,n=e.className,o=(0,s.default)(e,["componentClass","className"]),r=(0,E.splitBsProps)(o),a=r[0],l=r[1],u=(0,E.getClassSet)(a);return y.default.createElement(t,(0,i.default)({},l,{className:(0,m.default)(n,u)}))},t}(y.default.Component);w.propTypes=_,w.defaultProps=x,t.default=(0,E.bsClass)("modal-title",w),e.exports=t.default},function(e,t,n){(function(o){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(3),a=r(i),s=n(8),l=r(s),u=n(4),c=r(u),d=n(6),f=r(d),p=n(5),h=r(p),m=n(9),v=r(m),y=n(150),g=r(y),b=n(1),E=r(b),_=n(7),x=r(_),w=n(20),C=r(w),O=n(109),N=r(O),T=n(18),k=r(T),P=n(10),S=n(23),M=r(S),A=n(28),D=r(A),R={activeKey:x.default.any,activeHref:x.default.string,stacked:x.default.bool,justified:(0,N.default)(x.default.bool,function(e){var t=e.justified,n=e.navbar;return t&&n?Error("justified navbar `Nav`s are not supported"):null}),onSelect:x.default.func,role:x.default.string,navbar:x.default.bool,pullRight:x.default.bool,pullLeft:x.default.bool},I={justified:!1,pullRight:!1,pullLeft:!1,stacked:!1},j={$bs_navbar:x.default.shape({bsClass:x.default.string,onSelect:x.default.func}),$bs_tabContainer:x.default.shape({activeKey:x.default.any,onSelect:x.default.func.isRequired,getTabId:x.default.func.isRequired,getPaneId:x.default.func.isRequired})},L=function(e){function t(){return(0,c.default)(this,t),(0,f.default)(this,e.apply(this,arguments))}return(0,h.default)(t,e),t.prototype.componentDidUpdate=function(){var e=this;if(this._needsRefocus){this._needsRefocus=!1;var t=this.props.children,n=this.getActiveProps(),o=n.activeKey,r=n.activeHref,i=D.default.find(t,function(t){return e.isActive(t,o,r)}),a=D.default.toArray(t),s=a.indexOf(i),l=C.default.findDOMNode(this).children,u=l&&l[s];u&&u.firstChild&&u.firstChild.focus()}},t.prototype.handleTabKeyDown=function(e,t){var n=void 0;switch(t.keyCode){case g.default.codes.left:case g.default.codes.up:n=this.getNextActiveChild(-1);break;case g.default.codes.right:case g.default.codes.down:n=this.getNextActiveChild(1);break;default:return}t.preventDefault(),e&&n&&null!=n.props.eventKey&&e(n.props.eventKey),this._needsRefocus=!0},t.prototype.getNextActiveChild=function(e){var t=this,n=this.props.children,o=n.filter(function(e){return null!=e.props.eventKey&&!e.props.disabled}),r=this.getActiveProps(),i=r.activeKey,a=r.activeHref,s=D.default.find(n,function(e){return t.isActive(e,i,a)}),l=o.indexOf(s);if(l===-1)return o[0];var u=l+e,c=o.length;return u>=c?u=0:u<0&&(u=c-1),o[u]},t.prototype.getActiveProps=function(){var e=this.context.$bs_tabContainer;return e?("production"!==o.env.NODE_ENV?(0,k.default)(null==this.props.activeKey&&!this.props.activeHref,"Specifying a `