From 03fdcd24366bfc019a3a5a509eb8a90745726da3 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Mon, 29 Jul 2019 09:38:40 +0200 Subject: [PATCH] Initial version of the file upload example. The most important code works but the sample needs some HTML magic to be easier to understand and use. --- Sming/Core/Network/Http/HttpBodyParser.cpp | 225 +++++------ Sming/Core/Network/Http/HttpBodyParser.h | 2 +- .../Network/Http/HttpMultipartResource.cpp | 10 +- .../Core/Network/Http/HttpMultipartResource.h | 21 +- Sming/Core/Network/HttpServer.cpp | 2 +- samples/HttpServer_FirmwareUpload/.cproject | 151 +++++++ samples/HttpServer_FirmwareUpload/.gitignore | 1 + samples/HttpServer_FirmwareUpload/.project | 28 ++ samples/HttpServer_FirmwareUpload/Makefile | 9 + samples/HttpServer_FirmwareUpload/README.rst | 44 ++ .../app/application.cpp | 237 +++++++++++ .../HttpServer_FirmwareUpload/component.mk | 12 + samples/HttpServer_FirmwareUpload/gulpfile.js | 89 ++++ .../include/AppSettings.h | 67 +++ .../HttpServer_FirmwareUpload/package.json | 22 + .../web/build/.lastModified | 1 + .../web/build/bootstrap-core.css.gz | Bin 0 -> 15861 bytes .../web/build/core.js.gz | Bin 0 -> 30474 bytes .../web/build/index.html | 4 + .../web/build/settings.html | 4 + .../web/build/wifi-sprites.png | Bin 0 -> 1769 bytes .../web/dev/bootstrap.css | 2 + .../web/dev/index.html | 303 ++++++++++++++ .../web/dev/jquery.js | 4 + .../web/dev/settings.html | 120 ++++++ .../web/dev/style.css | 382 ++++++++++++++++++ .../web/dev/wifi-sprites.png | Bin 0 -> 1769 bytes 27 files changed, 1607 insertions(+), 133 deletions(-) create mode 100644 samples/HttpServer_FirmwareUpload/.cproject create mode 100644 samples/HttpServer_FirmwareUpload/.gitignore create mode 100644 samples/HttpServer_FirmwareUpload/.project create mode 100644 samples/HttpServer_FirmwareUpload/Makefile create mode 100644 samples/HttpServer_FirmwareUpload/README.rst create mode 100644 samples/HttpServer_FirmwareUpload/app/application.cpp create mode 100644 samples/HttpServer_FirmwareUpload/component.mk create mode 100644 samples/HttpServer_FirmwareUpload/gulpfile.js create mode 100644 samples/HttpServer_FirmwareUpload/include/AppSettings.h create mode 100644 samples/HttpServer_FirmwareUpload/package.json create mode 100644 samples/HttpServer_FirmwareUpload/web/build/.lastModified create mode 100644 samples/HttpServer_FirmwareUpload/web/build/bootstrap-core.css.gz create mode 100644 samples/HttpServer_FirmwareUpload/web/build/core.js.gz create mode 100644 samples/HttpServer_FirmwareUpload/web/build/index.html create mode 100644 samples/HttpServer_FirmwareUpload/web/build/settings.html create mode 100644 samples/HttpServer_FirmwareUpload/web/build/wifi-sprites.png create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/bootstrap.css create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/index.html create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/jquery.js create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/settings.html create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/style.css create mode 100644 samples/HttpServer_FirmwareUpload/web/dev/wifi-sprites.png diff --git a/Sming/Core/Network/Http/HttpBodyParser.cpp b/Sming/Core/Network/Http/HttpBodyParser.cpp index 73b6a48a1d..bfad76c6db 100644 --- a/Sming/Core/Network/Http/HttpBodyParser.cpp +++ b/Sming/Core/Network/Http/HttpBodyParser.cpp @@ -125,184 +125,167 @@ void bodyToStringParser(HttpRequest& request, const char* at, int length) #ifdef ENABLE_HTTP_SERVER_MULTIPART #include "multipart-parser/multipart_parser.h" +/** @brief Boilerplate code for multipart_parser callbacks + * @note Obtain parser object and check it + */ +#define GET_PARSER() \ + auto parser = static_cast(p->data); \ + if(parser == nullptr) { \ + return -1; \ + } + class MultipartParser { +public: + MultipartParser(HttpRequest* request); + ~MultipartParser(); - public: - MultipartParser(HttpRequest* request); - ~MultipartParser(); + void execute(const char* at, size_t length); - void execute(const char* at, size_t length); + static int readHeaderName(multipart_parser_t* p, const char* at, size_t length); + static int readHeaderValue(multipart_parser_t* p, const char* at, size_t length); + static int partBegin(multipart_parser_t* p); + static int partData(multipart_parser_t* p, const char* at, size_t length); + static int partEnd(multipart_parser_t* p); + static int bodyEnd(multipart_parser_t* p); - static int readHeaderName(multipart_parser_t* p, const char* at, - size_t length); - static int readHeaderValue(multipart_parser_t* p, const char* at, - size_t length); - static int partBegin(multipart_parser_t* p); - static int partData(multipart_parser_t* p, const char* at, size_t length); - static int partEnd(multipart_parser_t* p); - static int bodyEnd(multipart_parser_t* p); +private: + multipart_parser_settings_t settings; - private: - multipart_parser_settings_t settings; + bool useValue = false; - bool useValue = false; + HttpRequest* request; - HttpRequest* request; - - multipart_parser_t* parser; - String name; // current parameter name + multipart_parser_t* parser; + String name; // current parameter name }; MultipartParser::MultipartParser(HttpRequest* request) { - memset(&settings, 0, sizeof(settings)); - settings.on_header_field = readHeaderName; - settings.on_header_value = readHeaderValue; - settings.on_part_data_begin = partBegin; - settings.on_part_data = partData; - settings.on_part_data_end = partEnd; - settings.on_body_end = bodyEnd; - - if (request->headers.contains(HTTP_HEADER_CONTENT_TYPE)) { - // Content-Type: multipart/form-data; boundary=------------------------a48863c0572edce6 - int startPost = request->headers[HTTP_HEADER_CONTENT_TYPE].indexOf("boundary="); - if (startPost == -1) { - return; - } - - startPost += 9; - String boundary = - "--" + request->headers[HTTP_HEADER_CONTENT_TYPE].substring(startPost); - parser = multipart_parser_init(boundary.c_str(), &settings); - } - - this->request = request; - parser->data = this; + memset(&settings, 0, sizeof(settings)); + settings.on_header_field = readHeaderName; + settings.on_header_value = readHeaderValue; + settings.on_part_data_begin = partBegin; + settings.on_part_data = partData; + settings.on_part_data_end = partEnd; + settings.on_body_end = bodyEnd; + + if(request->headers.contains(HTTP_HEADER_CONTENT_TYPE)) { + // Content-Type: multipart/form-data; boundary=------------------------a48863c0572edce6 + int startPost = request->headers[HTTP_HEADER_CONTENT_TYPE].indexOf("boundary="); + if(startPost == -1) { + return; + } + + startPost += 9; + String boundary = "--" + request->headers[HTTP_HEADER_CONTENT_TYPE].substring(startPost); + parser = multipart_parser_init(boundary.c_str(), &settings); + } + + this->request = request; + parser->data = this; } MultipartParser::~MultipartParser() { - multipart_parser_free(parser); - parser = nullptr; + multipart_parser_free(parser); + parser = nullptr; } void MultipartParser::execute(const char* at, size_t length) { - multipart_parser_execute(parser, at, length); + multipart_parser_execute(parser, at, length); } int MultipartParser::partBegin(multipart_parser_t* p) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } + GET_PARSER(); - parser->useValue = false; - return 0; + parser->useValue = false; + return 0; } -int MultipartParser::readHeaderName(multipart_parser_t* p, const char* at, - size_t length) +int MultipartParser::readHeaderName(multipart_parser_t* p, const char* at, size_t length) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } + GET_PARSER(); - if (memcmp(at, "Content-Disposition", length) == 0) { - parser->useValue = true; - } + if(memcmp(at, "Content-Disposition", length) == 0) { + parser->useValue = true; + } - return 0; + return 0; } -int MultipartParser::readHeaderValue(multipart_parser_t* p, const char* at, - size_t length) +int MultipartParser::readHeaderValue(multipart_parser_t* p, const char* at, size_t length) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } - - if (parser->useValue) { - // Content-Disposition: form-data; name="image"; filename=".gitignore" - // Content-Disposition: form-data; name="data" - String value = String(at, length); - int startPos = value.indexOf("name="); - if (startPos == -1) { - return -1; // Invalid header content - } - startPos += 6; // name=" - int endPos = value.indexOf(';', startPos); - if (endPos == -1) { - parser->name = value.substring(startPos, value.length() - 1); - } else { - parser->name = value.substring(startPos, endPos - 1); - } - } - - return 0; + GET_PARSER(); + + if(parser->useValue) { + // Content-Disposition: form-data; name="image"; filename=".gitignore" + // Content-Disposition: form-data; name="data" + String value = String(at, length); + int startPos = value.indexOf("name="); + if(startPos == -1) { + return -1; // Invalid header content + } + startPos += 6; // name=" + int endPos = value.indexOf(';', startPos); + if(endPos == -1) { + parser->name = value.substring(startPos, value.length() - 1); + } else { + parser->name = value.substring(startPos, endPos - 1); + } + } + + return 0; } -int MultipartParser::partData(multipart_parser_t* p, const char* at, - size_t length) +int MultipartParser::partData(multipart_parser_t* p, const char* at, size_t length) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } + GET_PARSER(); - ReadWriteStream* stream = parser->request->files[parser->name]; - if(stream != nullptr) { - stream->write((uint8_t*)at, length); - } + ReadWriteStream* stream = parser->request->files[parser->name]; + if(stream != nullptr) { + stream->write((uint8_t*)at, length); + } - return 0; + return 0; } int MultipartParser::partEnd(multipart_parser_t* p) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } + GET_PARSER(); - return 0; + return 0; } int MultipartParser::bodyEnd(multipart_parser_t* p) { - MultipartParser* parser = (MultipartParser*)p->data; - if (parser == nullptr) { - return -1; - } + GET_PARSER(); - return 0; + return 0; } void formMultipartParser(HttpRequest& request, const char* at, int length) { - MultipartParser* parser = (MultipartParser*)request.args; + MultipartParser* parser = (MultipartParser*)request.args; - if (length == -1) { - delete parser; + if(length == -1) { + delete parser; - parser = new MultipartParser(&request); - request.args = parser; + parser = new MultipartParser(&request); + request.args = parser; - return; - } + return; + } - if (length == -2) { - delete parser; - request.args = nullptr; + if(length == -2) { + delete parser; + request.args = nullptr; - return; - } + return; + } - parser->execute(at, length); + parser->execute(at, length); } #endif /* ENABLE_HTTP_SERVER_MULTIPART */ - diff --git a/Sming/Core/Network/Http/HttpBodyParser.h b/Sming/Core/Network/Http/HttpBodyParser.h index 882b0d15dc..b44ea585b9 100644 --- a/Sming/Core/Network/Http/HttpBodyParser.h +++ b/Sming/Core/Network/Http/HttpBodyParser.h @@ -48,5 +48,5 @@ void formUrlParser(HttpRequest& request, const char* at, int length); void bodyToStringParser(HttpRequest& request, const char* at, int length); #ifdef ENABLE_HTTP_SERVER_MULTIPART -void formMultipartParser(HttpRequest& request, const char *at, int length); +void formMultipartParser(HttpRequest& request, const char* at, int length); #endif diff --git a/Sming/Core/Network/Http/HttpMultipartResource.cpp b/Sming/Core/Network/Http/HttpMultipartResource.cpp index 1e3623fc74..56a32f307e 100644 --- a/Sming/Core/Network/Http/HttpMultipartResource.cpp +++ b/Sming/Core/Network/Http/HttpMultipartResource.cpp @@ -4,9 +4,9 @@ * http://github.com/SmingHub/Sming * All files of the Sming Core are provided under the LGPL v3 license. * - * WebsocketResource.cpp + * HttpMultipartResource.cpp * - * @author: 2017 - Slavey Karadzhov + * @author: 2019 - Slavey Karadzhov * ****/ @@ -14,8 +14,9 @@ int HttpMultipartResource::setFileMap(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response) { - const String& contentType = request.headers[HTTP_HEADER_CONTENT_TYPE]; - if(request.method != HTTP_POST /* || !contentType.startsWith(String(MIME_FORM_MULTIPART)) */) { + String contentType = request.headers[HTTP_HEADER_CONTENT_TYPE]; + String mimeType = ContentType::toString(MIME_FORM_MULTIPART); + if(!(request.method == HTTP_POST && contentType.startsWith(mimeType))) { return 0; } @@ -26,5 +27,4 @@ int HttpMultipartResource::setFileMap(HttpServerConnection& connection, HttpRequ void HttpMultipartResource::shutdown(HttpServerConnection& connection) { - } diff --git a/Sming/Core/Network/Http/HttpMultipartResource.h b/Sming/Core/Network/Http/HttpMultipartResource.h index b1cd6307cc..6404b85372 100644 --- a/Sming/Core/Network/Http/HttpMultipartResource.h +++ b/Sming/Core/Network/Http/HttpMultipartResource.h @@ -4,9 +4,9 @@ * http://github.com/SmingHub/Sming * All files of the Sming Core are provided under the LGPL v3 license. * - * WebsocketResource.h + * HttpMultipartResource.h * - * @author: 2017 - Slavey Karadzhov + * @author: 2019 - Slavey Karadzhov * ****/ @@ -15,17 +15,28 @@ #include "HttpServerConnection.h" #include "HttpResource.h" #include "WString.h" -#include "WHashMap.h" typedef Delegate HttpFilesMapper; class HttpMultipartResource : public HttpResource { public: - HttpMultipartResource(const HttpFilesMapper& mapper, HttpResourceDelegate process) + /** + * @brief HttpResource that allows handling of HTTP file upload. + * @param mapper callback that provides information where the desired upload fields will be stored. + * @param complete callback that will be called after the request has completed. + * @note: + * On a normal computer the file uploads are usually using + * temporary space on the hard disk or in memory to store the incoming data. + * On an embedded device that is a luxury that we can hardly afford. + * Therefore we should define a `map` that specifies explicitly + * where every form field will be stored. + * If a field is not specified then its content will be discarded. + */ + HttpMultipartResource(const HttpFilesMapper& mapper, HttpResourceDelegate complete) { onHeadersComplete = HttpResourceDelegate(&HttpMultipartResource::setFileMap, this); - onRequestComplete = process; + onRequestComplete = complete; this->mapper = mapper; } diff --git a/Sming/Core/Network/HttpServer.cpp b/Sming/Core/Network/HttpServer.cpp index c2f1e23887..a5f86d3a1e 100644 --- a/Sming/Core/Network/HttpServer.cpp +++ b/Sming/Core/Network/HttpServer.cpp @@ -24,7 +24,7 @@ void HttpServer::configure(const HttpServerSettings& settings) if(settings.useDefaultBodyParsers) { setBodyParser(ContentType::toString(MIME_FORM_URL_ENCODED), formUrlParser); #ifdef ENABLE_HTTP_SERVER_MULTIPART - setBodyParser(ContentType::toString(MIME_FORM_MULTIPART), formMultipartParser); + setBodyParser(ContentType::toString(MIME_FORM_MULTIPART), formMultipartParser); #endif } diff --git a/samples/HttpServer_FirmwareUpload/.cproject b/samples/HttpServer_FirmwareUpload/.cproject new file mode 100644 index 0000000000..cdd4acfa57 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/.cproject @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make + -f ${ProjDirPath}/Makefile + all + true + true + true + + + make + -f ${ProjDirPath}/Makefile + clean + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flash + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashonefile + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashinit + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashboot + true + true + true + + + make + -f ${ProjDirPath}/Makefile + rebuild + true + true + true + + + + + + + + + + + + + + + + + + + + diff --git a/samples/HttpServer_FirmwareUpload/.gitignore b/samples/HttpServer_FirmwareUpload/.gitignore new file mode 100644 index 0000000000..3c3629e647 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/samples/HttpServer_FirmwareUpload/.project b/samples/HttpServer_FirmwareUpload/.project new file mode 100644 index 0000000000..aadd728366 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/.project @@ -0,0 +1,28 @@ + + + HttpServer_FirmwareUpload + + + SmingFramework + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/samples/HttpServer_FirmwareUpload/Makefile b/samples/HttpServer_FirmwareUpload/Makefile new file mode 100644 index 0000000000..ff51b6c3a7 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/Makefile @@ -0,0 +1,9 @@ +##################################################################### +#### Please don't change this file. Use component.mk instead #### +##################################################################### + +ifndef SMING_HOME +$(error SMING_HOME is not set: please configure it as an environment variable) +endif + +include $(SMING_HOME)/project.mk diff --git a/samples/HttpServer_FirmwareUpload/README.rst b/samples/HttpServer_FirmwareUpload/README.rst new file mode 100644 index 0000000000..dfb03fe868 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/README.rst @@ -0,0 +1,44 @@ +HttpServer Config Network +========================= + +Introduction +------------ + +The HTTP server coming with Sming is quite powerful but it is limited +from the available resources of the underlining hardware (your favorite +ESP8266 microcontroller). Serving multiple files at once can be +problematic. It is not the size of the files that can cause problems, +but the number of simultaneous files that need to be delivered. +Therefore if you serve multiple CSS or JS files you can optimize your +web application before uploading it into your ESP8266 using the advice +below. + +Optimizing File Delivery +------------------------ + +In this example you will see how to combine CSS and JS files, compress +them and deliver the optimized content via the HTTP server. + +Installation +~~~~~~~~~~~~ + +The file optimization uses ``gulp``. To install it and the needed gulp +packages you need to install first `npm `__. Npm +is the Node.JS package manager. Once you are done with the installation +you can run from the command line the following: + +npm install + +The command above will install gulp and its dependencies. + +Usage +~~~~~ + +During the development of your web application you should work only in +the ``web/dev/`` folder. Once you are ready with the application you can +``pack`` the resources and ``upload`` them to your device. The commands +are + +make web-pack make web-upload + +That should be it. diff --git a/samples/HttpServer_FirmwareUpload/app/application.cpp b/samples/HttpServer_FirmwareUpload/app/application.cpp new file mode 100644 index 0000000000..cef4e6ca9e --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/app/application.cpp @@ -0,0 +1,237 @@ +#include +#include +#include +#include "Data/Stream/LimitedMemoryStream.h" +#include "Data/Stream/TemplateFlashMemoryStream.h" +#include +//#include + +HttpServer server; +FtpServer ftp; + +BssList networks; +String network, password; +Timer connectionTimer; + +String lastModified; + +// Instead of using a SPIFFS file, here we demonstrate usage of imported Flash Strings +IMPORT_FSTR(flashSettings, PROJECT_DIR "/web/build/settings.html") + +void onIndex(HttpRequest& request, HttpResponse& response) +{ + TemplateFileStream* tmpl = new TemplateFileStream("index.html"); + auto& vars = tmpl->variables(); + response.sendTemplate(tmpl); // will be automatically deleted +} + +int onIpConfig(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response) +{ + if(request.method == HTTP_POST) { + debugf("Request coming from IP: %s", connection.getRemoteIp().toString().c_str()); + // If desired you can also limit the access based on remote IP. Example below: + // if(!(IPAddress("192.168.4.23") == connection.getRemoteIp())) { + // return 1; // error + // } + + AppSettings.dhcp = request.getPostParameter("dhcp") == "1"; + AppSettings.ip = request.getPostParameter("ip"); + AppSettings.netmask = request.getPostParameter("netmask"); + AppSettings.gateway = request.getPostParameter("gateway"); + debugf("Updating IP settings: %d", AppSettings.ip.isNull()); + AppSettings.save(); + } + + /* + * We could use a regular SPIFFS file for this, but instead we demonstrate using a Flash String. + * + * TemplateFileStream* tmpl = new TemplateFileStream("settings.html"); + */ + auto tmpl = new TemplateFlashMemoryStream(flashSettings); + auto& vars = tmpl->variables(); + + bool dhcp = WifiStation.isEnabledDHCP(); + vars["dhcpon"] = dhcp ? "checked='checked'" : ""; + vars["dhcpoff"] = !dhcp ? "checked='checked'" : ""; + + if(!WifiStation.getIP().isNull()) { + vars["ip"] = WifiStation.getIP().toString(); + vars["netmask"] = WifiStation.getNetworkMask().toString(); + vars["gateway"] = WifiStation.getNetworkGateway().toString(); + } else { + vars["ip"] = "192.168.1.77"; + vars["netmask"] = "255.255.255.0"; + vars["gateway"] = "192.168.1.1"; + } + + response.sendTemplate(tmpl); // will be automatically deleted + + return 0; +} + +void onFile(HttpRequest& request, HttpResponse& response) +{ + if(lastModified.length() > 0 && request.headers[HTTP_HEADER_IF_MODIFIED_SINCE].equals(lastModified)) { + response.code = HTTP_STATUS_NOT_MODIFIED; + return; + } + + String file = request.uri.getRelativePath(); + + if(file[0] == '.') + response.code = HTTP_STATUS_FORBIDDEN; + else { + if(lastModified.length() > 0) { + response.headers[HTTP_HEADER_LAST_MODIFIED] = lastModified; + } + + response.setCache(86400, true); // It's important to use cache for better performance. + response.sendFile(file); + } +} + +void onAjaxNetworkList(HttpRequest& request, HttpResponse& response) +{ + JsonObjectStream* stream = new JsonObjectStream(); + JsonObject json = stream->getRoot(); + + json["status"] = (bool)true; + + bool connected = WifiStation.isConnected(); + json["connected"] = connected; + if(connected) { + // Copy full string to JSON buffer memory + json["network"] = WifiStation.getSSID(); + } + + JsonArray netlist = json.createNestedArray("available"); + for(unsigned i = 0; i < networks.count(); i++) { + if(networks[i].hidden) + continue; + JsonObject item = netlist.createNestedObject(); + item["id"] = (int)networks[i].getHashId(); + // Copy full string to JSON buffer memory + item["title"] = networks[i].ssid; + item["signal"] = networks[i].rssi; + item["encryption"] = networks[i].getAuthorizationMethodName(); + } + + response.setAllowCrossDomainOrigin("*"); + response.sendDataStream(stream, MIME_JSON); +} + +void makeConnection() +{ + WifiStation.enable(true); + WifiStation.config(network, password); + + AppSettings.ssid = network; + AppSettings.password = password; + AppSettings.save(); + + network = ""; // task completed +} + +void onAjaxConnect(HttpRequest& request, HttpResponse& response) +{ + JsonObjectStream* stream = new JsonObjectStream(); + JsonObject json = stream->getRoot(); + + String curNet = request.getPostParameter("network"); + String curPass = request.getPostParameter("password"); + + bool updating = curNet.length() > 0 && (WifiStation.getSSID() != curNet || WifiStation.getPassword() != curPass); + bool connectingNow = WifiStation.getConnectionStatus() == eSCS_Connecting || network.length() > 0; + + if(updating && connectingNow) { + debugf("wrong action: %s %s, (updating: %d, connectingNow: %d)", network.c_str(), password.c_str(), updating, + connectingNow); + json["status"] = (bool)false; + json["connected"] = (bool)false; + } else { + json["status"] = (bool)true; + if(updating) { + network = curNet; + password = curPass; + debugf("CONNECT TO: %s %s", network.c_str(), password.c_str()); + json["connected"] = false; + connectionTimer.initializeMs(1200, makeConnection).startOnce(); + } else { + json["connected"] = WifiStation.isConnected(); + debugf("Network already selected. Current status: %s", WifiStation.getConnectionStatusName()); + } + } + + if(!updating && !connectingNow && WifiStation.isConnectionFailed()) + json["error"] = WifiStation.getConnectionStatusName(); + + response.setAllowCrossDomainOrigin("*"); + response.sendDataStream(stream, MIME_JSON); +} + +int onUpload(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response) +{ + ReadWriteStream* file = request.files["test"]; + if(file == nullptr) { + debug_e("Something went wrong with the file upload"); + return 1; + } + + debugf("Uploaded length: %d", file->available()); + return 0; +} + +void startWebServer() +{ + server.listen(80); + server.paths.set("/", onIndex); + + auto mapper = [](HttpFiles& files) { + /* + * On a normal computer the file uploads are usually using + * temporary space on the hard disk or in memory to store the incoming data. + * + * On an embedded device that is a luxury that we can hardly afford. + * Therefore we should define a `map` that specifies explicitly + * where a specific form field will be stored. + * + * If a field is not specified then its content will be discarded. + */ + files["test"] = new LimitedMemoryStream(1025); + }; + + HttpMultipartResource* uploadResouce = new HttpMultipartResource(mapper, onUpload); + server.paths.set("/upload", uploadResouce); + + server.paths.setDefault(onFile); +} + +void networkScanCompleted(bool succeeded, BssList list) +{ + if(succeeded) { + for(unsigned i = 0; i < list.count(); i++) + if(!list[i].hidden && list[i].ssid.length() > 0) + networks.add(list[i]); + } + networks.sort([](const BssInfo& a, const BssInfo& b) { return b.rssi - a.rssi; }); +} + +void init() +{ + spiffs_mount(); // Mount file system, in order to work with files + + if(fileExist(".lastModified")) { + // The last modification + lastModified = fileGetContent(".lastModified"); + lastModified.trim(); + } + + Serial.begin(SERIAL_BAUD_RATE); // 115200 by default + Serial.systemDebugOutput(true); // Enable debug output to serial + AppSettings.load(); + + WifiStation.enable(true); + + // Run WEB server on system ready + System.onReady(startWebServer); +} diff --git a/samples/HttpServer_FirmwareUpload/component.mk b/samples/HttpServer_FirmwareUpload/component.mk new file mode 100644 index 0000000000..f60a975af1 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/component.mk @@ -0,0 +1,12 @@ +SPIFF_FILES = web/build +ARDUINO_LIBRARIES := ArduinoJson6 + +# The line below enables the form upload support on the server +ENABLE_HTTP_SERVER_MULTIPART = 1 + +web-pack: + $(Q) gulp + $(Q) date +'%a, %d %b %Y %H:%M:%S GMT' -u > web/build/.lastModified + +web-upload: web-pack spiff_update + $(call WriteFlash,$(SPIFF_START_OFFSET)=$(SPIFF_BIN_OUT)) diff --git a/samples/HttpServer_FirmwareUpload/gulpfile.js b/samples/HttpServer_FirmwareUpload/gulpfile.js new file mode 100644 index 0000000000..ea3e869b99 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/gulpfile.js @@ -0,0 +1,89 @@ +/* + +ESP8266 file system builder with PlatformIO support + +Copyright (C) 2016 by Xose Pérez + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +*/ + +// ----------------------------------------------------------------------------- +// File system builder +// ----------------------------------------------------------------------------- + +const gulp = require('gulp'); +const plumber = require('gulp-plumber'); +const htmlmin = require('gulp-htmlmin'); +const cleancss = require('gulp-clean-css'); +const uglify = require('gulp-uglify'); +const gzip = require('gulp-gzip'); +const del = require('del'); +const useref = require('gulp-useref'); +const gulpif = require('gulp-if'); +const inline = require('gulp-inline'); + +/* Clean destination folder */ +gulp.task('clean', function() { + return del(['data/*']); +}); + +/* Copy static files */ +gulp.task('files', function() { + return gulp.src([ + 'web/dev/*.{jpg,jpeg,png,ico,gif}', + ]) + .pipe(gulp.dest('web/build')); +}); + +/* Process HTML, CSS, JS --- INLINE --- */ +gulp.task('inline', function() { + return gulp.src('web/dev/*.html') + .pipe(inline({ + base: 'web/dev/', + js: uglify, + css: cleancss, + disabledTypes: ['svg', 'img'] + })) + .pipe(htmlmin({ + collapseWhitespace: true, + removeComments: true, + minifyCSS: true, + minifyJS: true + })) + .pipe(gzip()) + .pipe(gulp.dest('web/build/')); +}) + +/* Process HTML, CSS, JS */ +gulp.task('html', function() { + return gulp.src('web/dev/*.html') + .pipe(useref()) + .pipe(plumber()) + .pipe(gulpif('*.css', cleancss())) + .pipe(gulpif('*.js', uglify())) + .pipe(gulpif('*.html', htmlmin({ + collapseWhitespace: true, + removeComments: true, + minifyCSS: true, + minifyJS: true + }))) + .pipe(gulpif(['*.css','*.js'], gzip())) + .pipe(gulp.dest('web/build/')); +}); + +/* Build file system */ +gulp.task('buildfs', ['clean', 'files', 'html']); +gulp.task('buildfs2', ['clean', 'files', 'inline']); +gulp.task('default', ['buildfs']); diff --git a/samples/HttpServer_FirmwareUpload/include/AppSettings.h b/samples/HttpServer_FirmwareUpload/include/AppSettings.h new file mode 100644 index 0000000000..1ee8e5c14b --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/include/AppSettings.h @@ -0,0 +1,67 @@ +/* + * AppSettings.h + * + * Created on: 13 ??? 2015 ?. + * Author: Anakod + */ + +#include +#include + +#ifndef INCLUDE_APPSETTINGS_H_ +#define INCLUDE_APPSETTINGS_H_ + +#define APP_SETTINGS_FILE ".settings.conf" // leading point for security reasons :) + +struct ApplicationSettingsStorage { + String ssid; + String password; + + bool dhcp = true; + + IPAddress ip; + IPAddress netmask; + IPAddress gateway; + + void load() + { + DynamicJsonDocument doc(1024); + if(Json::loadFromFile(doc, APP_SETTINGS_FILE)) { + JsonObject network = doc["network"]; + ssid = network["ssid"].as(); + password = network["password"].as(); + + dhcp = network["dhcp"] | false; + + ip = network["ip"].as(); + netmask = network["netmask"].as(); + gateway = network["gateway"].as(); + } + } + + void save() + { + DynamicJsonDocument doc(1024); + + auto network = doc.createNestedObject("network"); + network["ssid"] = ssid.c_str(); + network["password"] = password.c_str(); + + network["dhcp"] = dhcp; + + network["ip"] = ip.toString(); + network["netmask"] = netmask.toString(); + network["gateway"] = gateway.toString(); + + Json::saveToFile(doc, APP_SETTINGS_FILE); + } + + bool exist() + { + return fileExist(APP_SETTINGS_FILE); + } +}; + +static ApplicationSettingsStorage AppSettings; + +#endif /* INCLUDE_APPSETTINGS_H_ */ diff --git a/samples/HttpServer_FirmwareUpload/package.json b/samples/HttpServer_FirmwareUpload/package.json new file mode 100644 index 0000000000..2172fccfa7 --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/package.json @@ -0,0 +1,22 @@ +{ + "name": "esp8266-filesystem-builder", + "version": "0.1.0", + "description": "Gulp based build script for ESP8266 file system files", + "main": "gulpfile.js", + "author": "Xose Pérez ", + "license": "MIT", + "devDependencies": { + "del": "^2.2.1", + "gulp": "^3.9.1", + "gulp-clean-css": "^2.0.10", + "gulp-gzip": "^1.4.0", + "gulp-htmlmin": "^2.0.0", + "gulp-if": "^2.0.1", + "gulp-inline": "^0.1.1", + "gulp-plumber": "^1.1.0", + "gulp-uglify": "^1.5.3", + "gulp-useref": "^3.1.2", + "yargs": "^5.0.0" + }, + "dependencies": {} +} diff --git a/samples/HttpServer_FirmwareUpload/web/build/.lastModified b/samples/HttpServer_FirmwareUpload/web/build/.lastModified new file mode 100644 index 0000000000..9685abd72b --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/build/.lastModified @@ -0,0 +1 @@ +Mon, 24 Jul 2017 17:20:31 GMT diff --git a/samples/HttpServer_FirmwareUpload/web/build/bootstrap-core.css.gz b/samples/HttpServer_FirmwareUpload/web/build/bootstrap-core.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..8483876af3e9ba369e93d223ee6c03ca8ca9f77a GIT binary patch literal 15861 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≺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 F{|_Xg0#E<| literal 0 HcmV?d00001 diff --git a/samples/HttpServer_FirmwareUpload/web/build/core.js.gz b/samples/HttpServer_FirmwareUpload/web/build/core.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..6765d5850bb1af07a91fbe34174bbaddefc10c1c GIT binary patch literal 30474 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 RkUbR7{twGu9YXg|0RTa39)AD; literal 0 HcmV?d00001 diff --git a/samples/HttpServer_FirmwareUpload/web/build/index.html b/samples/HttpServer_FirmwareUpload/web/build/index.html new file mode 100644 index 0000000000..a89f8c23ad --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/build/index.html @@ -0,0 +1,4 @@ +Sming Framework WiFi Network configuration

Sming Based

Network Settings

Wireless network connection

Networks

\ No newline at end of file diff --git a/samples/HttpServer_FirmwareUpload/web/build/settings.html b/samples/HttpServer_FirmwareUpload/web/build/settings.html new file mode 100644 index 0000000000..315f279b8e --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/build/settings.html @@ -0,0 +1,4 @@ +Sming Framework WiFi Network configuration

Sming Based

Network Settings

Wireless network connection

Settings

IP Address
\ No newline at end of file diff --git a/samples/HttpServer_FirmwareUpload/web/build/wifi-sprites.png b/samples/HttpServer_FirmwareUpload/web/build/wifi-sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..7a61d71a115bb69eb2a847f6c63c5b35c585aaf6 GIT binary patch literal 1769 zcmZXVX*3)78pi*Y8$nYkf>D|@rJZP1EzKx(1<^88W1Cuv)>0MipvF$3rjFp6mQvM@ zTBb$D672}JgxXt67=zdn!dy!%u_RI|jC<}m_ndp?`S6_g>+gM^=e(%|hpR9-bvXb4 z%+?0)1c1ch2yjryp$omJ%>Y2EZSfW^(G#m|9}2=%LuQ@N@9SeUMzLHSmEx*hK7Q!w ze)n3dQ|s)fp&m(OEC!kxyL58#O=;RYXe!z=?Ht;wb@B0_)gZEB&pAu3*eNKD9C;&> z&&j*Az-q6WU_{+nYnY#XB_?s2!fA#rrVFINNM@cPIQDmCc+Cd5@^zga1>i2m)tlJs zL>0yLtLQBk)Cn;RQri*1>yeUxOlh0pHfp;_)U*;H9;pj)$zv#^$Nx>$nQFaXb~(JG zclY`L!`iO*+5Gt%t{t9re!Snsim_jTHxAi$`Jp@m)icbtY#mO??w{MXVxR#Y9N0KmaGtz2}keE7r8=FRh&a+M>0RNHqt&i z!QaoMY9CYw?K6=IM6)MOszzHq&45|V%5Kv2xxQvGIXA6>P2`pQgY#2Rb>sG}%_!5f zFM^Q9;0~dWP=X+5X)G&Y#JY=zo2GmVFP>(pz$1!vd3`GrhQ9DdX|GkKu!+g=;Zdnt zEuu&S2wza*})8;MVpodUI|cFyuU_=YJXVr z&^wV|4@XXIR2<^ATy#EZvA^1Yeo||Dm;4~NKq;axuk=BG%}P+Ta-vQR4e3mp#CSt+ zK9$E4h!2}Aba|nL3wq=^>{|EIx`yvd|LhPHwyTxn$9YCOpRAl8Zh{LoAk>#|bWd|cW&!+S z4fA(<8Z)Q{1IcZdQYyHbDnHUnd6)Ma5RvOQY4s${is{z3u0xBOPd_8z|G$OlD;)Xt zeP7+RVb^ReeABj_xs0%>k>JQvYtpVu1?M{j%q8QuvA-RH-+w;(pagB4@{{l&dRLIY zT$Kl6APl$rbt@^dc zl_GF}ZljAFeJDKbErn9=K8)^vuX*e+$6YCK@cr0!&51SBRICz=UHM%B zoT`J?Hx_;D_TFB;`DNV0EJslEFOcCJA&piGm7V{=zWbpJHrAaSF{k0`c{cv>uU6d+ ze%_;GUPFCaP3Q0?^EPjz{g6w8_R4y8C~2Wb9y0Wz4l|Z7I2DQUeH~MYBySgN){?Ht z0R2w(HgoQa;HmV55^J#QPKJVqvKQWqVDFHfs6<%?`#_?PAaYp;^Vso4GV`XLP-~bKn=t|VTma%PV6(+Q^ggU7zXuf%A{>!hFHiN7N&78Id z($#6Ul$jW%n0(q!5?|`aOjLiahZ5Fm?)vTP|*&Ej&i+= z<(^l|JrrHk8y&nP>H0G-kVh1s18QZ_aP(saz1m_U>bvjV20roJ&y8;+9eqC^216(n zolA1I75ZYBM;-1t4Ue$iljwsrBiAc78tv1~PbGCdRgHR}2dTY$b4;eRJ93mf&qor( z{`D$i0Xvm_FrI_yP`m4Rqo8s+v{4lG1I?|{X)yfR-d-@fWlpcza)5V6F4&el?&{Oq zY(BU(=;vW{^rV>Dyf5g^U-WJ^5E)9M*o>4?bNt`s$7v}OC(3EaA5j1E$!x71@Ku(# GlKukF<4{Wg literal 0 HcmV?d00001 diff --git a/samples/HttpServer_FirmwareUpload/web/dev/bootstrap.css b/samples/HttpServer_FirmwareUpload/web/dev/bootstrap.css new file mode 100644 index 0000000000..03c036f12b --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/dev/bootstrap.css @@ -0,0 +1,2 @@ +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{-moz-box-sizing:content-box;-webkit-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;-moz-box-sizing:content-box;-webkit-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}*{-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:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{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}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{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;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 #eee}.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}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,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:#777}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:#fcf8e3;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:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}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 #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 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:#777}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 #eee;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:#fff;background-color:#333;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:#333;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{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: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>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 #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.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 #ddd}.table .table{background-color:#fff}.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 #ddd}.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 #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{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;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:#f5f5f5}.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:#e8e8e8}.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:#dff0d8}.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:#d0e9c6}.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:#d9edf7}.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:#c4e3f3}.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:#fcf8e3}.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:#faf2cc}.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:#f2dede}.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:#ebcccc}.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 #ddd}.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:#333;border:0;border-bottom:1px solid #e5e5e5}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: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,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,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.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[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}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:46px}}.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{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:7px;padding-bottom:7px;margin-bottom:0}.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}select.form-group-sm .form-control{height:30px;line-height:30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 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}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 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}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.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:#3c763d}.has-success .form-control{border-color:#3c763d;-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:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.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:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-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:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.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:#a94442}.has-error .form-control{border-color:#a94442;-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:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.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 .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:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.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:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.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:6px 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:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;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;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.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,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{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:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.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,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{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:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.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,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.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,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.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,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.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,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;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:#23527c;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:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 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%}.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-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-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.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-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}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:6px 12px;font-size:14px;font-weight:normal;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="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{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:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{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:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;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 #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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{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{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 #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:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.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;visibility:visible !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:8px;margin-bottom:8px}@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: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-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:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.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:#555;background-color:#e7e7e7}.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:#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:hover,.navbar-default .btn-link:focus{color:#333}.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:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{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:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@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:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.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:#fff;background-color:#080808}.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:#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:hover,.navbar-inverse .btn-link:focus{color:#fff}.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:#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{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{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]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{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:30px 15px;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{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.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:#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>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{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: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:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;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:#fff;text-align:center;background-color:#337ab7;-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 .6s ease;-o-transition:width .6s ease;transition:width .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:#5cb85c}.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:#f0ad4e}.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:#d9534f}.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)}.list-group{margin-bottom:20px;padding-left:0}.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-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{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;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:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.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:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{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,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:#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-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-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 #ddd}.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 #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}.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,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:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.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,.panel-body:before,.panel-body: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,.panel-body: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;visibility:hidden !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}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}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}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}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}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}} +.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-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-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.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)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/samples/HttpServer_FirmwareUpload/web/dev/index.html b/samples/HttpServer_FirmwareUpload/web/dev/index.html new file mode 100644 index 0000000000..9686d09d1e --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/dev/index.html @@ -0,0 +1,303 @@ + + + + + + + + + + + + + Sming Framework WiFi Network configuration + + + + + + + + + + + + + + + + + +
+
+ +

Sming Based

+
+ +
+

Network Settings

+ +

Wireless network connection +

+
+ +
+
+ +
+
+
+

Networks

+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + diff --git a/samples/HttpServer_FirmwareUpload/web/dev/jquery.js b/samples/HttpServer_FirmwareUpload/web/dev/jquery.js new file mode 100644 index 0000000000..051d9890ba --- /dev/null +++ b/samples/HttpServer_FirmwareUpload/web/dev/jquery.js @@ -0,0 +1,4 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("